Я использую avconv
на Raspberry Pi, чтобы попытаться получить неподвижное изображение с IP-камеры с потоком RTSP видео H.264:
$ avconv -v verbose -i $url -fflags discardcorrupt -t 00:00:01 -r 0.1 -an -vsync 1 -qscale 1 -f image2 images%09d.jpg
У меня возникли некоторые проблемы, предположительно потому, что процессор на Pi не может поспевать за декодированием видео, поэтому иногда результирующий JPEG-файл искажается, например:
Вероятно, в 80% случаев я могу получить действительное изображение с помощью приведенной выше команды, но в 20% случаев я получаю вышеупомянутое изображение, которое вбивает ключ в мои планы по компиляции промежутка времени из прямой трансляции видео. Я добавил -fflags discardcorrupt
думая, что это поможет, но, похоже, это мало что дало. Я хочу получить только одно изображение, поэтому определена длительность 1 секунда, а -r
- менее 1 кадра в секунду.
Что я могу сделать, чтобы avconv
только когда-либо выводил правильные кадры видеокадров?
Вывод из вызова avconv
который привел к повреждению кадров видео:
avconv version 0.8.4-6:0.8.4-1+rpi1, Copyright (c) 2000-2012 the Libav developers
built on Nov 5 2012 22:22:18 with gcc 4.6.3
configuration: --arch=arm --enable-pthreads --enable-runtime-cpudetect --extra-version='6:0.8.4-1+rpi1' --libdir=/usr/lib/arm-linux-gnueabihf --prefix=/usr --disable-yasm --enable-bzlib --enable-libdc1394 --enable-libdirac --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-swscale --enable-libcdio --enable-x11grab --enable-libx264 --enable-libxvid --shlibdir=/usr/lib/arm-linux-gnueabihf --enable-shared --disable-static
libavutil 51. 22. 1 / 51. 22. 1
libavcodec 53. 35. 0 / 53. 35. 0
libavformat 53. 21. 0 / 53. 21. 0
libavdevice 53. 2. 0 / 53. 2. 0
libavfilter 2. 15. 0 / 2. 15. 0
libswscale 2. 1. 0 / 2. 1. 0
libpostproc 52. 0. 0 / 52. 0. 0
[rtsp @ 0x930680] SDP:
v=0
o=- 1357489248942653 1 IN IP4 192.0.1.123
s=LIVE555 Streaming Media v
i=LIVE555 Streaming Media v
t=0 0
a=tool:LIVE555 Streaming Media v2010.04.09
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:LIVE555 Streaming Media v
a=x-qt-text-inf:LIVE555 Streaming Media v
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:1000
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=64001F;sprop-parameter-sets=J2QAH62IDkOYIOEMKQpEByHMEHCGFIUiA5DmCDhDCkKQwEIYwhxmMhCGAhDGEOMxkIQwEIYwhxmMhCICEZjOI8KfEfiP4j8R8R4ziMREQoEIjEcR4j5PxH8n5PiPEcRkiLQHgLdgKpAAAAMAEAAAAwPGBAAExLAAExLL3vheEQjU,KO48sA==
a=control:track1
m=audio 0 RTP/AVP 97
c=IN IP4 0.0.0.0
b=AS:64
a=rtpmap:97 MPEG4-GENERIC/8000
a=fmtp:97 streamtype=5;profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1588
a=control:track2
[h264 @ 0x9345a0] Missing reference picture
[h264 @ 0x9345a0] decode_slice_header error
[h264 @ 0x9345a0] concealing 2700 DC, 2700 AC, 2700 MV errors
[h264 @ 0x9345a0] concealing 2454 DC, 2454 AC, 2454 MV errors
[rtsp @ 0x930680] Estimating duration from bitrate, this may be inaccurate
Input #0, rtsp, from 'rtsp://192.0.1.123:554':
Metadata:
title : LIVE555 Streaming Media v
comment : LIVE555 Streaming Media v
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0.0: Video: h264 (High), yuvj420p, 960x720 [PAR 1:1 DAR 4:3], 30 fps, 30 tbr, 90k tbn, 60 tbc
Stream #0.1: Audio: aac, 8000 Hz, mono, s16
[buffer @ 0x9fa5c0] w:960 h:720 pixfmt:yuvj420p
Output #0, image2, to 'images%09d.jpg':
Metadata:
title : LIVE555 Streaming Media v
comment : LIVE555 Streaming Media v
encoder : Lavf53.21.0
Stream #0.0: Video: mjpeg, yuvj420p, 960x720 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 90k tbn, 0.10 tbc
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> mjpeg)
Press ctrl-c to stop encoding
[h264 @ 0x9345a0] Missing reference picture
[h264 @ 0x9345a0] decode_slice_header error
[h264 @ 0x9345a0] concealing 2700 DC, 2700 AC, 2700 MV errors
*** drop! 1 fps= 0 q=1.0 size= -0kB time=10.00 bitrate= -0.0kbits/s
*** drop! 2 fps= 1 q=1.0 size= -0kB time=20.00 bitrate= -0.0kbits/s dup=0 drop=1
Last message repeated 1 times
[h264 @ 0x9345a0] concealing 2454 DC, 2454 AC, 2454 MV errors
*** drop!
error while decoding MB 15 2, bytestream (-17)=20.00 bitrate= -0.0kbits/s dup=0 drop=4
[h264 @ 0x9345a0] concealing 2614 DC, 2614 AC, 2614 MV errors
*** drop!
error while decoding MB 23 29, bytestream (-9)=20.00 bitrate= -0.0kbits/s dup=0 drop=5
[h264 @ 0x9345a0] concealing 986 DC, 986 AC, 986 MV errors
*** drop!
error while decoding MB 5 35, bytestream (-13)=20.00 bitrate= -0.0kbits/s dup=0 drop=6
[h264 @ 0x9345a0] concealing 644 DC, 644 AC, 644 MV errors
*** drop!
error while decoding MB 39 15, bytestream (-37)20.00 bitrate= -0.0kbits/s dup=0 drop=7
[h264 @ 0x9345a0] concealing 1810 DC, 1810 AC, 1810 MV errors
frame= 2 fps= 0 q=1.0 Lsize= -0kB time=20.00 bitrate= -0.0kbits/s dup=0 drop=7
video:75kB audio:0kB global headers:0kB muxing overhead -100.028494%