HTTP Live Streaming、FFMPEG & FFSERVER 和 iPhone OS 3

Posted

技术标签:

【中文标题】HTTP Live Streaming、FFMPEG & FFSERVER 和 iPhone OS 3【英文标题】:HTTP Live Streaming, FFMPEG & FFSERVER, and iPhone OS 3 【发布时间】:2010-11-08 18:48:30 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您需要构建版本 >= 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 等网络服务器提供分段文件和播放列表。

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

【讨论】:

任何windows服务器解决方案? 任何人都得到这个实际使用来自 dv 源的直播流了吗?我一直在尝试并不断从分段器中收到错误... 我发现 FFmpeg 版本 SVN-r21627 可以与开源分段器 code.google.com/p/httpsegmenter 一起使用,有人知道自该版本以来发生了什么变化吗? 如何为 ffmpeg/ffserver 设置一些持续时间或大小,清除创建文件,并从 0 大小/时间再次创建它,如果大小/时间大于 X,则再次清除它并再次构建它又...?【参考方案2】:

对于那些感兴趣的人,我已经将一个开源分段器与一个脚本捆绑在一起,让您可以使用 ffmpeg 来执行此操作,请参阅我的 segmented streaming on the 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 为 8)。

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

【讨论】:

看起来不错,但似乎 HLS 的输出格式不正确;使用 Safari 查看 m3u8 文件时出现“缺少插件”?【参考方案4】:

使用 QuickTime 将电影转换为“iPhone”格式有什么问题?您只需执行“文件”>“导出”>“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>

【讨论】:

@yujean 你的链接失效了。

以上是关于HTTP Live Streaming、FFMPEG & FFSERVER 和 iPhone OS 3的主要内容,如果未能解决你的问题,请参考以下文章

什么是HLS(HTTP Live Streaming)?

转: HTTP Live Streaming直播(iOS直播)技术分析与实现

ffmpeg HTTP LIVE STREAMING 删除旧段

Http Live Streaming 无法在 Apache 上运行

Http Live Streaming 无法在 Apache 上运行

静音播放 Http Live Streaming 视频的 AVPlayer