Потоковое mp4 с ffmpeg

16

Мне нужно создать канал, который имеет два потока - webm и mp4 - чтобы он мог быть совместим со всеми видеопроигрывателями HTML5. Поток webm работает отлично. Однако при попытке доступа к потоку mp4 сервер выдает следующую ошибку:

Sat Mar  9 23:21:54 2013 muxer does not support non seekable output

Вот часть файла ffserver.conf, которая работает с потоком mp4:

<Stream channel1.mp4>       # Output stream URL definition
   Feed feed1.ffm              # Feed from which to receive video
   Format mp4

   # Audio settings
   AudioCodec libmp3lame
   AudioBitRate 64             # Audio bitrate

   # Video settings
   VideoCodec libx264
   VideoSize 560x320           # Video resolution
   VideoFrameRate 25           # Video FPS
   AVOptionVideo flags +global_header  # Parameters passed to encoder
                                       # (same as ffmpeg command-line parameters)
   AVOptionVideo cpu-used 0
   AVOptionVideo qmin 10
   AVOptionVideo qmax 42
   AVOptionVideo quality good
   AVOptionAudio flags +global_header
   PreRoll 15
   StartSendOnKey
   VideoBitRate 400            # Video bitrate
</Stream>

Из того, что я могу найти, некоторые люди говорят, что mp4 просто не может быть потоковым. У меня нет привязанности к mp4, за исключением того, что у меня сложилось впечатление, что вам нужен mp4 для потоковой передачи видео на iPhone с помощью видеоплеера HTML5. Если это не так, дайте мне знать, и я с удовольствием переключусь на что-то, что будет лучше с потоковой передачей ffmpeg.

Fibericon
источник
3
Вы действительно не должны передавать MP4. Для видео HTML5 H.264 / MP4 должно быть достаточно закодировать видеофайл -movflags faststartили обработать его qt-faststart, а затем указать файл MP4 в <video>теге. Тогда вашему серверу необходим потоковый модуль H.264, чтобы клиент мог выполнять поиск. Или у вас есть живой вклад?
slhck
Мой клиент требует, чтобы это было потоковым - он хочет полностью отключить поиск клиента. Это потоковое из файла (файл на сервере в формате webm, если это имеет значение). Я не могу просто скрыть элементы управления, потому что айфоны заставляют элементы управления отображаться.
Fibericon
@slhck: я транслирую вход с веб-камеры в прямом эфире с mp4, но не могу этого сделать. Это работает, когда я использую flv. Можно ли использовать mp4 для прямой трансляции?
Джон Квалис
@JohnQualis Не уверен, выполнимо ли это с помощью ffserver. Но контейнер на самом деле не имеет значения - кодеки одинаковы с FLV и MP4 (H.264 и AAC).
slhck
@sklhck: я получил его для работы с flv, используя ffserver, но не с mp4. Большинство веб-браузеров поддерживают mp4. Мне нужно что-то, что работает на iphone, android и всех известных веб-браузерах и поддерживает h264 :) И я транслирую веб-камеру в прямом эфире
John Qualis

Ответы:

6

Статья HTML 5 и видео для iPad с вашего собственного веб-сайта , последнее обновление 12 ноября 2014 года, содержит следующую информацию:

образ

В статье рекомендуется использовать MP4 в качестве хорошего решения с достаточно свежей версией ffmpeg, используя кодирование H.264 с AAC.

Предлагаю прочитать статью с вниманием к деталям: в ней содержится пример HTML-файла, который будет работать во всех основных браузерах, а также пример команды FFmpeg, используемой для преобразования видео в файлы .mp4, чтобы они правильно транслировались.

harrymc
источник
это о "живой" трансляции?
Маркус Зибенихер
@MarkusSiebeneicher: Да, в основном.
Harrymc
У меня все еще есть проблемы "живой" потоковой передачи mp4 с ffmpeg, так как она кажется "не доступной". Я передаю вывод ffmpeg напрямую в браузер, с webm он работает "из коробки". Используя формат mp4, он вроде бы говорит, что его нельзя искать ... Поэтому я действительно задаюсь вопросом, что нужно сделать, чтобы mp4 стал "живым" потоком, когда видео не сохраняется как файл напрямую (что делает его доступным для поиска).
Маркус Зибенихер
@MarkusSiebeneicher: Предлагаю задать этот вопрос в новом сообщении с подробностями.
Harrymc