ffmpeg записывает RTSP только 30 секунд, а затем зависает.

Вопрос или проблема

Во время попытки записать RTSP поток, я заметил, что ffmpeg записывает только до 30 секунд, а затем просто зависает. Я нажимаю Ctrl + C, чтобы завершить.
Я использую ffmpeg версии 2.5.2

antony@medina:~$ ffmpeg -i rtsp://192.168.0.112:554/11 -vcodec copy ~/test.mp4
ffmpeg версия 2.5.2 Copyright (c) 2000-2014 разработчиков FFmpeg
  собран 25 дек 2014 00:04:42 с помощью gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
  конфигурация: --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libpulse --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvo-aacenc
  libavutil      54. 15.100 / 54. 15.100
  libavcodec     56. 13.100 / 56. 13.100
  libavformat    56. 15.102 / 56. 15.102
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  2.103 /  5.  2.103
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Предполагаемая компоновка канала для входного потока #0.1: моно
Вход #0, rtsp, из 'rtsp://192.168.0.112:554/11':
  Метаданные:
    заголовок        : \11
  Длительность: N/A, начало: 0.039900, битрейт: 64 кбит/с
    Поток #0:0: Видео: h264 (Main), yuv420p, 1280x720, 25.08 tbr, 90k tbn, 180k tbc
    Поток #0:1: Аудио: pcm_alaw, 8000 Гц, 1 канал, s16, 64 кбит/с
Выход #0, mp4, в '/home/antony/test.mp4':
  Метаданные:
    заголовок        : \11
    кодировщик       : Lavf56.15.102
    Поток #0:0: Видео: h264 ([33][0][0][0] / 0x0021), yuv420p, 1280x720, q=2-31, 90k tbn, 90k tbc
    Поток #0:1: Аудио: aac (libfdk_aac) ([64][0][0][0] / 0x0040), 8000 Гц, моно, s16, 17 кбит/с
    Метаданные:
      кодировщик       : Lavc56.13.100 libfdk_aac
Сопоставление потоков:
  Поток #0:0 -> #0:0 (копировать)
  Поток #0:1 -> #0:1 (pcm_alaw (родной) -> aac (libfdk_aac))
Нажмите [q], чтобы остановить, [?] для справки
[mp4 @ 0x343c1e0] Некомпактный DTS в выходном потоке 0:0; предыдущее: 0, текущее: 0; изменение на 1. Это может привести к неправильным временным меткам в выходном файле.
[NULL @ 0x31cf840] RTP: пропущено 8 пакетовkB время=00:00:02.59 битрейт=1084.8kbits/s    
^Cav_interleaved_write_frame(): Запрошен немедленный выход.56 битрейт=1492.1kbits/s    
frame=  751 fps=9.5 q=-1.0 Lsize=    5415kB time=00:00:29.88 битрейт=1484.3kbits/s    
видео:5449kB аудио:64kB субтитры:0kB другие потоки:0kB глобальные заголовки:0kB накладные расходы мультиплексирования: неизвестно
Получен сигнал 2: завершение.

Оказывается, для этого необходим следующий переключатель -rtsp_transport tcp

ffmpeg -rtsp_transport tcp -i rtsp://192.168.0.112:554/11 ~/Videos/stream.mkv

Ответ или решение

Решение проблемы с захватом RTSP-потока в FFmpeg

Введение

При использовании FFmpeg для записи RTSP-потоков вы столкнулись с проблемой: запись продолжается только 30 секунд, после чего процесс зависает. Это может вызвать неудобства и затруднения при использовании инструмента. В данном материале мы исчерпывающе рассмотрим возможные причины данной проблемы и подходы к её устранению.

Суть проблемы

Согласно вашему описанию, вы пытаетесь записать поток с помощью следующей команды:

ffmpeg -i rtsp://192.168.0.112:554/11 -vcodec copy ~/test.mp4

Однако, спустя 30 секунд процесс останавливается из-за зависания. Версия FFmpeg, которую вы используете, — 2.5.2, что может быть важным фактором, так как вы используете довольно старую версию программы.

Актуальные факторы

  1. Проблемы с сетью: RTSP-протокол использует UDP по умолчанию, который не гарантирует доставку пакетов. Упущенные кадры могут вызвать проблемы с синхронизацией потоков.

  2. Версия FFmpeg: Ваша версия FFmpeg устарела. Постоянные обновления и улучшения в более новых версиях могут влиять на успешную обработку потоков.

  3. Параметры кодирования: Использованные вами параметры могут быть не оптимальными. Тысячи пользователей сообщают о проблемах при работе с неподходящими кодеками для некоторых источников.

  4. Качество исходного потока: Иногда сам поток RTSP может иметь нестабильное качество, что может привести к зависаниям.

Решение

На основании вашего упоминания о использовании параметра -rtsp_transport tcp, это очень вероятное решение вашей проблемы. TCP обеспечивает более стабильный и надежный транспортный уровень по сравнению с UDP, что в свою очередь уменьшает риск потери пакетов и зависаний.

Попробуйте выполнить команду с использованием данного параметра:

ffmpeg -rtsp_transport tcp -i rtsp://192.168.0.112:554/11 ~/Videos/stream.mkv

Этот метод может существенно улучшить стабильность процесса записи, особенно если у вас ограниченная пропускная способность сети.

Рекомендации по улучшению

  1. Апгрейд FFmpeg: Рассмотрите возможность обновления вашей версии FFmpeg до последней стабильной версии, так как новые версии часто содержат исправления ошибок и улучшения производительности.

  2. Мониторинг состояния сети: Используйте средства для мониторинга сети, чтобы удостовериться в отсутствии потерь пакетов. Это может помочь в выявлении проблем с качеством потока.

  3. Эксперименты с кодеками: Попробуйте разные комбинации кодеков и форматов выходного файла, чтобы определить, какой из них лучше подходит для вашего потока.

  4. Логи FFmpeg: Включите более детализированное логирование, добавив -loglevel debug, чтобы получить больше информации о том, что происходит в момент зависания.

Заключение

Проблема с зависанием FFmpeg при записи RTSP-потоков может быть решена с помощью параметра -rtsp_transport tcp, что обеспечит более надежное и стабильное соединение. С учетом вышеприведенных рекомендаций вы сможете не только устранить проблему, но и оптимизировать процессы записи. Не забывайте обновлять свои инструменты и следить за состоянием сети для достижения наилучших результатов.

Надеюсь, данное руководство окажется полезным и поможет вам успешно захватывать RTSP-потоки без зависаний.

Оцените материал
Добавить комментарий

Капча загружается...