当前位置: 首页 > 知识库问答 >
问题:

YouTube的HTML5视频播放器是如何控制缓冲的?

拓拔麒
2023-03-14

我正在看一个youtube视频,我决定调查一下它的视频播放器的某些部分。我注意到,与我见过的大多数HTML5视频不同,YouTube的视频播放器并不提供普通的视频源,而是使用blob url作为源。

之前我测试过HTML5视频,发现服务器从一开始就开始流式传输整个视频,并在后台缓冲完整的其余视频。这意味着,如果你的视频是300兆,那么所有的300兆都将被下载。如果你向中间寻道,它会从寻道位置开始下载,一直到最后。

Youtube不是这样工作的(至少在chrome上是这样)。相反,它设法控制缓冲,因此它只在暂停时缓冲一定量。它也似乎只缓冲相关的片段,所以如果你跳过它将确保不缓冲不太可能被观看的片段。

在我试图研究这是如何工作的过程中,我注意到视频src标记的值为blob:http%3a//www.youtube.com/ee625eee-2802-49b2-a13f-eb374d551d54,它将我指向blob,然后将我指向类型化数组。使用这两个资源,我可以将mp4视频加载到blob中,并在HTML5视频标记中显示它。

然而,我现在想知道的是Youtube是如何处理这些碎片的。查看网络流量,它似乎向http://r6--sn-p5q7ynee.c.youtube.com/videoplayback发送请求,后者以1.1MB的块返回二进制视频数据。同样值得注意的是,大多数HTML5视频请求的正常请求在流式传输时似乎会收到206个响应代码,而YouTube的playvideo呼叫会收到200个响应代码。

我试图尝试只加载一个字节范围(通过设置rangehttp头),但不幸的是失败了(我假设是因为视频中没有随附的视频的元数据)。

在这一点上,我一直想弄清楚Youtube是如何做到这一点的。我想出了几个点子,但没有一个是我完全接受的:

1)Youtube会在每次/videoplayback呼叫中发送自带视频和音频块。这似乎是一个相当沉重的负担在上传方面,它似乎很难将这些缝合在一起,使它看起来像是一个无礼的视频。另外,从调用$('video').Duration$('video').CurrentTime来看,video标记似乎认为它是一个完整的视频,这使我相信video标记认为它是一个单独的视频文件。最后,vidoe src标记从不更改,这使我相信它是在处理单个blob,而不是在切换blob。

2)Youtube构建了一个空的blob,按照完整的视频数组预置大小,并在下载时用片段更新blob。然后,它将确保用户没有太接近上次下载的片段(以防止用户进入blob中未下载的部分)。我看到的问题是,我看不到任何通过javascripthtml" target="_blank">动态更新blob的方法(尽管可能我只是在谷歌搜索它时遇到了麻烦)

3)Youtube下载元数据,然后开始按顺序构建blob,在下载时附加视频片段。我发现这种方法的问题是,我不明白它将如何处理后缓冲区域中的搜索。

也许我只是错过了一个摆在我面前的显而易见的答案。有人有什么想法吗?

null

null

共有1个答案

高迪
2023-03-14

当你查看GoogleChrome的AppData时,在播放一段youtube视频的同时,你会看到它在分段文件中进行缓冲。上传到youtube上的视频是分段的,这就是为什么你不能在第一次点击酒吧时精确地指出一个时间框架,如果该时间框架不在当前片段的范围内。

段数取决于视频的长度以及开始和停止播放视频的时间。

当你链接到一个视频的时间帧时,它会简单地跳过在该时间帧之前的片段的缓冲。

不幸的是,我不太了解视频播放的编码,但我希望这为您指明了正确的方向。

 类似资料:
  • 问题内容: 如何在HTML5视频上强制中止事件?我有一个叠加层,当我关闭它时,视频应该暂停播放,然后 停止缓冲 。但是,我的互联网连接仍然发疯。哦,我在Mac OS X 10.6上使用Chrome 7.0.5。 我已经尝试了几件事-没有一个起作用: (对于那些不熟悉XUI的人,x $就像jQuery的包装函数一样) 首先,调度中止HTML事件: 接下来,更改src,然后强制加载: 编辑:我的视频元

  • 问题内容: 我发现了如何使用jquery暂停和播放视频 但是我找不到静音按钮,如果没有jquery解决方案,我只需要一个onclick js解决方案就可以了。我需要尽快。 还有解决静音延迟的方法吗?我希望它在单击按钮后立即将声音静音/取消静音。 问题答案: $(“video”).prop(‘muted’, true); //mute 和 (旁注:在jQuery <1.6中使用if)

  • 问题内容: 关于YouTube API博客,他们正在试验新的 HTML5 视频播放器。 显然,要使用html5播放视频,您必须使用iframe嵌入代码: 但是,如果客户端尚未加入HTML5试用版,则即使客户端的浏览器支持HTML5视频,播放器也会自动退回到Flash播放器中。 如果用户尚未参与HTML5试用版,即使浏览器支持,如何强制HTML5视频播放? 否则,如何禁用Flash后备广告? 问题答

  • 问题内容: 当我从互联网上加载视频(10-40MB大)时,无法提供流畅的播放体验。 我的AVPlayer要么加载整个视频然后播放,要么播放1s,缓冲然后停止播放。 我尝试了无尽的库,缓冲区观察者方法和教程。似乎没有任何帮助。 问题答案: 从 iOS 10.x开始 ,您可以进行一些缓冲设置,例如,您可以决定缓冲视频需要多少秒:

  • 我已经使用Explayer库在我的应用程序中播放视频。但我不能使用Exoplayer播放youtube视频链接。 我得到以下例外情况: ExoplayerImplinternal:源错误。unrecognizedInputFormatException:MatroskaExtractor、FragmentedMp4Extractor、Mp4Extractor、Mp3Extractor、AdtsEx

  • 有人可以帮助使用这个代码来播放嵌入网站的youtube视频吗?我试过各种方法,包括硬件加速=True。 webview显示了youtube页面和缩略图,但点击它们时什么也不会发生。 在某些硬件加速的设备上,它只播放声音,但不播放视频。谢谢大家!