You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular14中如何播放Blob格式的avi、mov视频?

Angular中AVI/MOV格式Blob视频无法播放的解决方案

核心原因

Chrome对AVI、MOV这类容器格式的支持取决于内部编码方式,原生仅支持H.264、VP8/VP9等视频编码,以及AAC、MP3等音频编码。如果你的AVI/MOV文件使用了MPEG-1、ProRes等非支持编码,直接通过Blob URL加载原生<video>标签会失败。

解决方案1:用FFmpeg.wasm转码为Chrome兼容格式

通过前端转码将视频转为MP4(H.264+AAC编码),这是最可靠的解决方式:

  1. 安装依赖:
npm install @ffmpeg/ffmpeg @ffmpeg/core
  1. 修改组件代码:
import { Component } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { FFmpeg } from '@ffmpeg/ffmpeg';
import { fetchFile } from '@ffmpeg/util';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html'
})
export class AppComponent {
  prev_url: any;
  private ffmpeg = new FFmpeg();

  constructor(private sanitizer: DomSanitizer) {}

  async onSelectedFile(ev: Event) {
    const file = (ev.target as HTMLInputElement).files?.[0];
    if (!file) return;

    // 初始化FFmpeg
    if (!this.ffmpeg.isLoaded()) {
      await this.ffmpeg.load();
    }

    // 将文件写入FFmpeg内存
    const fileExt = file.name.split('.').pop();
    await this.ffmpeg.writeFile(`input.${fileExt}`, await fetchFile(file));

    // 转码为MP4(H.264视频+AAC音频)
    await this.ffmpeg.exec([
      '-i', `input.${fileExt}`,
      '-c:v', 'libx264', '-crf', '23',
      '-c:a', 'aac',
      'output.mp4'
    ]);

    // 读取转码后的文件并生成Blob URL
    const outputData = await this.ffmpeg.readFile('output.mp4');
    const blob = new Blob([outputData], { type: 'video/mp4' });
    const url = URL.createObjectURL(blob);
    this.prev_url = this.sanitizer.bypassSecurityTrustUrl(url);
  }
}

HTML模板保持原代码即可:

<input type="file" accept="video/*" (change)="onSelectedFile($event)">

<video 
  *ngIf="prev_url" 
  [src]="prev_url" 
  style="width:300px; height:300px;" 
  controls></video>

解决方案2:检查视频编码格式

先用媒体信息工具查看AVI/MOV文件的编码细节,如果编码本身属于Chrome支持范围,可尝试以下调试步骤:

  • 检查createObjectURL生成的Blob URL是否有效,可直接在新标签页打开验证
  • 确保<video>标签的type属性正确设置(比如type="video/avi"或type="video/quicktime")

解决方案3:使用兼容性更好的播放器库

尝试Video.js这类成熟的播放器库,它对不同容器格式的兼容性优于原生标签,但本质上仍受限于浏览器的编码支持,编码不兼容时仍需转码。

内容的提问来源于stack exchange,提问作者Pavel Lobarev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 01:12:11