【问题标题】:Reduce/remove buffer lag on <video> element (iOS)减少/删除 <video> 元素上的缓冲延迟 (iOS)
【发布时间】:2014-04-11 18:40:25
【问题描述】:
我们有一个 FFMPEG 流正在流式传输到移动设备。我们使用 HTML5 <video src="..." webkit-playsinline> 标签来显示视频内联(在实时流媒体应用程序中)。我们已设法将 FFMPEG 端的延迟降至最低,但在 iOS 端仍有延迟,播放器可能会缓冲几秒钟。
有什么办法可以减少客户端延迟?
我们需要尽可能接近实时,跳过是可以接受的。
【问题讨论】:
标签:
ios
html
video
html5-video
【解决方案1】:
如果您使用的是 HTML5 视频标签,则 iOS 设备将使用 Quicktime 播放视频。 Apple 无法控制其 Quicktime 播放器的缓冲区设置等内部机制。对于 Apple TV 上的一个项目,我什至与 Apple 库比蒂诺的一个人一起工作,他们只是不允许访问您在他们的设备上需要的信息。
通常如果您使用HLS:
这是一个实时交付系统吗?
没有。它具有与包含流段的媒体文件的大小和持续时间相对应的固有延迟。至少一个片段必须完全下载才能被客户端查看,并且可能需要两个片段以确保片段之间的无缝转换。此外,编码器和分段器必须从输入创建文件;此文件的持续时间是媒体可供下载之前的最小延迟。推荐设置的典型延迟约为 30 秒。
什么是延迟?
大约 30 秒,建议设置。请参阅问题 #15。
对于 iOS 上的直播场景,您最好在实际播放器之前调整流媒体链:
捕获 -> 转码 -> 上传 -> 流服务器 -> 交付 -> 播放
使用 ffmpeg,您可以在转码级别调整 zero lantency streaming,我知道您已经这样做了。之后,使用完善的流媒体服务器(如 Wowza 和 CDN 交付)将帮助您到达那里(当然需要一定的成本 - 假设您需要一个流媒体服务器,但您可能不需要)。
如果您的 iOS 应用程序完全是原生的,您可以查看 MPMoviePlayerController。我对 iOS 中的本机应用程序代码没有经验,所以我让你决定是否值得花时间(我仍然怀疑这是否可能,因为底层的 Quicktime/HLS 层)。
我还遇到了this,这听起来很有趣,但我没有测试过,即使使用这种方法,你也会面临限制。
即使它可能不是您正在寻找的答案,我希望这会有所帮助。