Вопрос

В iPhone OS 3 компания Apple представила HTTP-трансляция в прямом эфире который должен обеспечить прямую трансляцию видео из Интернета.В настоящее время я использую веб-камеру, которая поступает на мой сервер, а затем преобразуется в поток FLV с помощью ffmpeg и передается обратно с помощью ffserver.Кто-нибудь знает, как настроить видеопоток, который может использовать iPhone, с помощью ffmpeg и ffserver?Я должен иметь возможность перекодировать практически в любой формат на лету.

Это было полезно?

Решение

Вам потребуется создать копию 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 и сегментатора, чтобы получить желаемые результаты.

Другие советы

Для тех, кому интересно, я включил в комплект сегментатор с открытым исходным кодом скрипт, который позволит вам использовать для этого 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 я нарезаю его с помощью медиафайлсегментера (находится по адресу 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top