减少/消除iOS上<video>元素的缓冲延迟

3
我们有一个FFMPEG流,用于在移动设备上进行流媒体传输。我们使用HTML5的<video src="..." webkit-playsinline>标签来内联显示视频(在实时流应用程序中)。我们已经成功将FFMPEG端的延迟降至最低,但在iOS端仍然存在一定的延迟,播放器可能会缓冲几秒钟。
有没有办法减少客户端延迟?
我们需要尽可能接近实时,并且可以接受跳帧。

你可能需要使用MediaSource自己编写代码 - http://updates.html5rocks.com/2011/11/Stream-video-using-the-MediaSource-API - 因为<video>元素总是会尝试缓冲,而且没有对此进行控制的方法。 - Offbeatmammal
1个回答

3
如果您正在使用HTML5视频标签,则iOS设备将使用Quicktime播放视频。苹果公司对其Quicktime播放器等内部机制(例如缓冲设置)没有任何控制。在Apple TV项目中,我甚至与库比蒂诺的一位苹果工程师合作过,但他们不允许访问您在其设备上需要的任何信息。
通常,如果您使用HLS
这是实时传输系统吗? 不是。它具有相应于包含流段的媒体文件的大小和持续时间的固有延迟。必须完全下载至少一个段才能由客户端查看,并且可能需要两个段以确保无缝转换。此外,编码器和分段器必须从输入创建文件;此文件的持续时间是可用于下载媒体之前的最小延迟。使用推荐设置的典型延迟约为30秒。
延迟是多少? 使用推荐设置,大约为30秒。请参见问题#15。
对于iOS上的直播场景,你最好在实际播放器之前调整流传输链: 捕获 -> 转码 -> 上传 -> 流媒体服务器 -> 交付 -> 播放
使用ffmpeg可以在转码级别上进行零延迟流媒体调整,我理解你已经做到了这一点。之后,使用像Wowza这样的成熟的流媒体服务器和CDN交付将有助于您实现目标(当然需要一定的成本-并且假设您需要流媒体服务器,但您可能不需要)。
如果您的iOS应用程序全是原生的,您可以查看MPMoviePlayerController。我没有在iOS中的原生应用程序代码方面的经验,所以我让您决定是否值得花时间(尽管我怀疑由于底层Quicktime / HLS层,这将是不可能的)。
我还发现了this,听起来很有趣,但我没有测试过,即使采用这种方法,您也会面临一些限制。
即使这可能不是您正在寻找的答案,我希望这可以帮助到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接