Подтвердить что ты не робот

HTTP Live Streaming, FFMPEG и FFSERVER и iPhone OS 3

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

4b9b3361

Ответ 1

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

Ответ 2

Для тех, кого это интересует, я подключил сгенерированный с открытым исходным кодом сегмент с script, который позволит вам использовать ffmpeg для этого, см. раздел сегментированный поток в проекте iphone. Он может выполнять сегменты с несколькими битрейтами для входных потоков и передавать сегменты потока в настраиваемый пункт назначения через scp, ftp и даже до aws s3.

Ответ 3

Это довольно старая тема, но поддержка 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... когда wrap is 8).

Для получения дополнительной информации см. документация. Обратите внимание, что приведенные выше примеры вычеркивают аудио с флагом -an, поскольку я лично его никогда не нуждался.

Ответ 4

Что случилось с использованием QuickTime для конвертирования фильмов в формат "iPhone"? Вы просто делаете File > Export > iPhone format... Я что-то пропустил?

После преобразования в формат 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>