HTTP Live Streaming, FFMPEG и FFSERVER и iPhone OS 3
В iPhone OS 3 Apple представила HTTP Live Streaming, которая должна позволять потоковую передачу видео из Интернета. В настоящее время я использую веб-камеру, которая подключается к моему серверу, а затем преобразуется в поток flv с помощью ffmpeg и возвращается обратно с помощью ffserver. Кто-нибудь знает, как настроить видеопоток, который iPhone может использовать с помощью ffmpeg и ffserver? Я должен быть в состоянии перекодировать в любой формат на лету.
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"):
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>