В iPhone OS 3 Apple представила , что позволит транслировать потоковое видео из Интернета. В настоящее время я использую веб-камеру, которая поступает на мой сервер, а затем преобразуется в поток flv с помощью ffmpeg и передается обратно с помощью ffserver. Кто-нибудь знает, как настроить видеопоток, который iPhone может использовать с помощью ffmpeg и ffserver? Я должен иметь возможность перекодировать практически в любой формат на лету.
HTTP Live Streaming, FFMPEG и FFSERVER и iPhone OS 3
Ответы (4)
Вам нужно будет создать копию ffmpeg с версией> = e109a29d6ddb02b2dd58c6c385ebec27f2d23b58 (git) или 18793 (svn). Убедитесь, что вы также указали флаг --enable-libx264 при сборке. После того, как вы его настроите и запустите, вы можете сделать примерно следующее:
ffmpeg -i <input video> -acodec libmp3lame -ac 1 -vcodec libx264 -s 320x240 \
-level 30 -f mpegts - | \
segmenter - 10 test test.m3u8 http://example.com/path/to/your/files/
то есть перенести входной файл или поток в ffmpeg и передать видео H.264 со звуком MP3 в сегментатор Apple. Сегментатор выдает сегментированные видеофайлы и списки воспроизведения M3U, указывающие на сегментированные файлы. Вы будете обслуживать сегментированные файлы и списки воспроизведения через веб-сервер, такой как Apache.
Очевидно, вы захотите существенно настроить параметры ffmpeg и segmenter, чтобы получить желаемые результаты.
Для тех, кому интересно, я связал сегментатор с открытым исходным кодом со сценарием, который позволит вам использовать для этого ffmpeg, см. Мой сегментированная потоковая передача в проекте iphone. Он может создавать сегменты с несколькими битрейтами для входных потоков и передавать сегменты потока в настраиваемое место назначения через scp, ftp и даже до aws s3.
Это довольно старая тема, но поддержка HLS, казалось бы, новая функция FFmpeg может кому-то пригодиться.
Пример использования будет следующим:
ffmpeg -i <input_file> -c:v libx264 -preset slow -map 0 -an -flags -global_header -f hls -hls_time <segment_length> <m3u8_file>
Если вы хотите вести прямые трансляции, это будет еще один пример:
ffmpeg -i <input_stream> -c:v libx264 -preset ultrafast -map 0 -an -flags -global_header -f hls -hls_time <segment_length> -hls_list_size <playlist_entries> -hls_wrap <wrap> <m3u8_file>
Аргумент -hls_list_size
ограничивает количество файлов в списке воспроизведения, а аргумент -hls-wrap
ограничивает общее количество файлов и переносит имена файлов, как только он достигает этой точки (например, test0.ts, test1.ts ... test7.ts, test0 .ts, test1.ts ... при обертке 8).
Для получения дополнительной информации см. документацию. Обратите внимание, что в приведенных выше примерах звук удаляется с помощью флага -an
, так как лично мне он никогда не был нужен.
Что плохого в использовании QuickTime для преобразования фильмов в формат «iPhone»? Вы просто делаете Файл> Экспорт> Формат iPhone ... Я что-то упустил?
После преобразования в формат iPhone я нарезаю его с помощью mediafilesegmenter (находится по адресу Apple Developer Connection, Http Live Streaming Tools):
mediafilesegmenter -t 10 -f folderName/ nameOfInputFile.m4v
(Примечание: имя папки / папка должна существовать)
Затем направьте свой iPhone на веб-сайт с
<video src='folderName/prog_index.m3u8' height=45 width=70
controls='on'>Your browser does not support the video tag</video>