如何生成与Media Source API一起使用的webm视频的初始化段

nvc*_*nvn 10 javascript html5 webm media-source

我正在构建一个小应用程序,它使用MediaRecoder API从网络摄像头中分割重新编码的视频,并将所有部分上传到服务器.
我看到使用Media Source API,我需要播放第一部分,然后播放任何其他部分.

根据http://www.w3.org/TR/media-source/#examples,我需要在文件开头的"初始化段".

如何在JS中生成WebM的"初始化段",以便我可以播放我选择的任何部分.那有没有lib?(我不了解WebM字节流格式)

Maz*_*zzu 1

您需要使用媒体源扩展

请参考下面的例子

<script>
  var appendID = "123";

  function onOpen(e) {
    var video = e.target;

    var headers = GetStreamHeaders();

    if (headers == null) {
      // Error fetching headers. Signal end of stream with an error.
      video.sourceEndOfStream(HTMLMediaElement.EOS_NETWORK_ERR);
    }

    video.sourceAddId(appendID, 'video/webm; codecs="vorbis,vp8"');

    // Append the stream headers (i.e. WebM Header, Info, and Tracks elements)
    video.sourceAppend(appendID, headers);

    // Append some initial media data.
    video.sourceAppend(appendID, GetNextCluster());
  }

  function onSeeking(e) {
    var video = e.target;

    // Abort current segment append.
    video.sourceAbort(appendID);

    // Notify the cluster loading code to start fetching data at the
    // new playback position.
    SeekToClusterAt(video.currentTime);

    // Append clusters from the new playback position.
    video.sourceAppend(appendID, GetNextCluster());
    video.sourceAppend(appendID, GetNextCluster());
  }

  function onProgress(e) {
    var video = e.target;

    if (video.sourceState == video.SOURCE_ENDED)
      return;

    // If we have run out of stream data, then signal end of stream.
    if (!HaveMoreClusters()) {
      video.sourceEndOfStream(HTMLMediaElement.EOS_NO_ERROR);
      return;
    }

    video.sourceAppend(appendID, GetNextCluster());
  }

  var video = document.getElementById('v');
  video.addEventListener('sourceopen', onOpen);
  video.addEventListener('seeking', onSeeking);
  video.addEventListener('progress', onProgress);
</script>


<video id="v" autoplay> </video>

<script>
  var video = document.getElementById('v');
  video.src = video.mediaSourceURL;
</script>
Run Code Online (Sandbox Code Playgroud)

  • 这甚至没有回答问题。问题是根据[WebM字节流格式](https://w3c.github.io/media-source/webm-byte-stream-format.html#webm-init-segments)生成WebM初始化段,并且你的答案不相关。 (4认同)
  • 那么如何实现“GetStreamHeaders”功能呢?请注意,我的问题是关于通过 javascript 生成标头! (3认同)