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的主要内容,如果未能解决你的问题,请参考以下文章
转: HTTP Live Streaming直播(iOS直播)技术分析与实现
ffmpeg HTTP LIVE STREAMING 删除旧段
Http Live Streaming 无法在 Apache 上运行