В iPhone OS 3 Apple въведе HTTP поточно предаване на живо, което трябва да позволи поточно предаване на видео на живо от интернет. В момента работя с уеб камера, която се захранва към моя сървър и след това се преобразува във flv поток от ffmpeg и се предава обратно чрез ffserver. Някой знае ли как да настрои видео поток, който iPhone може да използва с помощта на ffmpeg и ffserver? Трябва да мога да прекодирам в почти всеки формат в движение.
HTTP поточно предаване на живо, 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... когато wrap е 8).
За повече информация вижте документацията. Моля, имайте предвид, че горните примери премахват аудио с флага -an
, тъй като лично аз никога не съм имал нужда от него.
Какво не е наред с използването на QuickTime за конвертиране на филми във формат "iPhone"? Просто правите File > Export > iPhone format... Пропускам ли нещо?
След преобразуване във формат на iPhone го нарязвам с mediafilesegmenter (намира се на Връзка с разработчици на Apple, 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>