416(请求的范围不满足)使用blob作为视频“src”时出现HTTP错误

时间:2017-09-13 00:14:47

标签: angular html5-video blob angular-cli http-error

我创建了一个带blob的对象url

let src = URL.createObjectURL(blob)

并将其用作我的视频src属性,但会导致此错误:

GET blob:http://localhost:4200/ab3cc5aa-19cc-41f1-a4b7-55e1fa3ce85c 416 (Requested Range Not Satisfiable)

有关如何解决这个问题的想法吗?

虽然我认为我的问题很普遍,但我使用的是角度2,所以我的代码看起来很像:

let src = this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(blob));

和模板

<video *ngFor="let videoUrl of _videos" [src]="videoUrl"></video>

另外,我使用angular-cli作为我的服务器,因为这看起来像服务器错误(?),所以知道它可能会有用。

1 个答案:

答案 0 :(得分:2)

此错误表示浏览器试图获取一系列不存在的媒体 我可以想到三种可以从媒体元素触发它的方法:

  • 使用#t=时间范围选项,超出范围值:但在这种情况下浏览器似乎只是忽略它...

    &#13;
    &#13;
    <video src="https://dl.dropboxusercontent.com/s/bch2j17v6ny4ako/movie720p.mp4#t=90000,100000" autoplay controls></video>
    &#13;
    &#13;
    &#13;

  • 删除当前正在读取的文件(或在它被完全加载之前撤消blob的blobURI):触发404而不是416

    &#13;
    &#13;
    v.onloadedmetadata = e => {
      URL.revokeObjectURL(v.src);
      v.currentTime = 300;
      };
    fetch('https://dl.dropboxusercontent.com/s/bch2j17v6ny4ako/movie720p.mp4').then(r=>r.blob()).then(b=>{
      v.src = URL.createObjectURL(b);
      })
    &#13;
    <video id="v" autoplay></video>
    &#13;
    &#13;
    &#13;

  • 错误的元数据表明媒体的持续时间大于实际情况:我还没有对其进行测试

  • 将空Blob作为媒体来源传递:可能

    &#13;
    &#13;
    v.src = URL.createObjectURL(new Blob([], {type:'video/mp4'}));
    &#13;
    <video id="v" autoplay controls></video>
    &#13;
    &#13;
    &#13;

[注意] 由于我们正在寻找网络错误,请在您的开发工具控制台打开时尝试上述代码段,无法直接在代码段中显示这些错误控制台。