Даш в прямом эфире

после долгих поисков в Google и после того, как я прочитал множество форумов, я все еще не могу вести прямую трансляцию с помощью моей камеры на другое устройство. Моя система состоит из сервера (ноутбук с Windows), который захватывает сцену и транслирует полученное видео. возможность читать поток видео с помощью простой страницы html5, оснащенной dash.js.

В самом начале, чтобы понять, как работает тире, я попытался стримить какое-то «статическое» видео, и благодаря этому туториалу все отлично работает . Проблемы возникают, когда я пытался транслировать живое видео и следовал этому руководству , потому что ffmpeg не удалось создать файл .mpd, но его можно разделить на две подзадачи:

  1. Когда я пытаюсь обработать аудио и видео вместе, система говорит, что аудиоканал не содержит никакого потока. Ниже я перечисляю вставленную команду:

    ffmpeg -f dshow -i video="USB2.0 VGA UVC WebCam":audio="Microfono /
    (Realtek   High Definition Audio)" -map 0:0 -pix_fmt yuv420p /
    -c:v libvpx -b:v 3000k -keyint_min 30 -g 30 -speed 6 /
    -tile-columns 4 -frame-parallel 1 -threads 8 -static-thresh 0 /
    -max-intra-rate 300 -deadline realtime -lag-in-frames 0 /
    -error-resilient 1 -f webm_chunk -header live.hdr /
    -chunk_start_index 1 live_%d.chk -map 0:1 -c:a libvorbis -b:a 128k /
    -ar 44100 -f webm_chunk -audio_chunk_duration 2000 -header /
    live_audio.hdr -chunk_start_index 1 live_audio_%d.chk
    

    Приведенные выше строки вызывают аудио- и видеооборудование и сохраняют мультимедийные потоки фрагментами.

    ffmpeg -f webm_dash_manifest -live 1 -i live.hdr -f webm_dash_manifest /
    -live 1 live_audio.hdr -c copy -map 0 -map 1 -f webm_dash_manifest /
    -live 1 -adaptation_sets "id=0,streams=0 id=1,streams=1" /
    -chunk_start_index 1 -chunk_duration_ms 2000 /
    -time_shift_buffer_depth 7200 -minimum_update_period 7200 manifest.mpd
    

    Этой последней команде не удалось подключить аудиопоток в файле .mpd, и в консоли появилось сообщение об ошибке «Выходной файл № 0 не содержит никакого потока».

  2. Поэтому я пытаюсь только с видео, используя по существу те же параметры, но при попытке создать манифест возникает ошибка типа «Не удалось записать заголовок для выходного файла № 0 (неверные параметры кодека?): Неверные данные обнаружены при обработке ввода» , поэтому мне любопытно узнать, какие параметры неверны.

В этот момент я полностью меняю свою стратегию, поэтому я создаю фрагментированную версию прямой трансляции и пытаюсь использовать MP4Box для создания файла .mpd, но кажется, что MP4Box работает только с видео с ограниченным временем, или, по крайней мере, я не могу использовать в живую.

И, наконец, я использовал Dashcast, и я смог увидеть какой-то кадр со своей клиентской страницы, но он просто не работает. Последняя команда, которую я вставил, выглядит следующим образом:

DashCast -vf dshow -vfr 15 -v video="USB2.0 VGA UVC WebCam" /
-live -seg-dur 500 -frag-dur 100 -time-shift 10

На самом деле я немного поигрался с параметрами и т.д... но результат все тот же, просто я не вижу своего лица в браузере. В этом случае ошибка "буфер реального времени заполнен на 101%! кадр пропущен!" или «буфер реального времени заполнен на 80%! кадр пропущен!».

Итак, мой вопрос: что не так с моими командами FFmpeg?

Как я могу использовать MP4Box для живых целей (с примерами, потому что я не нашел ни одного примера во всей сети)?

И, наконец, почему DashCast такой медленный?

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

Вы пробовали это? wiki.webmproject.org/adaptive-streaming/…
Извините, не видел, чтобы вы связали это раньше. Ваша строка Ffmpeg выглядит намного сложнее, чем в приведенном там примере, почему так?
И просто из любопытства, вы исследовали, может ли VLC делать то, что вам нужно?
Привет @HansMeiser, спасибо за комментарии, в любом случае моя строка выглядит более сложной, потому что я использовал переменную ${VP9_DASH_PARAMS} в текстовой версии -speed 6 -tile-columns 4 -frame-parallel 1 -threads 8 -static-thresh 0 - max-intra-rate 300 -deadline realtime -lag-in-frames 0 -error-resilient 1 , это параметры прямой трансляции. На самом деле это параметры для энкодера VP9, ​​но я использовал VP8, потому что VP9 вызывает у меня некоторые проблемы. Наконец нет, я не исследовал VLC, теперь я посмотрю на материал VLC.
У меня такая же проблема, как у вас, и кажется, что Windows ffmpeg не работает. Те же команды, которые выдают мне ошибки в Windows, работают и в Linux.

Ответы (1)

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

Проверьте загрузку ЦП, если она достигает максимума, это, вероятно, причина падения кадров.

По-видимому, mp4box можно использовать для прямой трансляции DASH (у него есть опция -dash-live), но мне пока не удалось заставить это работать. Эта ссылка довольно старая, но, похоже, есть рабочий пример:

http://www.slideshare.net/cconcolato/live-streaming-of-video-and-subtitles-with-mpegdash