MSE播放fragmented mp4 问题记录

news/2024/11/9 9:56:51/

一、在使用MSE 播放视频的时候发现firfox能播放,chrome 不能播放

原因:两边要求的fragmented mp4的格式要求不一样 , 参照Transcoding assets for Media Source Extensions - Web APIs | MDN

用ffmpeg 转成 对应的格式

 firefox
ffmpeg -i mp4-264.mp4 -movflags frag_keyframe+empty_moov fmp4-264.mp4
 chrome 
ffmpeg -i mp4-264.mp4 -movflags frag_keyframe+empty_moov+default_base_moof  fmp4-264-chrome.mp4

二、 如何知道文件什么格式

可以通过http://nickdesaulniers.github.io/mp4info/ 来查看文件

通过这个工具可以确认格式是不是fragmented. 也可以得到MIMETYPE

 

 以下是示例代码

<html>
<head></head>
<body>
<button type="button" onclick="play()">play</button>
<video width="100%" height="100%" muted="true" autoplay="true"></video><script>
var video = document.querySelector('video');
var browserType = 0;if (navigator.userAgent.toLowerCase().indexOf('firefox') !== -1){browserType = 1;}//https://developer.mozilla.org/en-US/docs/Web/API/Media_Source_Extensions_API/Transcoding_assets_for_MSE
//## firefox 用的fragment mp4格式 
//ffmpeg -i mp4-264.mp4 -movflags frag_keyframe+empty_moov fmp4-264.mp4
//## chrome 用的fragment mp4格式
//ffmpeg -i mp4-264.mp4 -movflags frag_keyframe+empty_moov+default_base_moof  fmp4-264-chrome.mp4var assetURL = 'fmp4-264-chrome.mp4';
if (browserType == 1) {assetURL = 'fmp4-264.mp4';
}var mimeCodec = 'video/mp4; codecs="avc1.64001f, mp4a.40.2"';
function play() {
if ('MediaSource' in window && MediaSource.isTypeSupported(mimeCodec)) {var mediaSource = new MediaSource();console.log(mediaSource.readyState); // closedvideo.src = URL.createObjectURL(mediaSource);mediaSource.addEventListener('sourceopen', sourceOpen);
} else {console.error('Unsupported MIME type or codec: ', mimeCodec);
}
}function sourceOpen (_) {console.log("sourceOpen", this.readyState); // openvar mediaSource = this;var sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);fetchAB(assetURL, function (buf) {console.log("buffer")sourceBuffer.addEventListener('error', function (_) {//mediaSource.endOfStream();console.error("error ",mediaSource.readyState); // ended});sourceBuffer.addEventListener('updateend', function (_) {if (browserType === 1) { // firefoxmediaSource.endOfStream();video.play();}console.log(mediaSource.readyState); // ended});sourceBuffer.appendBuffer(buf);});
}function fetchAB (url, cb) {console.log(url);var xhr = new XMLHttpRequest;xhr.open('get', url);xhr.responseType = 'arraybuffer';xhr.onload = function () {let res = xhr.response;console.log("onload", res.byteLength)cb(xhr.response);};xhr.send();
}
</script></body>
</html>


http://www.ppmy.cn/news/275998.html

相关文章

前端-JavaScript异步编程async函数,await

了解async和await之前得先明白什么是同步函数&#xff0c;什么是异步函数。 异步 一个任务连续的执行就叫做同步。如果将任务为分两步执行&#xff0c;执行完第一步&#xff0c;转而执行其它任务&#xff0c;等做好了准备&#xff0c;再回过头执行第二步&#xff0c;这种不连…

IDEA代码提示设置

1. 打开File -> setting -> Editor -> Live Templates 2. 点击中间框框中的右侧""号,选择 Template Group, 命名为MyGroup(随便起名字) 3. 选中 MyGroup 点击右侧""号,选择Live Template Abbreviation 快捷提示 Description 描述 Template tex…

哪个计算机无法做到双屏显示,笔记本电脑怎么实现双屏显示不同的内容

笔记本电脑怎么实现双屏显示不同的内容 2018-09-16 看到网上许多的教材&#xff0c;自己实验过几次&#xff0c;但都没有成功&#xff0c;今日再一次实验&#xff0c;仔细分析&#xff0c;认真摆弄&#xff0c;终于成功了&#xff0c;现将结果告诉大家&#xff0c;希望你少走弯…

双屏显示html vga,官方数据:一台计算机连接到两台显示器,双屏显示(VGA,HDMI)指南...

一台计算机连接两台显示器&#xff0c;双屏显示介绍了双屏显示的原始要求。具有一台显示器的计算机应该是最常见的组合。我们的日常工作和娱乐基本上就是这种结合。但是通过这种用法&#xff0c;当您打开多个窗口时&#xff0c;一个显示器会变得非常拥挤&#xff0c;尤其是在执…

winform 自定义控件属性在属性面板中显示的问题

我们做了自定义控件&#xff0c;在工具箱里拖出来的时候&#xff0c;想要直接在属性面板中直接编辑控件的自定义属性 我们可以用如下标签 代码 <!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->[Browsable(tru…

layui 卡片式列表_笔记-layui选项卡

/*** 注意:选项卡 依赖 element 模块,否则无法进行功能性操作** 相关样式* layui-tab 代表一个选项卡* |-layui-tab-brief 代表简介风格的选项卡* |-layui-tab-card 代表卡片风格的选项卡* |- layui-tab-title 用于包裹选项卡的导航列表* |— layui-this 设置默认选中的导航按…

python 评分卡_评分卡原理及Python实现

信用风险计量模型可以包括跟个人信用评级&#xff0c;企业信用评级和国家信用评级。人信用评级有一系列评级模型组成&#xff0c;常见是A卡&#xff08;申请评分卡&#xff09;、B卡&#xff08;行为模型&#xff09;、C卡&#xff08;催收模型&#xff09;和F卡&#xff08;反…

android控件属性(中文)

1、LinearLayout(线性布局)&#xff1a; 可以分为水平线性&#xff1a;android:orientation " horizontal " 和垂直线性&#xff1a;android:orientation "vertical" 2、RealtiveLayout&#xff08;相对布局&#xff09;&#xff1a; &#xff08;1&…