[FFmpeg-trac] #8211(avformat:new): ffplay does'nt play mjpeg stream

FFmpeg trac at avcodec.org
Sun Mar 21 23:53:46 EET 2021


#8211: ffplay does'nt play mjpeg stream
-------------------------------------+------------------------------------
             Reporter:  anhsoft      |                    Owner:
                 Type:  enhancement  |                   Status:  new
             Priority:  wish         |                Component:  avformat
              Version:  git-master   |               Resolution:
             Keywords:  rtsp mjpeg   |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+------------------------------------

Comment (by HappyCow):

 Dear friends, this problem has me stuck and intrigued yet.
 Basically the same application (ffmpeg) doing a perfect job in Android and
 failing in the other platforms.
 Probably the difference is subtle and requires and expert eye (what I am
 absolutely not, due to my lack of knowledge in ffmpeg)
 You can tell, following the decoding process in both platforms that
 everything goes quite similar, except for the estimation of the
 "avail_size_in_buf" [which I assume is the AVPacket->pkt->size] when
 parsing the first JFIF D8 marker [SOI, Start of Image], then it also
 differs when parsing the DD [restart interval], and finally it goes crazy
 with the DA [start of scan] (my guess is because it got the buffer size
 wrong) until it finally reaches the D9 [end of image] and the same history
 repeats again over and over, frame after frame.
 I am including the comparative table in both platforms.

 ||= IjkPlayer (Android) =||= FFPLAY (Windows) =||
 ||** marker=d8 avail_size_in_buf=37738||** marker=d8
 avail_size_in_buf=8859||
 ||marker parser used 0 bytes (0 bits)||marker parser used 0 bytes (0
 bits)||
 ||marker=e0 avail_size_in_buf=37736||marker=e0 avail_size_in_buf=8857||
 ||marker parser used 16 bytes (128 bits)||marker parser used 16 bytes (128
 bits)||
 ||  ||** marker=dd avail_size_in_buf=8839||
 ||=   =||=** restart interval: 1181 =||
 ||  ||marker parser used 4 bytes (32 bits)||
 ||=** marker=db avail_size_in_buf=37718 =||=** marker=db
 avail_size_in_buf=8833 =||
 ||index=0||index=0||
 ||qscale[0]: 11||qscale[0]: 11||
 ||index=1||index=1||
 ||qscale[1]: 21||qscale[1]: 21||
 ||marker parser used 132 bytes (1056 bits)||marker parser used 132 bytes
 (1056 bits)||
 ||** marker=dd avail_size_in_buf=37584||||
 ||=** restart interval: 40 =||= =||
 ||marker parser used 4 bytes (32 bits)||||
 ||marker=c4 avail_size_in_buf=37578||marker=c4 avail_size_in_buf=8699||
 ||class=0 index=0 nb_codes=12||class=0 index=0 nb_codes=12||
 ||class=0 index=1 nb_codes=12||class=0 index=1 nb_codes=12||
 ||class=1 index=0 nb_codes=251||class=1 index=0 nb_codes=251||
 ||class=1 index=1 nb_codes=251||class=1 index=1 nb_codes=251||
 ||marker parser used 418 bytes (3344 bits)||marker parser used 418 bytes
 (3344 bits)||
 ||marker=c0 avail_size_in_buf=37158||marker=c0 avail_size_in_buf=8279||
 ||sof0: picture: 640x480||sof0: picture: 640x480||
 ||component 0 2:2 id: 0 quant:0||component 0 2:2 id: 0 quant:0||
 ||component 1 1:1 id: 1 quant:1||component 1 1:1 id: 1 quant:1||
 ||component 2 1:1 id: 2 quant:1||component 2 1:1 id: 2 quant:1||
 ||pix fmt id 22111100||pix fmt id 22111100||
 ||marker parser used 17 bytes (136 bits)||marker parser used 17 bytes (136
 bits)||
 ||=** escaping removed 76 bytes =||=**escaping removed 15 bytes =||
 ||=** marker=da avail_size_in_buf=37139 =||=**marker=da
 avail_size_in_buf=8260 =||
 ||component: 0||component: 0||
 ||component: 1||component: 1||
 ||component: 2||component: 2||
 ||=** marker parser used 37062 bytes (296490 bits) =||=**mjpeg_decode_dc:
 bad vlc: 0:0 (0000021cc9e39248) =||
 ||  ||error dc||
 ||  ||error y=1 x=0||
 ||  ||marker parser used 245 bytes (1955 bits)||
 ||  ||marker=d0 avail_size_in_buf=8013||
 ||  ||restart marker: 0||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d1 avail_size_in_buf=7774||
 ||  ||restart marker: 1||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d2 avail_size_in_buf=7536||
 ||  ||restart marker: 2||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d3 avail_size_in_buf=7301||
 ||  ||restart marker: 3||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d4 avail_size_in_buf=7065||
 ||  ||restart marker: 4||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d5 avail_size_in_buf=6834||
 ||  ||restart marker: 5||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d6 avail_size_in_buf=6612||
 ||  ||restart marker: 6||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d7 avail_size_in_buf=6388||
 ||  ||restart marker: 7||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d0 avail_size_in_buf=6151||
 ||  ||restart marker: 0||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d1 avail_size_in_buf=5928||
 ||  ||restart marker: 1||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d2 avail_size_in_buf=5699||
 ||  ||restart marker: 2||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d3 avail_size_in_buf=5468||
 ||  ||restart marker: 3||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d4 avail_size_in_buf=5200||
 ||  ||restart marker: 4||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d5 avail_size_in_buf=4806||
 ||  ||restart marker: 5||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d6 avail_size_in_buf=4339||
 ||  ||restart marker: 6||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d7 avail_size_in_buf=3754||
 ||  ||restart marker: 7||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d0 avail_size_in_buf=3324||
 ||  ||restart marker: 0||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d1 avail_size_in_buf=3103||
 ||  ||restart marker: 1||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d2 avail_size_in_buf=2898||
 ||  ||restart marker: 2||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d3 avail_size_in_buf=2659||
 ||  ||restart marker: 3||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d4 avail_size_in_buf=2425||
 ||  ||restart marker: 4||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d5 avail_size_in_buf=2165||
 ||  ||restart marker: 5||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d6 avail_size_in_buf=1869||
 ||  ||restart marker: 6||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d7 avail_size_in_buf=1593||
 ||  ||restart marker: 7||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d0 avail_size_in_buf=1325||
 ||  ||restart marker: 0||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d1 avail_size_in_buf=1065||
 ||  ||restart marker: 1||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d2 avail_size_in_buf=788||
 ||  ||restart marker: 2||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d3 avail_size_in_buf=515||
 ||  ||restart marker: 3||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||  ||marker=d4 avail_size_in_buf=284||
 ||  ||restart marker: 4||
 ||  ||marker parser used 0 bytes (0 bits)||
 ||=** marker=d9 avail_size_in_buf=2 =||=** marker=d9 avail_size_in_buf=2
 =||
 ||decode frame unused 2 bytes||decode frame unused 2 bytes||

 I would like to explore how an exact build of the Android version would
 behave in Windows

 ijkplayer    : b0.4.0-48-g3642e87f
 FFmpeg       : ff3.3--bw0.8.0--20180323--001-1-geb1575fefe
 libavutil    : 55.58.100
 libavcodec   : 57.89.100
 libavformat  : 57.71.100
 libswscale   : 4.6.100
 libswresample: 2.7.100

 || --enable asm  ||
 || --disable audiotoolbox  ||
 ||** --enable avcodec  ||
 || --disable avdevice  ||
 || --enable avfilter  ||
 || --enable avformat  ||
 || --disable avresample  ||
 || --enable avutil  ||
 || --disable bsfs  ||
 || --enable cross-compile  ||
 || --disable d3d11va  ||
 || --disable debug  ||
 ||** --disable decoders  ||
 || --enable decoder=aac  ||
 || --enable decoder=aac_latm  ||
 || --enable decoder=h264  ||
 || --enable decoder=mjpeg  ||
 || --enable decoder=mpeg4  ||
 || --enable decoder=pcm_s16be  ||
 || --enable decoder=pcm_s16le  ||
 ||** --disable demuxers  ||
 || --enable demuxer=aac  ||
 || --enable demuxer=avi  ||
 || --enable demuxer=h264  ||
 || --enable demuxer=mjpeg  ||
 || --enable demuxer=mov  ||
 || --enable demuxer=pcm_s16be  ||
 || --enable demuxer=pcm_s16le  ||
 || --enable demuxer=rtsp  ||
 || --disable devices  ||
 || --disable doc  ||
 || --disable dxva2  ||
 ||** --disable encoders  ||
 || --enable encoder=aac  ||
 || --enable encoder=libx264  ||
 || --enable encoder=mjpeg  ||
 || --enable encoder=mpeg4  ||
 || --enable encoder=png  ||
 || --disable ffmpeg  ||
 || --disable ffplay  ||
 || --disable ffprobe  ||
 || --disable ffserver  ||
 ||** --disable filters  ||
 || --enable filter=anullsink  ||
 || --enable filter=anullsrc  ||
 || --enable filter=aresample  ||
 || --enable filter=hflip  ||
 || --enable filter=nullsink  ||
 || --enable filter=nullsrc  ||
 || --enable filter=rotate  ||
 || --enable filter=transpose  ||
 || --enable filter=vflip  ||
 || --disable gpl  ||
 || --enable gpl  ||
 || --disable gray  ||
 || --disable htmlpages  ||
 || --disable iconv  ||
 || --enable inline-asm  ||
 || --enable libx264  ||
 || --disable manpages  ||
 ||** --disable muxers  ||
 || --enable muxer=avi  ||
 || --enable muxer=h264  ||
 || --enable muxer=image2  ||
 || --enable muxer=mjpeg  ||
 || --enable muxer=mov  ||
 || --enable muxer=mp4  ||
 || --enable network  ||
 || --disable nonfree  ||
 || --enable optimizations  ||
 ||** --disable parsers  ||
 || --enable parser=aac  ||
 || --enable parser=aac_latm  ||
 || --enable parser=h264  ||
 || --enable parser=mjpeg  ||
 || --enable parser=mpeg4video  ||
 || --enable pic  ||
 || --disable podpages  ||
 || --disable postproc  ||
 || --disable programs  ||
 ||** --disable protocols  ||
 || --enable protocol=async  ||
 || --enable protocol=file  ||
 || --enable protocol=rtp  ||
 || --enable protocol=tcp  ||
 || --enable protocol=udp  ||
 || --enable runtime-cpudetect  ||
 || --enable small  ||
 || --enable swresample  ||
 || --enable swscale  ||
 || --disable swscale-alpha  ||
 || --disable txtpages  ||
 || --disable vaapi  ||
 || --disable vda  ||
 || --disable vdpau  ||
 || --disable videotoolbox  ||
 || --enable yasm  ||

 Unfortunately, I am not able to generate a build in Windows with this
 parameters.
 Could any of the experts in this group be so kind to point me to how to
 get such a binary for Windows, so I could try to find out where the
 problem arises (I am suspecting of the --enable avcodec)

 Best regards. Good luck out there.

--
Ticket URL: <https://trac.ffmpeg.org/ticket/8211#comment:13>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list