2015-06-03 2 views
10

Я пытаюсь жить потоком H.264 содержание до HTML5 с использованием API-интерфейсов расширения источника мультимедиа.Содержимое потоковой передачи в реальном времени с использованием mp4box

Следующий метод работает довольно хорошо:

ffmpeg -i rtsp://10.50.1.29/media/video1 -vcodec copy -f mp4 -reset_timestamps 1 -movflags frag_keyframe+empty_moov -loglevel quiet out.mp4

, а затем: mp4box -dash 1000 -frag 1000 -frag-rap out.mp4

Я могу взять MP4Box выход (out_dashinit.mp4) и отправить его через веб-сокеты, кусок на кусок , к клиенту JavaScript, который передает его в API-интерфейс источника мультимедиа.

Однако это нехороший метод для живого контента.

То, что я пытаюсь сделать сейчас, это создать единый конвейер, чтобы сделать это в реальном времени и с минимально возможной задержкой. С FFmpeg можно перенаправить вывод на stdout вместо out.mp4 и захватить содержимое. Я не мог понять, возможно ли комбинировать MP4Box в конвейере.

  1. Может ли MP4Box принимать входные данные из источника, который не является файлом?
  2. Может ли MP4Box получать такой контент постепенно (либо из файла, либо из другого источника), когда он поступает в реальном времени? т. е. немного подождите, если поток остановится на 1 секунду и возобновится автоматически.
  3. Тот же вопрос, но для вывода: может ли он выводить на то, что не является файлом (например, stdout), и может ли он делать это постепенно, чтобы всякий раз, когда выходные данные готовы, я смогу его перенести и перенести на веб-клиент, по существу создающий бесконечный пунктирный MP4.

ответ

7

Вам не нужно MP4Box для создания требуемой выходной мощности, но вам нужно кусок контента сами искали коробки в сформированном файле.

В основном вы будете генерировать fMP4 с H264, и отправить в браузер moov окна для инициализации и moof+mdat коробок для каждого фрагмента MP4, который вы создадите. Вам нужно будет закодировать игрока в JavaScript, вы, вероятно, не сможете использовать стандартный DASH-плеер.

Чтобы создать правильный фрагментированный MP4, вам необходимо передать это ffmpeg: -movflags empty_moov+omit_tfhd_offset+frag_keyframe+default_base_moof.

Обязательно используйте последнюю доступную версию.

+0

фантастический. Оно работает! Есть ли у вас предложение уменьшить время ожидания? В настоящее время у меня около 3-4 секунд задержки. – galbarm

+1

Вам нужно работать с параметрами, доступными для x264.Первый, который я проверю, это «-независимая нумерация», и я буду работать оттуда. –

+0

Но я не перекодирую видео. Как вы можете видеть, я использую копию -vcodec, и я точно знаю, что видео прибывает с почти нулевой задержкой. – galbarm

1

Насколько я понимаю ваше решение, вы не транслируете, а постепенно загружаете один файл MP4. Правильно ли я понимаю это?

Недавно я начал проект RTP2DASH, чтобы сделать реальную прямую трансляцию DASH с источника данных RTP. Он по-прежнему очень «альфа», но его нужно легко использовать для простых операций.

+0

Нет. Мое решение действительно потоковое видео. Хотя содержание данных является фрагментированным форматом mp4, данные никогда не записываются в файл. – galbarm

+0

Я понял это, но все же это не DASH, не так ли? Манифеста нет и нет множественных качеств. Он преобразует поток RTSP в прогрессивную загрузку. –

+0

Исправить. Это не адаптивное потоковое решение. Это минимально возможное время ожидания - одно качественное решение. – galbarm

Смежные вопросы