Подтвердить что ты не робот

Содержимое потоковой передачи в реальном времени с использованием mp4box

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

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

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 в конвейер.

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

Ответ 1

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

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

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

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

Ответ 2

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

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