On 10/15/2013 02:21 PM, Rafa Lopez wrote:
./ffmpeg -i "rtsp://192.168.0.95:554/profile1 <http://192.168.0.95:554/profile1>" -y %6d.jpg -log-level debug

The problem is that I always get corrupt images (example attached). I think the problem is

[h264 @ 0x1c28d60] RTP: missed 146 packets
[AVIOContext @ 0x7f3190016d20] Statistics: 0 seeks, 3 writeouts
[h264 @ 0x1f82300] concealing 2237 DC, 2237 AC, 2237 MV errors in I frame
[h264 @ 0x1fc7160] Frame num gap 8 6

RTP missed packets. I attach the full log. Anyone can help me?

No way to properly solve with ffmpeg configuration at this point, although adding "-rtsp_transport tcp" before "-y" will reduce the pain for you.


Unfortunately, the udp layer will set it's SO_RCVBUF kernel buffer to at most 64K, (which e.g. Linux will translate to a 128K buffer). That practically guarantees that any single frame larger than 128K (e.g., an average I-frame in an 1280x720 stream) will not fit within the kernel socket buffers, resulting in at least one packet (and part of the frame) dropped, thus the corruption you see.


I do not know of a way to ask FFMPEG to properly increase the UDP kernel buffer size. I had patched my own ffmpeg to set SO_RCVBUF to 1024K, and it worked for me. But then I switched to TCP and stopped worrying (Using TCP instead DOES introduce latency and waste bandwidth, because packets are getting lost and retransmitted, but I don't care about another 10ms or 10% higher bandwidth as I'm on a local network).

The udp layer does have a "buffer_size" parameter, but there's no way that I'm aware of to pass it to the udp layer through the rtsp layer.
_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to