为 <video> 对象设置缓冲

Posted

技术标签:

【中文标题】为 <video> 对象设置缓冲【英文标题】:Set up buffering for <video> object 【发布时间】:2016-01-01 10:21:29 【问题描述】:

所以我正在尝试播放托管在远程服务器上的视频,我遇到的问题是大型视频需要很长时间才能开始播放。似乎需要在视频开始播放之前下载整个视频(通过比较视频开始播放所需的时间与下载所需的时间)。有没有人对如何设置视频以在下载少量视频后立即开始显示有任何建议。

【问题讨论】:

您需要将元数据移动到文件的开头,这有助于浏览器更好地决定需要多少流量才能正确传输。请参阅此答案 - ***.com/questions/27351136/… - 了解如何做到这一点 我的研究中有这些建议,问题是该网站允许用户上传自己的视频以供以后观看。有没有办法在 php 后端或网站本身上运行类似的东西? 您可以在服务器上运行一个脚本来监视上传文件夹并触发 ffmpeg 处理任何新文件。因为有延迟,尽管用户必须等到他们的视频可用...看看***.com/questions/2504842/… 如果您将其作为单独的答案发布,这将需要一些时间进行调查,我会将其标记为答案。 【参考方案1】:

要处理单个上传,您需要使用 ffmpeg 之类的工具将元数据(MOOV atom)移动到视频文件的前面:

./ffmpeg -y -i SourceFile.mp4 -s 1280x720 -c:v libx264 -b 3M -strict -2 -movflags faststart DestFile.mp4

上面将为您提供 1280x720 输出,在 mp4 容器中使用 h264 以 3Mbps 的速度输出,并且还将执行第二次传递以将 moov 元素移动到文件的前面,使其能够更快地开始流式传输。它不会重新编码音频,因此会保持您开始时的任何质量

您可能想要调整帧大小和比特率,以使文件大小与您喜欢/需要的匹配。

要在后台执行此操作,您需要查看 this 之类的内容以从 PHP 调用 ffmpeg,或者使用 http://ffmpeg-php.sourceforge.net/ 来调用它,或者如果更容易使用远程转码服务,例如 @987654323 @

【讨论】:

以上是关于为 <video> 对象设置缓冲的主要内容,如果未能解决你的问题,请参考以下文章

video标签如何确定canplay需要多少缓冲

WebGl 利用缓冲区对象画多个点

停止缓冲 HTML5 视频,但保留缓冲数据。然后继续

response对象设置输出缓冲大小

ValueError:无效的文件路径或缓冲区对象类型:<class 'tkinter.StringVar'>

ValueError:无效的文件路径或缓冲区对象类型:<class 'dict'> python