Хочу выдернуть 1 кадр(png) из rtmp потока с помощью ffmpeg. Работает нормально, но на некоторых стримах есть большая задержка около 5-8 сек., а хотелось бы ее исключить и сократить до обычных 2 сек. Заметил, что задержка после avformat_find_stream_info(), после идет много вывода «type:18, size:362, dts:0 pos:60» и как раз на это 90% времени уходит и заканчивается после «All info found». Что за инфу ищет? Я подозреваю, что key frames или ещё что-то в формате mp4, типа синхронизации. Как можно снизить эту задержку?
Запускаю так
ffmpeg -y -loglevel trace -i "rtmp://127.0.0.1/live/test" -an -f image2 -vframes 1 t.png
Вывод
Probing flv score:100 size:2048
Probing mp3 score:1 size:2048
Probing mpegts score:-1094995529 size:2048
Probing msnwctcp score:-1 size:2048
[flv @ 0x3fb13a0] Format flv probed with size=2048 and score=100
[flv @ 0x3fb13a0] Before avformat_find_stream_info() pos: 13 bytes read:25166 seeks:0
[flv @ 0x3fb13a0] type:18, size:24, dts:0 pos:21
[flv @ 0x3fb13a0] Unknown type |RtmpSampleAccess
[flv @ 0x3fb13a0] type:18, size:362, dts:0 pos:60
[flv @ 0x3fb13a0] type:9, size:45, dts:0 pos:437
[flv @ 0x3fb13a0] 0 17 0
[flv @ 0x3fb13a0] type:9, size:24662, dts:0 pos:497
[flv @ 0x3fb13a0] 0 17 0
[flv @ 0x3fb13a0] type:8, size:18, dts:0 pos:25174
[flv @ 0x3fb13a0] 1 AF 0
[flv @ 0x3fb13a0] type:8, size:280, dts:0 pos:25207
[flv @ 0x3fb13a0] 1 AF 0
[flv @ 0x3fb13a0] type:8, size:281, dts:23 pos:25502
[flv @ 0x3fb13a0] 1 AF 0
[flv @ 0x3fb13a0] type:8, size:280, dts:46 pos:25798
[flv @ 0x3fb13a0] 1 AF 0
[flv @ 0x3fb13a0] type:8, size:281, dts:70 pos:26093
[flv @ 0x3fb13a0] 1 AF 0
[flv @ 0x3fb13a0] type:8, size:281, dts:93 pos:26389
[flv @ 0x3fb13a0] 1 AF 0
[flv @ 0x3fb13a0] type:8, size:280, dts:116 pos:26685
[flv @ 0x3fb13a0] 1 AF 0
[flv @ 0x3fb13a0] type:8, size:281, dts:139 pos:26980
[flv @ 0x3fb13a0] 1 AF 0
[flv @ 0x3fb13a0] type:8, size:281, dts:163 pos:27276
[flv @ 0x3fb13a0] 1 AF 0
[flv @ 0x3fb13a0] type:9, size:43, dts:6667 pos:140848
...тут много ещё подобного вывода...
[flv @ 0x3fb13a0] 0 27 0
[flv @ 0x3fb13a0] All info found
[flv @ 0x3fb13a0] rfps: 6.000000 0.000003
[flv @ 0x3fb13a0] rfps: 12.000000 0.000011
[flv @ 0x3fb13a0] rfps: 18.000000 0.000024
[flv @ 0x3fb13a0] rfps: 24.000000 0.000043
[flv @ 0x3fb13a0] rfps: 30.000000 0.000067
[flv @ 0x3fb13a0] rfps: 48.000000 0.000173
[flv @ 0x3fb13a0] rfps: 60.000000 0.000270
[flv @ 0x3fb13a0] rfps: 120.000000 0.001079
[flv @ 0x3fb13a0] rfps: 240.000000 0.004316
[flv @ 0x3fb13a0] rfps: 23.976024 0.002160
[flv @ 0x3fb13a0] rfps: 29.970030 0.003376
[flv @ 0x3fb13a0] rfps: 59.940060 0.013503
[flv @ 0x3fb13a0] rfps: 11.988012 0.000540
[flv @ 0x3fb13a0] rfps: 47.952048 0.008642
[flv @ 0x3fb13a0] 0: start_time: 0.000 duration: -9223372036854.775
[flv @ 0x3fb13a0] 1: start_time: 0.000 duration: -9223372036854.775
[flv @ 0x3fb13a0] stream: start_time: 0.000 duration: 0.000 bitrate=0 kb/s
[flv @ 0x3fb13a0] After avformat_find_stream_info() pos: 140898 bytes read:140898 seeks:0 frames:329
Влияет на задержку опция -analyzeduration, по умолчанию макс. 5000000=5 сек. Если установить меньше 3 сек., то пишет
Could not find codec parameters for stream 0 (Video: none, 1 reference frame, none, 43 kb/s): unknown codec
Consider increasing the value for the 'analyzeduration' and 'probesize' options