MSE播放fragmented mp4 问题记录

news2024/11/16 7:24:23

一、在使用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.mp4

var 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); // closed
  video.src = URL.createObjectURL(mediaSource);
  mediaSource.addEventListener('sourceopen', sourceOpen);
} else {
  console.error('Unsupported MIME type or codec: ', mimeCodec);
}
}


function sourceOpen (_) {
  console.log("sourceOpen", this.readyState); // open
  var 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) { // firefox
	  mediaSource.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.coloradmin.cn/o/623620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DatenLord开源产品技术分享 | Xline源码解读 No.2

传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord推出开源分布式KV存储Xline&#xff0c;针对多数据中心场景&#xff0c;可以实现数据的高性能跨云、跨数据中心共享访问&#xff0c;并且保证数据的一致性。 本期源码解读将聚焦Xline的Lease机…

技术赋能-混流编排功能,助力京东618直播重保 | 京东云技术团队

每每到618、双11这样的大型活动的时候&#xff0c;每天都有几个重要的大v或者品牌直播需要保障。 以往的重点场次监播方式是这么造的&#xff1a; 对每路直播的源流、各档转码流分别起一个ffplay播放窗口&#xff0c;再手动调整尺寸在显示器桌面进行布局&#xff0c;排到一屏…

Vue使用prerender-spa-plugin做预渲染,用于SEO优化相关内容

原因:像vue、react、angular开发的都是spa应用,他只有一个页面index,他们都是内加载,动态加载切换路由的,所以你再多页面百度蜘蛛只能爬到首页 1.解决方案 (1)vue.js官网提供的 SSR(服务端渲染) 这种方案呢学习成本高,对于刚开始的新手来说可能有点难度,基本还得重…

WTN6040-8S语音播报芯片在抽油烟机上的应用- 提升厨房智能化体验

在当今快节奏的生活中&#xff0c;智能家居技术的发展不仅为我们的生活带来了便利&#xff0c;更为我们的家庭安全和舒适提供了全新的解决方案。作为现代厨房的关键设备&#xff0c;油烟机在净化空气、排除异味和保护家庭健康方面起着重要的作用。而加入WTN6040-8S语音播报芯片…

如何配置IP地址

一.自动获取IP 1.dhclient 2.ifconfig 通过这个命令可以查看系统有几块网卡和网卡的IP。 如果您的Linux有多块网卡&#xff0c;那么在Linux中它会显示成eth1, eth2 依此类推 二.手动配置IP 如果您的虚拟机不能自动获取IP&#xff0c;那么只能手动配置&#xff0c;配置方法为&am…

项目管理用什么工具?甘特图给你答案

在项目管理中&#xff0c;项目的实施需要制定一个完善的项目计划。然而&#xff0c;在实际的项目管理工作中&#xff0c;计划变化快&#xff0c;总会产生各种问题和突发状况&#xff0c;导致管理问题层出不穷。 例如&#xff0c;项目团队人数多&#xff0c;团队协作混乱&…

SOP电子作业指导书系统SaaS部署及应用分析

随着互联网技术的不断发展&#xff0c;越来越多的企业开始采用SaaS&#xff08;Software as a Service&#xff09;模式来部署和应用各种软件系统。其中&#xff0c;SOP电子作业指导书系统是一种非常实用的工具&#xff0c;可以帮助企业有效地管理和指导员工的工作。 SOP电子作…

python实现简单的多机并行调度

场景说明 我们有10个任务需要主动发送到3台机器上并行执行&#xff0c;某一台机器执行完成再为此机器分配下一个任务 方案一&#xff1a;消息队列&#xff08;被动调度&#xff09; 此方案可以使用celeryredis实现简单的生产者消费者模型&#xff0c;步骤如下&#xff1a; …

关于单片机的时钟浅谈及STM32F103/F030单片机的内外时钟切换问题

绪论 本文主要讲解单片机的时钟系统的相关知识&#xff0c;并进行超频测试&#xff0c;同时介绍如何在STM32F0单片机上进行内外时钟的切换&#xff0c;在不使用外部晶振或者外部晶振不启动时自动切换内部时钟的方法。 一、杂谈 问题来源于群里的一次问答&#xff1a; 诚然&…

Flatpickr教程:使用JavaScript快速创建一个自定义日期选择器

部分数据来源&#xff1a;ChatGPT 引言 如果您是一个网站开发者&#xff0c;想为自己的网站添加方便易用的日期选择对话框&#xff0c;那么Flatpickr日期选择对话框可能正好符合您的需要。在这篇文章中&#xff0c;我们将详细介绍如何使用Flatpickr日期选择对话框&#xff0c…

容器集群管理工具 Docker Swarm

前言 《了解和使用Docker》中有提到容器编排工具 docker compose &#xff0c;不过只限于单机。如果现在需要搭建一个集群环境&#xff0c;提供了10台服务器用来部署应用以及其依赖的组件&#xff0c;比如5个 Tomcat 应用容器、3个Redis、5个 Mysql、3个 Nginx &#xff0c;你…

Share Creators Ada Liu 与 VNG Christopher. Liu C出席 2023 全球游戏产业峰会

夏日将至&#xff0c;第二十届中国国际数码互动娱乐展览会&#xff08;ChinaJoy&#xff09;将于 2023 年 7 月 28 日至 7 月 31 日在上海新国际博览中心隆重举办。 本届 ChinaJoy 将带来多场重磅主题高端会议&#xff0c;其中全球游戏产业峰会将于 7 月 29 日在上海浦东嘉里大…

网安大佬常用的10大工具

从事网络安全工作&#xff0c;手上自然离不开一些重要的网络安全工具。今天&#xff0c;分享10大网络安全工具。 一、Kali Linux Kali 是一个基于 Debian 的 Linux 发行版。它的目标就是为了简单&#xff1a;在一个实用的工具包里尽可能多的包含渗透和审计工具。Kali 实现了这…

互联网大厂面试必备——1685页《Java 面试突击核心手册,二十大专题,覆盖2000道 Java后端核心面试解析

前言 不论是校招还是社招都避免不了各种面试。笔试&#xff0c;如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的&#xff0c;我这个有章可循‘说的意思只是说应对技术面试是可以提前准备。 运筹帷幄之后&#xff0c;决胜千里之外!不打毫无准备的仗,我觉…

HikariCP:一个叫光的JDBC连接池

文章目录 简介数据库连接池C3P0DBCPBoneCP 精简的设计字节码优化ArrayList-->FastListConcurrentBag代理实现Statement CacheScheduler quantaCPU缓存行失效 优雅的实现获取连接初始化池对象连接池管理连接池扩充连接池缩容连接池关闭 ConcurrentBag 连接池参数总结参考 简介…

网络协议分析:网络性能的防御工具

作为网络管理员知道管理不断发展的 IT 环境需要付出巨大的努力。无论是对于小型还是大型企业&#xff0c;管理网络以使其可访问并使其性能有效都需要一套监控策略和工具。大多数 IT 管理员需要协议分析器来识别潜在的网络风险并帮助排除故障。与传统分析不同&#xff0c;协议分…

PPT中彩虹线-变色线是怎么画出来的?

​ 效果 上面用箭头指出的线框处,各位可以看到这种有多种颜色组成的渐变的就叫彩虹线 彩虹线是怎么设置的? 请看下面的操作步骤 此处,请单击选中你要变色的线,然后我们点击鼠标右键,在弹出的菜单中选择“设置形状格式" ​ 然后你会在PPT右边得到这样的一个界面…

脑机接口 | 面向步态神经电生理研究的非人灵长类模型与系统

近期&#xff0c;海南大学生物医学工程学院脑机芯片神经工程团队在Frontiers in Neuroscience期刊上发表了题为《面向步态&神经电生理研究的非人灵长类模型与系统》的学术论文。海南大学生物医学工程学院梁丰研副教授为第一作者&#xff0c;殷明教授为通讯作者。海南大学为…

2023年上半年软件设计师试题及答案解析

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 计算机中&#xff0c;系统总线用于 &#xff08;1&#xff09; 连接。 &#xff08;1&#xff09; A. 接口和外设 B. 运算器、控制器和寄存器 C. CPU、主存及…

经典面试题---【第一档】

1.如果你想new一个Quene&#xff0c;你有几种方式&#xff1f;他们之间的区别是什么&#xff1f; 2.Redis 是如何判断数据是否过期的呢&#xff1f; Redis 通过一个叫做过期字典&#xff08;可以看作是 hash 表&#xff09;来保存数据过期的时间。过期字典的键指向 Redis 数据…