Opened 4 years ago
Last modified 11 months ago
#8211 open enhancement
ffplay doesn't play mjpeg stream
Reported by: | Anh | Owned by: | |
---|---|---|---|
Priority: | wish | Component: | avformat |
Version: | git-master | Keywords: | rtsp mjpeg |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | yes |
Description
I have the "Happy Cow I-Spy" toy with the wi-fi camera that casts live video encoded with mjpeg. I try to connect the toy expecting to seen the video stream: ffplay rtsp://192.168.1.1:7070, but seen green screen only with small strip of image at the top. Sorry for screenshots, I have'nt the plain text output, except an error msg:
mjpeg_decode_dc: bad vlc: 0:0
error dc
error y=1 x=0
Attachments (7)
Change History (33)
by , 4 years ago
by , 4 years ago
by , 4 years ago
by , 4 years ago
comment:1 by , 4 years ago
Component: | ffplay → undetermined |
---|---|
Version: | 4.2 → unspecified |
comment:2 by , 4 years ago
C:\Users\иван\Луноход1>ffmpeg -loglevel debug -i rtsp://192.168.1.1:7070/webcam output.avi ffmpeg version N-95129-g04858650b1 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 9.2.1 (GCC) 20190918 configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf libavutil 56. 35.100 / 56. 35.100 libavcodec 58. 59.101 / 58. 59.101 libavformat 58. 33.100 / 58. 33.100 libavdevice 58. 9.100 / 58. 9.100 libavfilter 7. 59.100 / 7. 59.100 libswscale 5. 6.100 / 5. 6.100 libswresample 3. 6.100 / 3. 6.100 libpostproc 55. 6.100 / 55. 6.100 Splitting the commandline. Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument 'debug'. Reading option '-i' ... matched as input url with argument 'rtsp://192.168.1.1:7070/webcam'. Reading option 'output.avi' ... matched as output url. Finished splitting the commandline. Parsing a group of options: global . Applying option loglevel (set logging level) with argument debug. Successfully parsed a group of options. Parsing a group of options: input url rtsp://192.168.1.1:7070/webcam. Successfully parsed a group of options. Opening an input file: rtsp://192.168.1.1:7070/webcam. [tcp @ 000002900432be40] No default whitelist set [tcp @ 000002900432be40] Original list of addresses: [tcp @ 000002900432be40] Address 192.168.1.1 port 7070 [tcp @ 000002900432be40] Interleaved list of addresses: [tcp @ 000002900432be40] Address 192.168.1.1 port 7070 [tcp @ 000002900432be40] Starting connection attempt to 192.168.1.1 port 7070 [tcp @ 000002900432be40] Successfully connected to 192.168.1.1 port 7070 [rtsp @ 0000029004329540] SDP: v=0 o=- 1 1 IN IP4 127.0.0.1 s=Test a=type:broadcast t=0 0 c=IN IP4 0.0.0.0 m=video 0 RTP/AVP 26 a=control:track0 [rtp @ 00000290043317c0] No default whitelist set [udp @ 0000029004332ac0] No default whitelist set [udp @ 0000029004332ac0] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required) [udp @ 0000029004332ac0] end receive buffer size reported is 65536 [udp @ 0000029004342d80] No default whitelist set [udp @ 0000029004342d80] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required) [udp @ 0000029004342d80] end receive buffer size reported is 65536 [rtsp @ 0000029004329540] setting jitter buffer size to 500 [rtsp @ 0000029004329540] hello state=0 [mjpeg @ 000002900432d280] marker=d8 avail_size_in_buf=25200 [mjpeg @ 000002900432d280] marker parser used 0 bytes (0 bits) [mjpeg @ 000002900432d280] marker=e0 avail_size_in_buf=25198 [mjpeg @ 000002900432d280] marker parser used 16 bytes (128 bits) [mjpeg @ 000002900432d280] marker=dd avail_size_in_buf=25180 [mjpeg @ 000002900432d280] marker parser used 0 bytes (0 bits) [mjpeg @ 000002900432d280] marker=db avail_size_in_buf=25174 [mjpeg @ 000002900432d280] index=0 [mjpeg @ 000002900432d280] qscale[0]: 11 [mjpeg @ 000002900432d280] index=1 [mjpeg @ 000002900432d280] qscale[1]: 21 [mjpeg @ 000002900432d280] marker parser used 132 bytes (1056 bits) [mjpeg @ 000002900432d280] marker=c4 avail_size_in_buf=25040 [mjpeg @ 000002900432d280] marker parser used 0 bytes (0 bits) [mjpeg @ 000002900432d280] marker=c0 avail_size_in_buf=24620 [mjpeg @ 000002900432d280] Changing bps from 0 to 8 [mjpeg @ 000002900432d280] sof0: picture: 640x480 [mjpeg @ 000002900432d280] component 0 2:2 id: 0 quant:0 [mjpeg @ 000002900432d280] component 1 1:1 id: 1 quant:1 [mjpeg @ 000002900432d280] component 2 1:1 id: 2 quant:1 [mjpeg @ 000002900432d280] pix fmt id 22111100 [mjpeg @ 000002900432d280] Format yuvj420p chosen by get_format(). [mjpeg @ 000002900432d280] marker parser used 17 bytes (136 bits) [mjpeg @ 000002900432d280] escaping removed 39 bytes [mjpeg @ 000002900432d280] marker=da avail_size_in_buf=24601 [mjpeg @ 000002900432d280] marker parser used 24562 bytes (196496 bits) [mjpeg @ 000002900432d280] marker=d9 avail_size_in_buf=2 [mjpeg @ 000002900432d280] decode frame unused 2 bytes [rtsp @ 0000029004329540] max delay reached. need to consume packet [rtsp @ 0000029004329540] RTP: missed 11 packets [rtsp @ 0000029004329540] RTP timestamps don't match. [rtsp @ 0000029004329540] Received packet without a start chunk; dropping frame. Last message repeated 12 times [rtsp @ 0000029004329540] All info found Input #0, rtsp, from 'rtsp://192.168.1.1:7070/webcam': Metadata: title : Test Duration: N/A, start: 0.000000, bitrate: N/A Stream #0:0, 21, 1/90000: Video: mjpeg (Baseline), 1 reference frame, yuvj420p(pc, bt470bg/unknown/unknown, center), 640x480 [SAR 1:1 DAR 4:3], 0/1, 20 tbr, 90k tbn, 90k tbc Successfully opened the file. Parsing a group of options: output url output.avi. Successfully parsed a group of options. Opening an output file: output.avi. [file @ 00000290043909c0] Setting default whitelist 'file,crypto' Successfully opened the file. Stream mapping: Stream #0:0 -> #0:0 (mjpeg (native) -> mpeg4 (native)) Press [q] to stop, [?] for help cur_dts is invalid st:0 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [mjpeg @ 0000029004355d00] marker=d8 avail_size_in_buf=25200 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=e0 avail_size_in_buf=25198 [mjpeg @ 0000029004355d00] marker parser used 16 bytes (128 bits) [mjpeg @ 0000029004355d00] marker=dd avail_size_in_buf=25180 [mjpeg @ 0000029004355d00] restart interval: 944 [mjpeg @ 0000029004355d00] marker parser used 4 bytes (32 bits) [mjpeg @ 0000029004355d00] marker=db avail_size_in_buf=25174 [mjpeg @ 0000029004355d00] index=0 [mjpeg @ 0000029004355d00] qscale[0]: 11 [mjpeg @ 0000029004355d00] index=1 [mjpeg @ 0000029004355d00] qscale[1]: 21 [mjpeg @ 0000029004355d00] marker parser used 132 bytes (1056 bits) [mjpeg @ 0000029004355d00] marker=c4 avail_size_in_buf=25040 [mjpeg @ 0000029004355d00] class=0 index=0 nb_codes=12 [mjpeg @ 0000029004355d00] class=0 index=1 nb_codes=12 [mjpeg @ 0000029004355d00] class=1 index=0 nb_codes=251 [mjpeg @ 0000029004355d00] class=1 index=1 nb_codes=251 [mjpeg @ 0000029004355d00] marker parser used 418 bytes (3344 bits) [mjpeg @ 0000029004355d00] marker=c0 avail_size_in_buf=24620 [mjpeg @ 0000029004355d00] sof0: picture: 640x480 [mjpeg @ 0000029004355d00] component 0 2:2 id: 0 quant:0 [mjpeg @ 0000029004355d00] component 1 1:1 id: 1 quant:1 [mjpeg @ 0000029004355d00] component 2 1:1 id: 2 quant:1 [mjpeg @ 0000029004355d00] pix fmt id 22111100 [mjpeg @ 0000029004355d00] Format yuvj420p chosen by get_format(). [mjpeg @ 0000029004355d00] marker parser used 17 bytes (136 bits) [mjpeg @ 0000029004355d00] escaping removed 39 bytes [mjpeg @ 0000029004355d00] marker=da avail_size_in_buf=24601 [mjpeg @ 0000029004355d00] component: 0 [mjpeg @ 0000029004355d00] component: 1 [mjpeg @ 0000029004355d00] component: 2 [mjpeg @ 0000029004355d00] mjpeg_decode_dc: bad vlc: 0:0 (00000290043eb048) [mjpeg @ 0000029004355d00] error dc [mjpeg @ 0000029004355d00] error y=1 x=0 [mjpeg @ 0000029004355d00] marker parser used 953 bytes (7620 bits) [mjpeg @ 0000029004355d00] marker=d0 avail_size_in_buf=23643 [mjpeg @ 0000029004355d00] restart marker: 0 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d1 avail_size_in_buf=22576 [mjpeg @ 0000029004355d00] restart marker: 1 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d2 avail_size_in_buf=21514 [mjpeg @ 0000029004355d00] restart marker: 2 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d3 avail_size_in_buf=20387 [mjpeg @ 0000029004355d00] restart marker: 3 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d4 avail_size_in_buf=19231 [mjpeg @ 0000029004355d00] restart marker: 4 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d5 avail_size_in_buf=18058 [mjpeg @ 0000029004355d00] restart marker: 5 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d6 avail_size_in_buf=16804 [mjpeg @ 0000029004355d00] restart marker: 6 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d7 avail_size_in_buf=15667 [mjpeg @ 0000029004355d00] restart marker: 7 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d0 avail_size_in_buf=14624 [mjpeg @ 0000029004355d00] restart marker: 0 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d1 avail_size_in_buf=13713 [mjpeg @ 0000029004355d00] restart marker: 1 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d2 avail_size_in_buf=12874 [mjpeg @ 0000029004355d00] restart marker: 2 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d3 avail_size_in_buf=12117 [mjpeg @ 0000029004355d00] restart marker: 3 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d4 avail_size_in_buf=11426 [mjpeg @ 0000029004355d00] restart marker: 4 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d5 avail_size_in_buf=10771 [mjpeg @ 0000029004355d00] restart marker: 5 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d6 avail_size_in_buf=10128 [mjpeg @ 0000029004355d00] restart marker: 6 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d7 avail_size_in_buf=9486 [mjpeg @ 0000029004355d00] restart marker: 7 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d0 avail_size_in_buf=8791 [mjpeg @ 0000029004355d00] restart marker: 0 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d1 avail_size_in_buf=8067 [mjpeg @ 0000029004355d00] restart marker: 1 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d2 avail_size_in_buf=7309 [mjpeg @ 0000029004355d00] restart marker: 2 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d3 avail_size_in_buf=6531 [mjpeg @ 0000029004355d00] restart marker: 3 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d4 avail_size_in_buf=5741 [mjpeg @ 0000029004355d00] restart marker: 4 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d5 avail_size_in_buf=4988 [mjpeg @ 0000029004355d00] restart marker: 5 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d6 avail_size_in_buf=4203 [mjpeg @ 0000029004355d00] restart marker: 6 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d7 avail_size_in_buf=3470 [mjpeg @ 0000029004355d00] restart marker: 7 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d0 avail_size_in_buf=2621 [mjpeg @ 0000029004355d00] restart marker: 0 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d1 avail_size_in_buf=1979 [mjpeg @ 0000029004355d00] restart marker: 1 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d2 avail_size_in_buf=1363 [mjpeg @ 0000029004355d00] restart marker: 2 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d3 avail_size_in_buf=836 [mjpeg @ 0000029004355d00] restart marker: 3 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d4 avail_size_in_buf=358 [mjpeg @ 0000029004355d00] restart marker: 4 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=d9 avail_size_in_buf=2 [mjpeg @ 0000029004355d00] decode frame unused 2 bytes detected 2 logical cores [graph 0 input from stream 0:0 @ 00000290049fd5c0] Setting 'video_size' to value '640x480' [graph 0 input from stream 0:0 @ 00000290049fd5c0] Setting 'pix_fmt' to value '12' [graph 0 input from stream 0:0 @ 00000290049fd5c0] Setting 'time_base' to value '1/90000' [graph 0 input from stream 0:0 @ 00000290049fd5c0] Setting 'pixel_aspect' to value '1/1' [graph 0 input from stream 0:0 @ 00000290049fd5c0] Setting 'sws_param' to value 'flags=2' [graph 0 input from stream 0:0 @ 00000290049fd5c0] Setting 'frame_rate' to value '20/1' [graph 0 input from stream 0:0 @ 00000290049fd5c0] w:640 h:480 pixfmt:yuvj420p tb:1/90000 fr:20/1 sar:1/1 sws_param:flags=2 [format @ 00000290049d9380] Setting 'pix_fmts' to value 'yuv420p' [auto_scaler_0 @ 00000290049d97c0] Setting 'flags' to value 'bicubic' [auto_scaler_0 @ 00000290049d97c0] w:iw h:ih flags:'bicubic' interl:0 [format @ 00000290049d9380] auto-inserting filter 'auto_scaler_0' between the filter 'Parsed_null_0' and the filter 'format' [AVFilterGraph @ 00000290049fb940] query_formats: 4 queried, 2 merged, 1 already done, 0 delayed [swscaler @ 000002900488f0c0] deprecated pixel format used, make sure you did set range correctly [auto_scaler_0 @ 00000290049d97c0] w:640 h:480 fmt:yuvj420p sar:1/1 -> w:640 h:480 fmt:yuv420p sar:1/1 flags:0x4 [mpeg4 @ 0000029004353cc0] intra_quant_bias = 0 inter_quant_bias = -64 [avi @ 00000290043ec000] reserve_index_space:0 master_index_max_size:256 [avi @ 00000290043ec000] duration_est:36000.000, filesize_est:0.9GiB, master_index_max_size:256 Output #0, avi, to 'output.avi': Metadata: INAM : Test ISFT : Lavf58.33.100 Stream #0:0, 0, 1/20: Video: mpeg4, 1 reference frame (FMP4 / 0x34504D46), yuv420p(center), 640x480 [SAR 1:1 DAR 4:3], 0/1, q=2-31, 200 kb/s, 20 fps, 20 tbn, 20 tbc Metadata: encoder : Lavc58.59.101 mpeg4 Side data: cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A Clipping frame in rate conversion by 0.000008 [mjpeg @ 0000029004355d00] marker=d8 avail_size_in_buf=25244 [mjpeg @ 0000029004355d00] marker parser used 0 bytes (0 bits) [mjpeg @ 0000029004355d00] marker=e0 avail_size_in_buf=25242 [mjpeg @ 0000029004355d00] marker parser used 16 bytes (128 bits) [mjpeg @ 0000029004355d00] marker=dd avail_size_in_buf=25224 [mjpeg @ 0000029004355d00] restart interval: 939 [mjpeg @ 0000029004355d00] marker parser used 4 bytes (32 bits) [mjpeg @ 0000029004355d00] marker=db avail_size_in_buf=25218 [mjpeg @ 0000029004355d00] index=0 [mjpeg @ 0000029004355d00] qscale[0]: 11 [mjpeg @ 0000029004355d00] index=1 [mjpeg @ 0000029004355d00] qscale[1]: 21 [mjpeg @ 0000029004355d00] marker parser used 132 bytes (1056 bits) [mjpeg @ 0000029004355d00] marker=c4 avail_size_in_buf=25084 [mjpeg @ 0000029004355d00] class=0 index=0 nb_codes=12 [mjpeg @ 0000029004355d00] class=0 index=1 nb_codes=12 [mjpeg @ 0000029004355d00] class=1 index=0 nb_codes=251 [mjpeg @ 0000029004355d00] class=1 index=1 nb_codes=251 [mjpeg @ 0000029004355d00] marker parser used 418 bytes (3344 bits) [mjpeg @ 0000029004355d00] marker=c0 avail_size_in_buf=24664 [mjpeg @ 0000029004355d00] sof0: picture: 640x480 [mjpeg @ 0000029004355d00] component 0 2:2 id: 0 quant:0 [mjpeg @ 0000029004355d00] component 1 1:1 id: 1 quant:1 [mjpeg @ 0000029004355d00] component 2 1:1 id: 2 quant:1 [mjpeg @ 0000029004355d00] pix fmt id 22111100 [mjpeg @ 0000029004355d00] marker parser used 17 bytes (136 bits) [mjpeg @ 0000029004355d00] escaping removed 52 bytes [mjpeg @ 0000029004355d00] marker=da avail_size_in_buf=24645 [mjpeg @ 0000029004355d00] component: 0 [mjpeg @ 0000029004355d00] component: 1 [mjpeg @ 0000029004355d00] component: 2 [mjpeg @ 0000029004355d00] mjpeg_decode_dc: bad vlc: 0:0 (00000290043eb048) [mjpeg @ 0000029004355d00] error dc [mjpeg @ 0000029004355d00] error y=1 x=0
comment:3 by , 4 years ago
Version: | unspecified → git-master |
---|
Please test if the following allows to save a sample stream that you can attach here:
$ ffmpeg -i rtsp://192.168.1.1:7070/webcam -vcodec copy -map 0:v:0 -f rawvideo -fs 2200K mjpegstream.dump
by , 4 years ago
Attachment: | mjpegstream.dump added |
---|
ffmpeg -i rtsp://192.168.1.1:7070/webcam -vcodec copy -map 0:v:0 -f rawvideo -fs 2200K mjpegstream.dump
comment:4 by , 4 years ago
Does the original rtsp stream work with vlc? With which other software does it work?
follow-up: 11 comment:5 by , 4 years ago
VLC is plays exactly like ffmpeg/ffplay, i.e. output a green screen with a small strip at the top. The original android soft works correctly (https://m.vk.com/away.php?to=https%3A%2F%2Fapkpure.com%2Fru%2Fi-spy-mini%2Fcom.leo.jg270.Controler.jgremoter)
comment:6 by , 4 years ago
I have a suspicion that the stream does not conform to the specification and has to be reverse engineered - but I am happy if somebody corrects me!
comment:7 by , 4 years ago
Component: | undetermined → avformat |
---|---|
Keywords: | rtsp mjpeg added |
Priority: | normal → wish |
Type: | defect → enhancement |
follow-up: 9 comment:8 by , 4 years ago
The application uses libavformat to receive the stream, it may make sense to ask them which options are needed / how they patched FFmpeg.
follow-up: 10 comment:9 by , 4 years ago
Replying to cehoyos:
it may make sense to ask them
I asked them, no answer yet.
Maybe this is encription of stream, because the original brand maker does protect itself against fake branding
comment:10 by , 2 years ago
Dear friends, the solution may be in the calculation of the buffer size [¿?]
That is the only difference in the whole process.
Comparing one by one the analysis sequence of IjkPlayer on Android (FFmpeg: ff3.3--bw0.8.0--20180323--001-1-geb1575fefe) and FFPLAY on Windows (version 4.3.2-2021-02-27-full_build-www.gyan.dev) they are EXACTLY the same except when arriving at the stage of decoding the JFIF markers (specially the DA marker [Start of Scan]):
IJKMEDIA [IjkPlayer]
marker=da avail_size_in_buf=37009
component: 0
component: 1
component: 2
marker parser used 36932 bytes (295454 bits)
ffplay -loglevel debug -i rtsp://192.168.1.1:7070/webcam
[mjpeg @ 05ff6740]
marker=da avail_size_in_buf=17132
component: 0
component: 1
component: 2
mjpeg_decode_dc: bad vlc: 0:0 (05b1e6a8)
error dc
error y=1 x=0
marker parser used 196 bytes (1568 bits)
As you can see the avail_size_in_buf reserved is consistently more or less half of the required
so the marker=da is just partially processed resulting in the final error
Apparently, this has nothing to do with the available memory as that other lines are more or less equal in both systems:
[udp @ 05af7080] end receive buffer size reported is 65536
[udp @ 05b0cdc0] No default whitelist set
[udp @ 05b0cdc0] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required)
[udp @ 05b0cdc0] end receive buffer size reported is 65536
[rtsp @ 05af50a0] setting jitter buffer size to 500
However, unfortunately I have not found out how to change that behaviour on the Windows implementation, and the error persists.
Any suggestions are welcome. Best regards.
comment:11 by , 2 years ago
Replying to anhsoft:
VLC plays exactly like ffmpeg/ffplay, i.e. is outputting a green screen with a small strip at the top.
No, it does not. There is gray screen and there is also a small strip on the bottom (but that is just because it thinks it is RGB, while ffmpeg thinks it is YCbCr). I am afraid that looks like the same encryption used in multicast IPTV in MGTS provider in Moscow. Nobody cracked it yet.
comment:12 by , 2 years ago
No, anhsoft is basically right.
More or less the same results are obtained using ffmpeg/ffplay, VLC, GStreamer, OpenCV and its derivatives in Windows and Linux [32 bits and 64 bits] (but not in Android)
The frames are just partially decoded (the main top strip and sometimes other partial strips [when movement happens] either at the middle or at the bottom part of the image.
This is a problem that seems it is plaguing the internet forums... as it happens with a broad range of devices [endoscope camera Ypc99, I-Spy mini tank, quite a few cheap drones, and some devices using v4l2rtspserver, etc]
The IjkPlayer does ok on android [where libijkffmpeg.so is just an specific ffmpeg build] but the other platforms fail to do the job.
However, as far as I have traced it, all the decoding parameters and steps seem exactly identical [Stream #0:0, 21, 1/90000: Video: mjpeg, 1 reference frame, yuvj420p(pc, bt470bg/unknown/unknown, center), 640x480 [SAR 1:1 DAR 4:3], 0/1, 20 fps, 20 tbr, 90k tbn, 90k tbc] except when it comes to the marker=da buffer size estimation.
The reason is unknown to me, but it does not seem to be related to any type of encryption, just some incompatibility with the calculation of buffer sizes (I guess)
Even forcing some other types of codecs as mjpeg_qsv and other parameters you get quite similar results.
comment:13 by , 2 years ago
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 |
Please test current FFmpeg git head, test
ffmpeg
instead offfplay
and please post the command line you tested together with the complete, uncut console output as text, do not attach screenshots.