1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
---
title: MediaSource
slug: Web/API/MediaSource
translation_of: Web/API/MediaSource
---
<p>{{APIRef("Media Source Extensions")}}{{SeeCompatTable}}</p>
<p><strong><code>MediaSource</code></strong>是<a href="/en-US/docs/Web/API/Media_Source_Extensions_API">Media Source Extensions API</a> 表示媒体资源{{domxref("HTMLMediaElement")}}对象的接口。<code>MediaSource</code> 对象可以附着在{{domxref("HTMLMediaElement")}}在客户端进行播放。</p>
<h2 id="构造函数">构造函数</h2>
<dl>
<dt>{{domxref("MediaSource.MediaSource", "MediaSource()")}}</dt>
<dd>构造并且返回一个新的<code>MediaSource</code>的空对象(with no associated source buffers)。</dd>
</dl>
<h2 id="属性">属性</h2>
<dl>
<dt>{{domxref("MediaSource.sourceBuffers")}} {{readonlyInline}}</dt>
<dd>返回一个{{domxref("SourceBufferList")}} 对象,包含了这个<code>MediaSource的</code>{{domxref("SourceBuffer")}}的对象列表。</dd>
<dt>{{domxref("MediaSource.activeSourceBuffers")}} {{readonlyInline}}</dt>
<dd>返回一个 {{domxref("SourceBufferList")}} 对象,包含了这个{{domxref("MediaSource.sourceBuffers")}}中的{{domxref("SourceBuffer")}} 子集的对象—即提供当前被选中的视频轨 (video track),启用的音频轨 (audio tracks) 以及显示/隐藏的字幕轨 (text tracks) 的对象列表。</dd>
<dt> </dt>
<dt>{{domxref("MediaSource.readyState")}} {{readonlyInline}}</dt>
<dd><code><font face="Open Sans, arial, x-locale-body, sans-serif">返回一个包含当前</font>MediaSource</code>状态的集合,即使它当前没有附着到一个media元素(<code>closed</code>),或者已附着并准备接收{{domxref("SourceBuffer")}} 对象 (<code>open</code>),亦或者已附着但这个流已被{{domxref("MediaSource.endOfStream()")}}关闭(<code>ended</code>.)</dd>
<dt>{{domxref("MediaSource.duration")}}</dt>
<dd>获取和设置当前正在推流媒体的持续时间。</dd>
</dl>
<dl>
</dl>
<dl>
</dl>
<h2 id="方法">方法</h2>
<p><em>从父接口{{domxref("EventTarget")}}上继承而来。</em></p>
<dl>
<dt>{{domxref("MediaSource.addSourceBuffer()")}}</dt>
<dd>创建一个带有给定MIME类型的新的 {{domxref("SourceBuffer")}} 并添加到 <code>MediaSource 的 </code>{{domxref("SourceBuffers")}} 列表。</dd>
<dt>{{domxref("MediaSource.removeSourceBuffer()")}}</dt>
<dd>删除指定的{{domxref("SourceBuffer")}} 从这个<code>MediaSource</code>对象中的 {{domxref("SourceBuffers")}}列表。</dd>
<dt>{{domxref("MediaSource.endOfStream()")}}</dt>
<dd>表示流的结束。</dd>
<dt>
<h2 id="静态方法">静态方法</h2>
</dt>
<dt>{{domxref("MediaSource.isTypeSupported()")}}</dt>
<dd>返回一个 {{domxref("Boolean")}} 值表明给定的MIME类型是否被当前的浏览器支持——这意味着是否可以成功的创建这个MIME类型的{{domxref("SourceBuffer")}} 对象。</dd>
</dl>
<h2 id="示例">示例</h2>
<p>这个例子尽可能快地逐块加载视频,并在加载好后立刻播放。 这个示例是由Nick Desaulniers 编写,你可以<a href="http://nickdesaulniers.github.io/netfix/demo/bufferAll.html">点这里查看</a> (你也可以<a href="https://github.com/nickdesaulniers/netfix/blob/gh-pages/demo/bufferAll.html">点这里下载</a>来进一步研究)。</p>
<pre class="brush: js">var video = document.querySelector('video');
var assetURL = 'frag_bunny.mp4';
// Need to be specific for Blink regarding codecs
// ./mp4info frag_bunny.mp4 | grep Codec
var mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
if ('MediaSource' in window && MediaSource.isTypeSupported(mimeCodec)) {
var mediaSource = new MediaSource();
//console.log(mediaSource.readyState); // closed
video.src = URL.createObjectURL(mediaSource);
mediaSource.addEventListener('sourceopen', sourceOpen);
} else {
console.error('Unsupported MIME type or codec: ', mimeCodec);
}
function sourceOpen (_) {
//console.log(this.readyState); // open
var mediaSource = this;
var sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);
fetchAB(assetURL, function (buf) {
sourceBuffer.addEventListener('updateend', function (_) {
mediaSource.endOfStream();
video.play();
//console.log(mediaSource.readyState); // ended
});
sourceBuffer.appendBuffer(buf);
});
};
function fetchAB (url, cb) {
console.log(url);
var xhr = new XMLHttpRequest;
xhr.open('get', url);
xhr.responseType = 'arraybuffer';
xhr.onload = function () {
cb(xhr.response);
};
xhr.send();
};</pre>
<h2 id="说明">说明</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Specification</th>
<th scope="col">Status</th>
<th scope="col">Comment</th>
</tr>
<tr>
<td>{{SpecName('Media Source Extensions', '#mediasource', 'MediaSource')}}</td>
<td>{{Spec2('Media Source Extensions')}}</td>
<td>Initial definition.</td>
</tr>
</tbody>
</table>
<h2 id="浏览器支持情况">浏览器支持情况</h2>
<div>
<p>{{Compat("api.MediaSource")}}</p>
</div>
<h2 id="See_also">See also</h2>
<ul>
<li>{{domxref("SourceBuffer")}}</li>
<li>{{domxref("SourceBufferList")}}</li>
</ul>
|