我使用 Uint8Arrays 向 mediaSource sourceBuffer 提供数据,没有错误,但视频无法播放。为什么?

问题描述 投票:0回答:1

我有这个网页(参见代码),脚本运行没有错误,块在控制台中显示为 Uint8Arrays,但视频不显示。服务器端有 13 个 .mp4 视频。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Video</title>
        <!--<link rel="stylesheet" href="styles.css">-->
    </head>
    <body>
        <div class="content">
            <h1>My Video</h1>
            <video id="video" width="640" height="480" type="video/mp4" autoplay muted decoration></video>
      <script>
        'use strict';

        var video = document.querySelector('video');
        var i = 0;
        var url = "0.mp4";

        if (!window.MediaSource) {
            alert('The MediaSource API is not available on this platform');
        }

        var mediaSource = new MediaSource();
        var sourceBuffer;

        video.src = window.URL.createObjectURL(mediaSource);

        mediaSource.addEventListener('sourceopen', function() {
          sourceBuffer = mediaSource.addSourceBuffer('video/mp4'); // ; codecs="h264"
          get(url, MyCallback);
        });

        function MyCallback(chunk)
        {
          console.log(chunk);
          sourceBuffer.appendBuffer(chunk);
          if (video.paused) {
            video.play(); // Start playing after 1st chunk is appended.
          }
          i++;
          if(i===14)
            i = 0;
            url = i.toString()+".mp4";
            get(url, MyCallback);
          }

          function get(url, callback) {
            var xhr = new XMLHttpRequest();
            xhr.open('GET', url, true);
            xhr.responseType = 'arraybuffer';
            xhr.send();

            xhr.onload = function() {
            if (xhr.status !== 200) {
              alert('Unexpected status code ' + xhr.status + ' for ' + url);
              return false;
            }
            callback(new Uint8Array(xhr.response));
          };
        }

      </script>
    </div>
  </body>
</html>

我确实尝试设置视频 scr= 其中一个 mp4 并且它播放正确,只是说 mp4 格式似乎适合 Firefox。

javascript video video-streaming
1个回答
0
投票

确保您的文件和代码满足以下条件。

(1) 您的 MP4 视频文件需要保存为 碎片 MP4 格式(又名 ISO-BMFF)。
一个片段可以是 N 帧、N 秒、N 分钟或任何您想要的长度。
使用 FFmpeg、Handbrake 或 Bento 等工具从文件中生成碎片 MP4。

(2) 对 MP4 视频文件使用右侧的

codec
。请参阅我的其他答案以获取有关它的建议。

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