Создание живого обновления видео потока с помощью ffmpeg - PullRequest
0 голосов
/ 11 апреля 2020

Я настроил поток данных с моей веб-камеры с помощью API MediaSource и настроил его отправку данных с моей веб-камеры в веб-формате каждые 4 секунды. Затем я получаю это на сервере узла, использую createWriteStream, чтобы установить канал и начать потоковую передачу!

Я застрял при преобразовании медиа из webm в live m3u8. Ниже приведена команда ffmpeg, которую я выполняю (она прошла через многочисленные итерации, когда я пробовал что-то из документации).

const cmd = `ffmpeg
    -i ${filepath}
    -profile:v baseline
    -level 3.0
    -s 640x360 -start_number 0
    -hls_time 10
    -hls_list_size 0
    -hls_flags append_list
    -hls_playlist_type event
    -f hls ${directory}playlist.m3u8`

  const ls = exec(cmd.replace(/(\r\n|\n|\r)/gm," "), (err, stdout, stderr) => {
    if(err) {
      console.log(error);
    }

  })

Я не могу удалить #EXT-X-ENDLIST в конце списка воспроизведения, чтобы сохранить потоковую трансляцию для моих веб-плееров, поэтому, когда я нажимаю кнопку воспроизведения, видео воспроизводит список воспроизведения в его текущем состоянии. и останавливается в конце.

Спасибо

ОБНОВЛЕНИЕ

Это может быть проблема качества / скорости. Когда я снизил качество до;

const cmd = `ffmpeg
    -i ${filepath}
    -vf scale=w=640:h=360:force_original_aspect_ratio=decrease
    -profile:v main
    -crf 51
    -g 48 -keyint_min 48
    -sc_threshold 0
    -hls_time 4
    -hls_playlist_type event
    -hls_segment_filename ${directory}720p_%03d.ts
    ${directory}playlist.m3u8

Мне удалось получить пиксельное живое видео. Тем не менее, он быстро упал ... Может быть, это пока невозможно в Node / Web Browser?

1 Ответ

0 голосов
/ 15 апреля 2020

Мэтт,

Я работаю над аналогичным проектом. Я преобразую на узле в FLV, а затем с помощью api.video для преобразования FLV в HLS. Мой код на Github , и он размещен на livestream.streamclarity.com (и является WIP).

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

Я обнаружил, что любое масштабирование видео или обработка аудио, которую вы выполняете в FFMPEG, добавляет задержку к обработке и имеет тенденцию к sh больше. Мое исправление состояло в том, чтобы ограничить видео, поступающее с камеры, поэтому все, что FFMPEG должен сделать, - это изменить формат.

Другие варианты FFMPEG, которые следует учитывать: (вместо CRF 51) -предустановка сверхбыстрой, -тюна zerolatency

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...