ffmpeg выдает «501 не реализовано» при записи потока RTSP - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть камера 4K (Sony SNC-VB770), передающая RTSP.

Я пытаюсь записать поток в файлы (каждый имеет удобную длину, скажем, 1 час), используя простой скрипт для многократного запускаffmpeg (версия 4.1):

while : ; do
  # (set $url and $outfile, and then)
  ffmpeg -rtsp_transport tcp -t 3600 -y -i $url -c copy -map 0:0 -b:v 16000k $outfile
done

Если я запускаю скрипт на локальном ПК, напрямую подключенном к камере, он работает (по крайней мере, дольше недели).Однако если я сделаю то же самое на сервере, расположенном в центре обработки данных, произойдет сбой случайно, без сообщения об ошибке.Иногда он работает в течение нескольких дней, иногда он умирает за одну минуту.

Типичный вывод выглядит следующим образом:

# devname: snc-vb770
# url: rtsp://10.40.35.90/media/video1
# vb: 16000k
# datefmt %d%H
# addtimestamp 0
no timestamp
ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-18)
  configuration: --prefix=/usr/local/ffmpeg-4.1 --enable-openssl --enable-gpl --enable-version3 --enable-nonfree --enable-shared --enable-libx264 --enable-libvorbis --enable-filter=drawtext --enable-libfreetype --enable-libfribidi --enable-fontconfig
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
Input #0, rtsp, from 'rtsp://10.40.35.90/media/video1':
  Metadata:
    title           : Sony RTSP Server
  Duration: N/A, start: 0.066667, bitrate: N/A
    Stream #0:0: Video: h264 (High), yuv420p(tv, bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], 14.99 fps, 14.99 tbr, 90k tbn, 29.97 tbc
Output #0, mp4, to './2811.mp4':
  Metadata:
    title           : Sony RTSP Server
    encoder         : Lavf58.20.100
    Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], q=2-31, 16000 kb/s, 14.99 fps, 14.99 tbr, 90k tbn, 90k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0x24e4ec0] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly
[mp4 @ 0x24e4ec0] pts has no value
[mp4 @ 0x24e4ec0] Non-monotonous DTS in output stream 0:0; previous: 0, current: 0; changing to 1. This may result in incorrect timestamps in the output file.
frame=   33 fps=0.0 q=-1.0 size=    1792kB time=00:00:02.00 bitrate=7332.9kbits/s speed=3.57x
...
frame=  104 fps=8.4 q=-1.0 Lsize=    6532kB time=00:00:06.74 bitrate=7939.6kbits/s speed=0.548x
video:6531kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.023506%

Я посмотрел пакет RTSP и обнаружил "RTSP /1.0 501 Не реализовано "отправлено из ffmpeg на камеру.После этого камера в конце концов отправила обратно «RTSP / 1.0 505 RTSP Version не поддерживается», а затем ffmpeg вскоре завершил работу.

Кажется, что пакет «501» сгенерирован libavformat / rtsp.c: ff_rtsp_read_reply (), когдаffmpeg получает искаженный пакет RTSP с методом = (null), status_code = 0.Я не знаю, почему такие пакеты поступают в случайное время и кто не прав (может быть, камера, может быть, любой из сетевых коммутаторов или маршрутизаторов в середине сетевого пути от камеры до сервера).Но в любом случае, я не хочу, чтобы запись была остановлена ​​из-за этих искаженных пакетов.

Есть ли обходной путь, чтобы ffmpeg игнорировал недопустимые пакеты RTSP и просто продолжал запись?

Дополнительная информация:

  • Я проверил запись с ffmpeg ver4.1 и 2.8.4, и различий не наблюдалось.

  • Различий не наблюдалось применьшее разрешение или меньший битрейт.

  • У меня 3 камеры разных производителей в одной сетевой среде.Все трое работают без проблем более месяца.Только Sony SNC-VB770 демонстрирует странное поведение.

...