如何在Unix上实现HTTP Live Streaming服务器?

时间:2011-12-12 21:49:47

标签: ios ubuntu ffmpeg video-streaming http-live-streaming

我刚刚意识到Apple需要HTTP Live Streaming才能在iPhone应用中查看视频。我之前没有意识到这一点......我现在正在努力了解这涉及到什么,所以我可以决定是否要做这项工作并在3G中提供视频或限制视频播放给与Wi-Fi连接的用户

我阅读了Apple提供的overview,现在明白我的服务器需要对媒体文件进行细分和编制索引。我也明白,我不必托管内容以便能够播放它(我可以指向其他地方托管的视频,对吧?)。

此时我不清楚的是在我的服务器上实施的内容( Ubuntu Hardy )即可实时细分和编制索引 (再一次,我没有主持我想要发布的视频)。

我发现link解释了如何安装FFmpeg和X264,但我不知道这是否是最佳解决方案(因为我有一台Ubuntu服务器,我无法使用Apple实时流媒体工具,它是正确的吗?)。另外,我不明白我的服务器知道视频需要转换并启动作业...

任何反馈可以帮助我准确了解服务器端要做什么,以便能够在3G上的iPhone应用程序中流式传输视频,我们将不胜感激! (哦,只是它有所不同,我的应用程序后端在Rails中)

3 个答案:

答案 0 :(得分:13)

有几种竞争技术,但今天如果你想要在Apple设备(iPhone,iPad等)上同步传输任何文件,那么HLS就是最佳选择。顺便提一下,大多数浏览器和Android也支持它,所以不是一个糟糕的起点。但请注意,尽管有名称,但它不适合流媒体直播内容。

除非你想要直播视频,否则你真的不需要red5或wowza或fms或类似的东西。 HLS基本上是一组以不同比特率编码的短视频片段(例如每个5分钟),以及您在浏览器中为基于Flash或HTML5的播放器提供的m3u播放列表。您可以自行决定段长度或编码方式。

这是我见过的关于如何选择分辨率,比特率,分段大小等的最佳文章:http://www.streamingmedia.com/Articles/Editorial/Featured-Articles/Adaptive-Streaming-in-the-Field-73017.aspx

从那里你只需创建一个目录结构,例如

/data/video/video_id/original.mp4
/data/video/video_id/quality1/chunk1.mp4
/data/video/video_id/quality1/chunk2.mp4
/data/video/video_id/quality2/chunk1.mp4
etc..

然后你需要为所有的块和质量生成一个m3u播放列表,这取决于播放器本身实现质量之间的切换和播放下一个文件(大多数现代玩家已经拥有)。

我还强烈建议退房:https://developer.apple.com/resources/http-streaming/ - Apple提供了大量免费工具来准备HTTP直播的视频和播放列表。

答案 1 :(得分:8)

如果您想从网络摄像头流式传输实时内容:FMLE(闪存媒体实时编码器)

如果你想流静态内容(电影):ffmpeg& xuggle

<强> RED5:

您的媒体服务器可能是red5(开源和免费)或FMS或wowza。但我只使用red5,我不知道其他人。你可以找到red5 here

您的服务器可以在任何地方,但您需要打开一些端口(至少1938表示rtmp),5080表示“管理面板”,您可以在列表中看到9999。 (查看文档)Red5是java中的媒体服务器,因此您需要java jdk&gt; = 1.6。

可以找到Red5 1.0 RC here。你可以找到windows,osx或linux的版本。我使用了tarball版本。解压缩并运行“red5.sh”。您应该可以在http://localhost:5080/访问管理员,并且还应该看到正在显示的视频。如果不是,那就错了,在这个工作之前你不能再进一步了。

使用ffmpeg流式传输

你可以找到xuggle here,你可以找到关于这个here的更多信息

ffmpeg -i your_file.flv -re -acodec copy -vcodec copy -f flv rtmp://localhost_or_yourred5serverip/live/livestream

请记住,如果你想在网上流媒体,只有flv和mp4可以在flash播放器中播放(我认为)。一旦流式传输,您应该可以在“管理面板”here中看到它。连接到您的服务器(rtmp:// localhost / live /)并转到视图选项卡并输入“livestream”。您可以使用mplayer rtmp:// localhost / live / livestream来查看您的视频。

在Flash播放器中播放:

您可以使用flowplayer(使用rtmp插件)或jwplayer。

答案 2 :(得分:1)

流式传输HLS的最简单方法是使用类似Wowza或FMIS的东西(两者都不便宜)。 Wowza将接受输入(实时流或存储的VOD内容,并在运行中进行分段。