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