【问题标题】:Can't play HTML5 Video with Blob source on iOS devices无法在 iOS 设备上播放带有 Blob 源的 HTML5 视频
【发布时间】:2022-01-02 01:17:34
【问题描述】:

我有一个 React Web 应用程序,它从服务器获取视频 URL,然后将视频作为 blob 请求并尝试在 HTML 视频标签上播放它。我这样做是因为客户端有时会遇到互联网问题,并且视频在播放时可能会卡顿,他们宁愿等待更长的时间等待视频加载然后顺利播放,而不是视频断断续续。 (我还将 blob 作为缓存保存到 IndexedDB,但这与我现在遇到的问题无关,我只是将其添加为上下文,但在我试图找出这个 iOS 问题时它已被禁用)

我有一个下载视频的函数,然后返回 Blob 和从该 blob 对象创建的 URL。

async function downloadVideo(videoUrl) {
  return new Promise(function(resolve, reject) {
    var req = new XMLHttpRequest();
    req.open('GET', videoUrl, true);
    req.responseType = 'blob';

    req.onload = function() {
      // Onload is triggered even on 404
      // so we need to check the status code
      if (this.status === 200) {
        var videoBlob = new Blob([this.response], { type: 'video/mp4' });
        console.log('Video blob?', videoBlob);
        var vid = { objBlob: videoBlob, vidURL: URL.createObjectURL(videoBlob) };
        // Video is now downloaded and converted into ObjectURL
        resolve(vid);
      } else {
        reject('Video download failed with status ', this.status);
      }
    };
    req.onerror = function() {
      reject('Unable to Download Video');
    };

    req.send();
  });
} 

然后我有了播放 blob 视频的元素:

<video
    muted={true}
    autoPlay={true}
    loop={false}
    onError={err => {
      alert('Video load error. ' + err.target.error.iosMessage);
    }}
    src={downloadedVideo.url}
/>

downloadedVideo.url 是在 DownloadVideo 函数上创建的 blob 对象 URL

所有这些都可以在桌面 (Linux) 和 Android 上正常运行,但视频无法从 iOS 设备上的 Blob 播放。我试过 Safari、Chrome 和 Firefox,但问题是一样的。 在 iOS 上,我可以获取视频 Blob 并从中创建一个 URL,但是当我将其作为 src 传递时它不起作用,我只能从错误(MediaError 对象)中得到代码 4,但消息是未定义。

如果我将原始视频 URL 作为 src 而不是 blob,则它可以在所有设备上运行,但是我无法缓存视频,并且必须删除此功能。

我已经尝试了几个视频,并确保编码与 iOS 兼容。

我找不到任何说明 iOS 与视频的 Blob URL 不兼容的内容,所以这应该可以,但我不知道为什么不兼容。

【问题讨论】:

    标签: javascript ios reactjs video blob


    【解决方案1】:

    我有类似的问题,但仅在 iOS 15.x 上(直到 iOS 14.5 都可以正常工作)

    我认为这是 iOS 15.x 上的一个错误 - 另请参阅 https://developer.apple.com/forums/thread/693447

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2021-10-08
      • 2018-09-13
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      • 2014-09-19
      相关资源
      最近更新 更多