Add support snapshot for raw image format

This commit is contained in:
Alex X
2025-01-07 20:08:29 +03:00
parent 33e0ccdd10
commit e4b8d1807d
4 changed files with 43 additions and 2 deletions
+1 -1
View File
@@ -46,7 +46,7 @@ func (c *Consumer) AddTrack(media *core.Media, _ *core.Codec, track *core.Receiv
if track.Codec.IsRTP() {
sender.Handler = RTPDepay(sender.Handler)
} else if track.Codec.Name == core.CodecRAW {
sender.Handler = Encoder(track.Codec, sender.Handler)
sender.Handler = Encoder(track.Codec, 0, sender.Handler)
}
sender.HandleRTP(track)
+8 -1
View File
@@ -52,12 +52,19 @@ func FixJPEG(b []byte) []byte {
return buf.Bytes()
}
func Encoder(codec *core.Codec, handler core.HandlerFunc) core.HandlerFunc {
// Encoder convert YUV frame to Img.
// Support skipping empty frames, for example if USB cam needs time to start.
func Encoder(codec *core.Codec, skipEmpty int, handler core.HandlerFunc) core.HandlerFunc {
newImage := y4m.NewImage(codec.FmtpLine)
return func(packet *rtp.Packet) {
img := newImage(packet.Payload)
if skipEmpty != 0 && y4m.HasSameColor(img) {
skipEmpty--
return
}
buf := bytes.NewBuffer(nil)
if err := jpeg.Encode(buf, img, nil); err != nil {
return