19

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

4

4 回答 4

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 和分段器选项以获得您想要的结果。

于 2009-07-08T13:52:19.487 回答
12

对于那些感兴趣的人,我已经将一个开源分段器与一个脚本捆绑在一起,让您可以使用 ffmpeg 来执行此操作,请参阅我在 iphone项目上的分段流。它可以对输入流进行多比特率分段,并将流分段通过 scp、ftp 甚至到 aws s3 传输到可配置的目标。

于 2009-07-30T13:26:43.300 回答
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)。

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

于 2014-05-18T13:08:22.677 回答
0

使用 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>
于 2010-04-23T06:56:07.690 回答