在 iPhone OS 3 中,Apple 引入了HTTP Live Streaming,它应该允许从 Internet 实时流式传输视频。我目前正在操作一个网络摄像头,它输入我的服务器,然后由 ffmpeg 转换为 flv 流,并使用 ffserver 流式传输回来。有谁知道如何使用 ffmpeg 和 ffserver 设置 iPhone 可以使用的视频流?我应该能够即时重新编码成几乎任何格式。
4 回答
您需要构建版本 >= 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 和分段器选项以获得您想要的结果。
对于那些感兴趣的人,我已经将一个开源分段器与一个脚本捆绑在一起,让您可以使用 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”格式有什么问题?你只是做文件>导出> 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>