如果斑点的网址是不可改变的,怎么媒体来源扩展API使用它们可以串流影片?

问题描述 投票:2回答:2

让我们先从一个例子:

  1. 您访问youtube.com,它使用媒体来源扩展(MSE)与HTML5的某些设备。
  2. MSE注入用斑点URL的<video>标签。它看起来是这样的:斑点:https://www.youtube.com/blahblahblah
  3. 纵观流整个视频,您的浏览器使得多个网络调用下载视频的各种块,然后将它们附加到MSE的SourceBuffer
  4. 因此,梅达源对象作为一个整体在整个视频流更新
  5. 但是,最初被附接至<video>元素,这是假设代表媒体源对象团块URL,保持恒定。

对我来说,这似乎并没有太大的意义。斑点的网址是假设表示不会改变一成不变的数据块。但好像MSE能够让他们代表的内存缓冲区可变。

如何引擎盖下工作的呢?如果我们还想让斑点的URL表示内存一些可变缓冲区,我们如何才能做到这一点自己的JavaScript?

javascript html5 browser media-source
2个回答
0
投票

你要明白,BlobURIs不代表任何数据。他们只是链接,指向内存中的一些资源,就像串https://stackoverflow.com/questions/54613972不包含任何的你正在阅读本身,它只是指向一个服务器指令,然后将生成的页面。

他们的链接,可以说是不可改变的,一旦你产生使用URL.createObjectURL(target)它,你不能改变它的target,就像如果你使用的const关键字。

就拿现在const foo = {}可以foo不能设置为比此对象别的东西。但是,这是由foo地址所指向的对象仍然是可变的。 foo.bar = 'baz'仍然可以完成。

const foo = {};
try{
  foo = 'fails';
}
catch(e) {
  console.error(e);
}
foo.mutable = true;

console.log(foo);

那么对于blobURIs是一样的。该blobURI指向一个targe对象,这个环节不能改变,但target仍然是可变的。这是MediaSource的对象,但其他人也如此。

如果你还记得,几年前,我们仍然能够使用blobURIs为MediaStreams(是个坏主意),这是同样的过程中,blobURI被指向MediaStream对象,在未可变的方式,但媒体 - 数据是在恒定突变(一个流)。

即使对于文件,可以很好的有一个blobURI指向您的硬盘驱动器上的文件,这不会从你的硬盘中取出阻止你,即使blobURI现在指向无处不再。

与此方面的一个特定的情况下是BLOB的情况下,从存储器中的数据生成的(即不只是一个指向磁盘上的文件)。这里由一滴保存的数据是不变的,所以在这种情况下,确实blobURI指向对象,它保持不变的数据。

而对于你要求有一个blobURI指向存储在内存中的一些数据,但仍然可以修改此数据,这个能不能做到? 这是因为这种情况意味着您在使用内存数据的Blob对象,再次做在不可改变的状态保存数据创建了blobURI。


1
投票

用于qazxsw POI的POI qazxsw是一种特殊情况。 qazxsw POI是一个特例。

本的观念,

斑点的网址是假设表示不会改变一成不变的数据块。

不一定是真实的。考虑包含,例如HTML和JavaScript Blob URL。进一步的数据可以从原始MediaSource,包括附加MediaSources产生。

© www.soinside.com 2019 - 2024. All rights reserved.