2015-12-06 9 views
4

При передаче mpegts в ffmpeg, который должен преобразовать его в mp4 и pipe в stdout, ffmpeg говорит: «muxer не поддерживает вывод, который нельзя найти».FFMPEG: Transmux mpegts to mp4 дает ошибку: muxer не поддерживает вывод, не подлежащий поиску

После много исследований Я пришел к выводу, что mp4 является плохим выбором для выполнения этих видов транскодирования на лету из-за поиска. Таким образом, по существу: MP4 не может быть передан через ffmpeg, что имеет смысл.

Но у меня нет непрерывного потока mpegts, у меня есть куски 5 секунд. Так что это на самом деле так же, как:

  • Вот мой 1 Мб * ts-файл
  • Пожалуйста, прочтите его из трубы, пока не упретесь EOF
  • Пожалуйста TransMux его в mp4 (если вам действительно нужно искать, хорошо использовать буфер)
  • Пожалуйста трубку полного внутреннего буфера mp4 на стандартный вывод

Мне нужны эти mp4 куски для более HTML5 MediaSource, фрагментация не является проблемой, я использую mp4box.js, который работает как шарм ,

Вопросы:

  • Может FFmpeg сделать этот вид внутренней буферизации?
  • Есть ли лучший вариант для рассмотрения?

В сущности: Могу ли я (каким-то образом) взаимодействовать с ffmpeg без использования файлов? Мои текущие решения работают с файлами и опросом для новых кусков, что является уродливым.

Если вас интересует моя команда ffmpeg, просто дайте мне знать.

+0

Я просто хочу поговорить с ffmpeg прямо как: Вот мой буфер ввода и, пожалуйста, дайте выходной буфер без создания файлов. Поскольку моя программа вызывает ffmpeg как дочерний процесс, я не хочу тратить компьютер на файлы, которые используются только один раз для трансляции. Это действительно проблема интерфейса с ffmpeg. Является ли ffmpeg действительно неспособным буферизовать вывод и отправлять его в куски вместо сегментированной потоковой передачи? Я не хочу полностью перейти на C, чтобы изменить интерфейс ... – Kr0e

ответ

5

Поскольку вы упомянули фрагментацию, вы можете просто включить ее с помощью movflags. Пример для фрагментов, начиная с каждым ключевым кадром:

ffmpeg -i segment.ts -c copy -movflags frag_keyframe+empty_moov -f mp4 - 

Имея пустой moov атом означает, что не нужно искать и, таким образом, работает с трубой.

+1

Хотя это как-то работает, оно помешает вставке в MediaSource, так как продолжительность всегда будет 0, а последующие фрагменты не могут быть вставлены в ближайшее время. Весь этот материал mp4 - большая боль в заднице ... MediaSource! Почему вы не поддерживаете TS !!! Другая возможность заключается в использовании некоторого компилируемого emscripten файла ffmpeg, который имеет виртуальную файловую систему. Это в основном все, что я ищу ... способ сказать ffmpeg использовать что-то в ОЗУ, мне не нужны потоковые возможности ffmpeg, так как я действительно имею дело только с 5-секундными кусками, которые сами независимы от друг друга. – Kr0e

+0

Делает ли '-copyts' значение? Вы можете использовать RAM-диск для второго решения. – aergistal

+0

И MSE должен поддерживать MPEG-2 TS https://w3c.github.io/media-source/byte-stream-format-registry.html – aergistal

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

  • Нет связанных вопросов^_^