2014-04-11 30 views
2

我们有一个FFMPEG流正在流式传输到移动设备。我们正在使用HTML5 <video src="..." webkit-playsinline>标签来在线显示视频(在实时流应用程序内)。我们已经设法将FFMPEG端的延迟降低到最低,但是在iOS端仍然存在延迟,因为播放器大概会缓冲几秒钟。在<video>元素(iOS)上减少/删除缓冲区延迟

有什么办法可以减少客户端延迟吗?

我们需要尽可能接近实时和跳过是可以接受的。

+0

您可能将不得不使用MediaSource来滚动您自己 - http://updates.html5rocks.com/2011/11/Stream-video-using-the-MediaSource-API - 因为

回答

2

如果您使用HTML5视频标签,则iOS设备将使用Quicktime播放视频。 Apple不提供对其Quicktime播放器的缓冲区设置等内部机制的控制。对于苹果电视的项目,我甚至与苹果的库比蒂诺的一个人一起工作,他们只是不允许访问他们设备上所需的信息。

通常,如果你使用HLS

这是一种实时传输系统?

否。它具有与包含流段的媒体文件的大小和持续时间相对应的固有延迟。至少有一个细分受众群必须完全下载才能被客户查看,并且可能需要两个细分受众群以确保细分受众群之间的无缝过渡。另外,编码器和分段器必须从输入创建一个文件;该文件的持续时间是媒体可供下载之前的最短延迟时间。建议设置的典型延迟时间在30秒附近。

什么是延迟?

约30秒,推荐设置。见问题#15。

有关iOS的现场直播情况下,你最好调流链的实际播放器之前: 捕获 - >转码 - >上传 - >流媒体服务器 - >交付 - >播放

使用的ffmpeg,你可以调整为zero lantency streaming在转码级别,我明白你已经完成了。之后,使用像Wowza和CDN交付的良好流媒体服务器将帮助您达到目标(当然,以一定的成本 - 假设您需要流媒体服务器,您可能不会)。

如果你的iOS应用程序都是原生的,你可以看看MPMoviePlayerController。我在iOS上没有使用原生应用程序代码的经验,所以我让你决定是否值得花时间(由于基础Quicktime/HLS层,我仍然怀疑它是否可能)。

我也遇到了this这听起来很有趣,但我还没有测试过,即使采用这种方法,您也会面临限制。

即使它可能不是你正在寻找的答案,我希望这会有所帮助。