Вопрос или проблема
Я испытываю трудности с настройкой FFMPEG для работы с китайской IP-камерой (марка: Victure, модель: PC730).
Мне удалось получить и декодировать RTSP-поток с этой камеры (URL вида rtsp://user:passw@IP:554/ – другие подпути не нужны).
Разные программы могут декодировать эти потоки, например, VLC и менеджер устройств ONVIF, но я хочу настроить транскодирование на моем Raspberry, используя FFMPEG, так как мне удавалось успешно настроить его для всех других камер.
Я также пытался принудительно использовать транспорт UDP или TCP без успеха.
Ниже приведены некоторые логи:
root@AlRaspiCG:~# ffmpeg -loglevel debug -i rtsp://admin:*****@192.168.199.83:554
ffmpeg version 3.2.14-1~deb9u1+rpt1 Copyright (c) 2000-2019 разработчики FFmpeg
собран с использованием gcc 6.3.0 (Raspbian 6.3.0-18+rpi1+deb9u1) 20170516
конфигурация: --prefix=/usr --extra-version='1~deb9u1+rpt1' --toolchain=hardened --libdir=/usr/lib/arm-linux-gnueabihf --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-omx-rpi --enable-mmal --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --arch=armhf --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
libavutil 55. 34.101 / 55. 34.101
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.101 / 57. 56.101
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libavresample 3. 1. 0 / 3. 1. 0
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
Разделение командной строки.
Чтение параметра '-loglevel' ... соответствует параметру 'loglevel' (установить уровень журналирования) с аргументом 'debug'.
Чтение параметра '-i' ... соответствует URL ввода с аргументом 'rtsp://admin:*****@192.168.199.83:554'.
Завершено разделение командной строки.
Парсинг группы параметров: global .
Применение параметра loglevel (установить уровень журналирования) с аргументом debug.
Успешно распарсена группа параметров.
Парсинг группы параметров: URL ввода rtsp://admin:*****@192.168.199.83:554.
Успешно распарсена группа параметров.
Открытие входного файла: rtsp://admin:*****@192.168.199.83:554.
[tcp @ 0x6733f0] Нет настроенного белого списка по умолчанию
[rtsp @ 0x6715b0] SDP:
v=0
o=- -1946251731 -1946251731 IN IP4 192.168.199.83
t=0 0
c=IN IP4 192.168.199.83
a=packetization-supported:Puwell
m=video 0 RTP/AVP 96
a=control:trackID=0
a=rtpmap:96 H264/90000
a=framerate:0S
a=fmtp:96 profile-level-id=640028; packetization-mode=1; sprop-parameter-sets=Z2QAKKw7UDwBE/LCAAADAAIAAAMAUQg=,aO484QBCQgCEhARMUhuTxXyfk/k/J8nm5MkkLCJCkJyeT6/J/X5PrycmpMA=
m=audio 0 RTP/AVP 8
a=control:trackID=1
a=rtpmap:8 PCMA/8000
[rtsp @ 0x6715b0] кодек видео установлен как: h264
[rtsp @ 0x6715b0] RTP Profile IDC: 64 Profile IOP: 0 Level: 28
[rtsp @ 0x6715b0] Режим пакетизации RTP: 1
[rtsp @ 0x6715b0] Extradata установлен на 0x671c00 (размер: 75)
[rtsp @ 0x6715b0] кодек аудио установлен как: pcm_alaw
[rtsp @ 0x6715b0] частота дискретизации аудио установлена на: 8000
[rtsp @ 0x6715b0] количество каналов аудио установлено на: 1
[rtp @ 0x6735a0] Нет настроенного белого списка по умолчанию
[udp @ 0x673510] Нет настроенного белого списка по умолчанию
[udp @ 0x673510] конечный размер буфера получения составляет 131072
[udp @ 0x685e70] Нет настроенного белого списка по умолчанию
[udp @ 0x685e70] конечный размер буфера получения составляет 131072
rtsp://admin:*****@192.168.199.83:554: Найдены недопустимые данные при обработке ввода
На картинке ниже информация из VLC-плеера во время потоковой передачи этого RTSP
информация о потоке
Мои вопросы:
- Как мне лучше диагностировать проблему, мешающую FFMPEG правильно декодировать этот RTSP поток?
- Как исправить или найти обходной путь? Моя первая цель – заставить эту камеру работать в Shinobi NVR на RASPI, так как мне нужно добавить только эту камеру, чтобы завершить настройку.
Я нашел некий обходной путь с использованием VLC.
В основном VLC открывает поврежденный RTSP поток и транскодирует его в новый RTSP поток.
Ниже приведена команда, которую я использовал:
cvlc -vvv rtsp://admin:#####@192.168.#.#:554/realmonitor –sout “#rtp{dst=192.168.#.#,port=1234,sdp=rtsp://192.168.#.#:16983/cam3.sdp}”
это работает благодаря службе systemd на Raspberry Pi 4.
Однако это решение ни элегантно, ни стабильно, однако работает везде. Поток часто зависает, но это лучшее, что я смог сделать.
Любые дальнейшие улучшения приветствуются.
PS: то же самое касается второй камеры Victure. Так что это не проблема одной модели (или, возможно, точный выбор для разрыва RTSP потоков..)
Ответ или решение
Ошибка "Invalid data found when processing input" при попытке получить RTSP-поток от IP-камеры может быть вызвана рядом факторов, включая неправильные кодеки, проблемы с сетевыми настройками и несовместимость форматов. Ваша ситуация с камерой Victure PC730, которая успешно работает через VLC и ONVIF Device Manager, но вызывает проблемы при использовании FFMPEG, требует детального анализа для решения.
1. Уточнение проблемы
Исходя из вашей информации, можно выделить следующие ключевые моменты:
- Вы используете FFMPEG версии 3.2.14, что может быть недостаточно современным для поддержки всех необходимых функций и кодеков.
- Стрим успешно воспроизводится в VLC, что указывает на возможность декодирования, но может говорить о различиях в обработке RTSP-потоков.
- Вы применяли команды для указания протокола передачи данных (UDP или TCP), но это не дало результатов.
2. Как лучше провести диагностику и устранить проблему
А. Обновление FFMPEG
Первым шагом рекомендую обновить FFMPEG до последней стабильной версии. На Raspberry Pi это можно сделать с использованием следующей команды:
sudo apt-get update
sudo apt-get install ffmpeg
Если в репозиториях доступна только старая версия, вы можете скомпилировать FFMPEG из исходников для получения последней версии.
Б. Проверьте параметры потоковой передачи
Посмотрите на параметры потока, которые предоставляет ваша камера, и сравните их с установками FFMPEG. Обратите внимание на типы кодеков:
- Видео: H.264
- Аудио: PCMA (G.711)
Попробуйте использовать явные настройки транс-кодирования в FFMPEG:
ffmpeg -i rtsp://admin:*****@192.168.199.83:554 -c:v copy -c:a aac -f flv output.flv
Это позволит вам проверить, корректно ли обрабатываются видео и аудио части потока.
В. Использование VLC как промежуточного звена
Как вы указали, VLC может работать как потоковый сервер. Возможно, это лучший вариант для вашей ситуации, если FFMPEG вызывает постоянные сбои. Можно настроить VLC для передачи потока в более удобном формате.
Ваше текущее решение с использованием командной строки VLC уже неплохо, но можете рассмотреть использование дополнительных параметров для улучшения стабильности потока:
cvlc -vvv rtsp://admin:#####@192.168.#.#:554/realmonitor --sout "#transcode{vcodec=h264,vb=800,acodec=mp4a,ab=128}:rtp{dst=192.168.#.#,port=1234,sdp=rtsp://192.168.#.#:16983/cam3.sdp}"
3. Интеграция с Shinobi NVR
Если ваша конечная цель — интегрировать камеру с Shinobi NVR, вы можете попробовать различные режимы потоковой передачи в Shinobi и убедиться, что все настройки соответствуют вашим требованиям.
Заключение
Процесс устранения ошибок может быть длительным, но упорство является ключом к решению. Проведите это тестирование и, если ни один из предложенных методов не работает, обратитесь к документации вашей камеры или программного обеспечения Shinobi NVR, чтобы узнать о возможных параметрах совместимости или поддержки.
Если у вас появятся дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться. Ваше усилие по созданию надежной системы видеонаблюдения стоит того.