aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/api/mediasource/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/zh-cn/web/api/mediasource/index.html')
-rw-r--r--files/zh-cn/web/api/mediasource/index.html128
1 files changed, 128 insertions, 0 deletions
diff --git a/files/zh-cn/web/api/mediasource/index.html b/files/zh-cn/web/api/mediasource/index.html
new file mode 100644
index 0000000000..bd15ef934d
--- /dev/null
+++ b/files/zh-cn/web/api/mediasource/index.html
@@ -0,0 +1,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 &amp;&amp; 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>