Ffmpeg RTSP поток с размером=N/A битрейтом=N/A

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

Когда я пытаюсь транслировать видео, оно, похоже, работает, но битрейт и размер отсутствуют frame= 277 fps= 26 q=-1.0 size=N/A time=00:00:11.07 bitrate=N/A speed=1.05x

Я запускаю следующую команду, чтобы транслировать видео на RTSP сервер:
ffmpeg -re -stream_loop -1 -i idurre-2024-09-17-12h33m19s.mp4 -c copy -f rtsp -rtsp_transport tcp rtsp://localhost:8554/test

Вывод ffmpeg выглядит так:

ffmpeg version 7.1 Copyright (c) 2000-2024 the FFmpeg developers
  built with Apple clang version 15.0.0 (clang-1500.1.0.2.5)
  configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/7.1 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags="-Wl,-ld_classic" --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d --enable-libharfbuzz --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-audiotoolbox --enable-neon
  libavutil      59. 39.100 / 59. 39.100
  libavcodec     61. 19.100 / 61. 19.100
  libavformat    61.  7.100 / 61.  7.100
  libavdevice    61.  3.100 / 61.  3.100
  libavfilter    10.  4.100 / 10.  4.100
  libswscale      8.  3.100 /  8.  3.100
  libswresample   5.  3.100 /  5.  3.100
  libpostproc    58.  3.100 / 58.  3.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x127704880] st: 0 edit list: 1 Не хватает ключевого кадра при поиске временной метки: 0
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x127704880] st: 0 edit list 1 Не удалось найти индексный элемент перед временной меткой: 0.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'idurre-2024-09-17-12h33m19s.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: mp41avc1
    creation_time   : 2024-09-17T10:34:16.000000Z
    encoder         : vlc 3.0.21 stream output
    encoder-eng     : vlc 3.0.21 stream output
  Duration: 00:00:55.68, start: 0.000000, bitrate: 16205 kb/s
  Stream #0:0[0x1](eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709, progressive), 1920x1080, 16203 kb/s, 25 fps, 25 tbr, 1000k tbn (default)
      Metadata:
        creation_time   : 2024-09-17T10:34:16.000000Z
        handler_name    : VideoHandler
        vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Output #0, rtsp, to 'rtsp://localhost:8554/test':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: mp41avc1
    encoder         : Lavf61.7.100
  Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709, progressive), 1920x1080, q=2-31, 16203 kb/s, 25 fps, 25 tbr, 90k tbn (default)
      Metadata:
        creation_time   : 2024-09-17T10:34:16.000000Z
        handler_name    : VideoHandler
        vendor_id       : [0][0][0][0]
Нажмите [q], чтобы остановить, [?] для помощи
frame=  516 fps= 26 q=-1.0 size=N/A time=00:00:20.63 bitrate=N/A speed=1.03x    

[q] команда получена. Выход.

[out#0/rtsp @ 0x6000008e0240] video:40672KiB audio:0KiB subtitle:0KiB другие потоки:0KiB глобальные заголовки:0KiB накладные расходы при мультиплексировании: неизвестно
frame=  528 fps= 26 q=-1.0 Lsize=N/A time=00:00:21.11 bitrate=N/A speed=1.02x    

Сервер, на который я транслирую, это MediaMTX, который должен принимать поток. Похоже, он подключен, так как он его регистрирует:

mediamtx-rtsp  | 2024/10/06 10:35:13 INF MediaMTX v1.9.0
mediamtx-rtsp  | 2024/10/06 10:35:13 INF конфигурация загружена из /mediamtx.yml
mediamtx-rtsp  | 2024/10/06 10:35:13 INF [RTSP] слушатель открыт на :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
mediamtx-rtsp  | 2024/10/06 10:35:13 INF [SRT] слушатель открыт на :8890 (UDP)
mediamtx-rtsp  | 2024/10/06 10:35:16 INF [RTSP] [conn 192.168.65.1:17069] открыт
mediamtx-rtsp  | 2024/10/06 10:35:16 INF [RTSP] [session b3bb2623] создан с 192.168.65.1:17069
mediamtx-rtsp  | 2024/10/06 10:35:16 INF [RTSP] [session b3bb2623] публикуется по пути 'test', 1 трек (H264)

Но когда я пытаюсь прочитать его с помощью ffplay, ничего не отображается…

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

Проблема, с которой вы сталкиваетесь при потоке видео через RTSP с использованием FFmpeg, может быть связана с несколькими факторами, включая неправильную настройку кодирования, отсутствием ключевых кадров или проблемами на стороне сервера (в данном случае MediaMTX). Давайте подробно разберем возможные причины и решения.

Причины отсутствия битрейта и размера

  1. Ключевые кадры (I-кадры):
    Отсутствие ключевых кадров может вызывать проблемы при стриминге. Кодек H.264 требует наличие таких кадров для корректного декодирования видео в потоке. Поскольку вы используете опцию -c copy, видео не перекодируется, и ключевые кадры могут отсутствовать.

  2. Кодек и параметры кодирования:
    Использование параметра -c copy не всегда уместно, когда необходимо продвигать поток. Возможно, стоит использовать перекодирование видеопотока с явным указанием битрейта и других ключевых параметров.

Решения

Попробуйте изменить вашу команду FFmpeg следующим образом:

ffmpeg -re -stream_loop -1 -i idurre-2024-09-17-12h33m19s.mp4 -c:v libx264 -b:v 16205k -preset veryfast -f rtsp -rtsp_transport tcp rtsp://localhost:8554/test

Пояснения к опциям:

  • -c:v libx264: Использование кодека H.264 для кодирования видеопотока.
  • -b:v 16205k: Установка битрейта видеопотока. Вы можете отрегулировать это значение в зависимости от ваших требований к качеству.
  • -preset veryfast: Использование быстрого преднастройки, чтобы уменьшить нагрузку на процессор.

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

Проверка на стороне клиента

Если после этих изменений вы все равно не видите видео с помощью ffplay, выполните следующие шаги:

  1. Убедитесь, что FFmpeg и FFplay обновлены до последней версии.
  2. Проверьте, что RTSP-сервер (MediaMTX) работает корректно и принимает поток, что видно из ваших логов.
  3. Попробуйте воспроизвести поток по следующей команде:
    ffplay rtsp://localhost:8554/test
  4. Если по-прежнему нет изображения, проверьте наличие сетевых проблем или блокировок брандмауэра.

Дополнительные рекомендации

  • Используйте параметр -loglevel debug в команде FFmpeg для более детального вывода, что поможет вам выявить другие проблемы, если они возникнут.
  • Убедитесь, что у вас достаточно ресурсов на сервере для обработки и передачи видео, так как низкое качество графики может приводить к задержкам и сбоям.

Если вы выполните все вышеописанные шаги, шансы на успешную потоковую передачу увеличатся. Если проблема сохраняется, может потребоваться более глубокая диагностика специфических логов и настроек вашего сетевого окружения или оборудования.

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

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