[FFmpeg-trac] #10784(avformat:new): rtsp mjpeg: Missing packets; dropping frame.

FFmpeg trac at avcodec.org
Mon Jan 8 15:19:56 EET 2024


#10784: rtsp mjpeg: Missing packets; dropping frame.
-------------------------------------+-------------------------------------
             Reporter:  wose         |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:  avformat     |                  Version:
                                     |  unspecified
             Keywords:  rtsp mjpeg   |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 I have a rtsp mjpeg stream which doesn't start playing with ffmpeg/ffplay.

 {{{
 ffplay version N-113236-g90bef6390f Copyright (c) 2003-2024 the FFmpeg
 developers
   built with gcc 13.2.1 (GCC) 20230801
   configuration:
   libavutil      58. 36.101 / 58. 36.101
   libavcodec     60. 37.100 / 60. 37.100
   libavformat    60. 20.100 / 60. 20.100
   libavdevice    60.  4.100 / 60.  4.100
   libavfilter     9. 17.100 /  9. 17.100
   libswscale      7.  6.100 /  7.  6.100
   libswresample   4. 13.100 /  4. 13.100
 Initialized opengl renderer.
 [tcp @ 0x7f4844003780] No default whitelist set
 [tcp @ 0x7f4844003780] Original list of addresses:
 [tcp @ 0x7f4844003780] Address 192.168.3.3 port 654
 [tcp @ 0x7f4844003780] Interleaved list of addresses:
 [tcp @ 0x7f4844003780] Address 192.168.3.3 port 654
 [tcp @ 0x7f4844003780] Starting connection attempt to 192.168.3.3 port 654
 [tcp @ 0x7f4844003780] Successfully connected to 192.168.3.3 port 654
 [rtsp @ 0x7f4844000c80] SDP:
 v=0
 o=- 0 0 IN IP4 0.0.0.0
 s=
 i=
 c=IN IP4 0.0.0.0
 t=0 0
 m=video 0 RTP/AVP 26
 a=rtpmap:26 JPEG/90000
 a=control:rtsp://192.168.3.3:654/00000001-0000-babe-0000-00075f92e21d/live

 [rtsp @ 0x7f4844000c80] video codec set to: mjpeg
 [rtp @ 0x7f4844009980] No default whitelist set
 [udp @ 0x7f4844009cc0] No default whitelist set
 [udp @ 0x7f4844009cc0] end receive buffer size reported is 425984
 [udp @ 0x7f484401a000] No default whitelist set
 [udp @ 0x7f484401a000] end receive buffer size reported is 425984
 [rtsp @ 0x7f4844000c80] setting jitter buffer size to 500
 [rtsp @ 0x7f4844000c80] hello state=0
 [rtsp @ 0x7f4844000c80] Missing packets; dropping frame.
     Last message repeated 18 times
 [rtsp @ 0x7f4844000c80] Missing packets; dropping frame. 0B f=0/0
     Last message repeated 18 times
 ...
 }}}

 The stream does play in vlc (master branch).

 I managed to make the stream play using ffplay by disabling the check for
 missed packets in rtpdec_jpeg.c

 {{{
 diff --git a/libavformat/rtpdec_jpeg.c b/libavformat/rtpdec_jpeg.c
 index b32d074136..1988da0853 100644
 --- a/libavformat/rtpdec_jpeg.c
 +++ b/libavformat/rtpdec_jpeg.c
 @@ -350,7 +350,8 @@ static int jpeg_parse_packet(AVFormatContext *ctx,
 PayloadContext *jpeg,
          return AVERROR_INVALIDDATA;
      }

 -    if (off != avio_tell(jpeg->frame) - jpeg->hdr_size) {
 +    int64_t sz = avio_tell(jpeg->frame) - jpeg->hdr_size;
 +    if (off != sz && off != sz + 132) {
          av_log(ctx, AV_LOG_ERROR,
                 "Missing packets; dropping frame.\n");
          return AVERROR(EAGAIN);
 --
 }}}

 There are always 132 bytes additional bytes which are not expected.
 I attached a dump of the UDP stream.
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/10784>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list