HTTP Live Streaming,FFMPEG& FFSERVER和iPhone OS 3

时间:2009-07-07 17:29:11

标签: iphone streaming ffserver ffmpeg video-streaming

在iPhone OS 3中,Apple推出了HTTP Live Streaming,它应允许从互联网直播视频。我目前正在操作一个网络摄像头,它将输入到我的服务器中,然后由ffmpeg转换为flv流,然后使用ffserver进行流式传输。有谁知道如何使用ffmpeg和ffserver设置iPhone可以使用的视频流?我应该能够动态地重新编码成任何格式。

4 个答案:

答案 0 :(得分:23)

您需要使用版本> = e109a29d6ddb02b2dd58c6c385ebec27f2d23b58(git)或18793(svn)构建ffmpeg的副本。确保在构建时也指定--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并将带有MP3音频的H.264视频传输到Apple的分段器中。分段器吐出分段视频文件和指向分段文件的M3U播放列表。您可以通过Apache等Web服务器为分段文件和播放列表提供服务。

显然,您需要大幅调整ffmpeg和segmenter选项,以获得您想要的结果。

答案 1 :(得分:12)

对于那些感兴趣的人,我已经捆绑了一个开源分段器,其中包含一个允许你使用ffmpeg执行此操作的脚本,请参阅我的segmented streaming on the iphone项目。它可以为输入流执行多比特率段,并通过scp,ftp甚至高达aws s3将流段传输到可配置目的地。

答案 2 :(得分: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 ...当换行为8)时。

有关详细信息,请参阅the documentation。请注意,上面的示例使用-an标记删除音频,因为我个人从不需要它。

答案 3 :(得分:0)

使用QuickTime将电影转换为“iPhone”格式有什么问题?你只需要做文件&gt;出口&gt; iPhone格式......我错过了什么吗?

转换为iPhone格式后,我使用mediafilesegmenter(在Apple Developer Connection, Http Live Streaming Tools找到)将其删除:

mediafilesegmenter -t 10 -f folderName/ nameOfInputFile.m4v

(注意:folderName /文件夹必须存在)

然后将您的iPhone指向

的网站
<video src='folderName/prog_index.m3u8' height=45 width=70 
       controls='on'>Your browser does not support the video tag</video>