如何判断视\音频文件的编码格式、chrome不能播放MP4

THIS
背景:在做chrome上传的时候发现在同一个MP4格式在浏览器打开有的不能播放

调研: 经过调研发现是浏览器的兼容问题 不同的浏览器的播放的MP4格式编码是不一样的,如图

image.png


解决:如果想要在浏览器播放的话 需要对不同编码的格式文件进行拦截,那么怎么获取文件的编码格式呢?


采用:mp4box.js 通过官网配置的onReady方法获取文件的详细信息,如图:

var MP4Box = require('mp4box'); // Or whatever import method you prefer.
var mp4boxfile = MP4Box.createFile();
mp4boxfile.onError = function(e) {};
mp4boxfile.onReady = function(info) {};
mp4boxfile.appendBuffer(data);
mp4boxfile.appendBuffer(data);
mp4boxfile.appendBuffer(data);

需要注意的是MP4box接受文件的是一个Buffer对象,详细想看:

/**
 *
 * @hack 检测部分mp4视频的编码格式、用于检测chrome浏览器不能播放的问题
 *
 * 参考链接:
 *  1、<http://www.soolco.com/post/83098_1_1.html>
 *  2、<https://gpac.github.io/mp4box.js/>
 *
 * */

export const checkVideoCode = (file: any, callback: Function) => {
  const mp4boxFile = MP4Box.createFile();

  const reader = new FileReader();
  reader.readAsArrayBuffer(file);

  reader.onload = function(e: any) {
    const arrayBuffer = e.target.result;
    arrayBuffer.fileStart = 0;
    mp4boxFile.appendBuffer(arrayBuffer);
  };

  mp4boxFile.onReady = function(info: any) {
    callback(info);
  };
};

既然获取了当前的视频的文件编码那么怎么知道当前是否可以播放,我放两张图比较一哈:

image.png

这样看起来还是有些差别的,那么编码格式不同的 mime也是不同的,这样就可以判断当前字段是否有avc字段,如果有的话,那么当前的格式编码 chrome是不支持的哦

image.png
image.png


参考资料:

阅读 940

杨老头的小书桌
平常记录项目问题的坑坑洼洼

多读书、多看报、少吃零食、多睡觉

716 声望
9 粉丝
0 条评论
你知道吗?

多读书、多看报、少吃零食、多睡觉

716 声望
9 粉丝
文章目录
宣传栏