基于MSE实现web前端视频预加载

这篇具有很好参考价值的文章主要介绍了基于MSE实现web前端视频预加载。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

媒体源扩展 API(MSE) 提供了实现无插件且基于 Web 的流媒体的功能。使用 MSE,媒体流能够通过 创建,并且能通过使用 和 元素进行播放。

实现

正如上面所说,MSE 让我们可以通过 JS 创建媒体资源,使用起来也十分方便:

//创建了一个新的MediaSource对象。
//MediaSource对象表示媒体数据源,可以动态地将数据添加到此源中
const mediaSource = new MediaSource();


const video = document.querySelector('video');
// 与窗口中的 document 绑定
video.src = URL.createObjectURL(mediaSource);

媒体资源对象创建完毕,接下来就是喂给它视频数据(片段),代码看上去就像是:

//sourceopen事件:媒体源已经与HTML媒体元素关联并且准备好接收媒体数据时
mediaSource.addEventListener('sourceopen', () => {
  // MIME类型字符串,指定了将要添加到MediaSource对象中的媒体流格式
  const mime = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
  //创建一个新的源缓冲区用于保存即将播放的媒体数据。
  const sourceBuffer = mediaSource.addSourceBuffer(mime);

  // 视频数据
  const data = new ArrayBuffer([...]); 
  //视频内容二进制数据追加到刚才创建好的源缓冲区
  sourceBuffer.appendBuffer(data);
});

此时,视频就可以正常播放了。要想做到流式播放,只需要不停的调用 appendBuffer 喂音视频数据就行了
但不禁有疑问, ‘video/mp4; codecs=“avc1.42E01E, mp4a.40.2”’ 这段字符串什么意思?怎么来的?

这段字符串描述了视频的相关参数,如封装格式、音/视频编码格式以及其他重要信息。

详细介绍

● 前半部分的 video/mp4 表示这是 mp4 格式的视频;
● 后半部分的 codecs 描述了视频的编码信息,它是由一个或多个由 , 分隔的值组成,其中每个值又由一个或多个由 . 分割的元素组成:
○ avc1 表示视频是 AVC(即H264)编码;
○ 42E01E 由(16进制表示的)三个字节构成,描述了视频的相关信息:
■ 0x42 (AVCProfileIndication)表示视频的Profile,常见的有 Baseline/Extended/Main/High profile等;
■ 0xE0 (profile_compatibility)表示编码级别的约束条件;
■ 0x1E (AVCLevlIndication)表示H264的level,表示最大支持的分辨率、帧率、码率等;
○ mp4a 表示某种 MPEG-4 音频;
○ 40 是由MP4注册机构指定的ObjectTypeIndication(OTI),0x40 对应 Audio ISO/IEC 14496-3 (d)标准;
○ 2 表示某种音频OTI,mp4a.40.2 表示 AAC LC。

前端有什么方法直接取到视频的 MIME TYPE 呢?

对于 mp4 格式的可以使用: mp4box ,获取方式如下:

import MP4Box from 'mp4box';

export function getMimeType (buffer) {
  return new Promise<string>((resolve, reject) => 
    //创建了一个新的 MP4Box 文件对象实例。
    const mp4boxfile = MP4Box.createFile();
  	//当 mp4boxfile 实例准备好后
  	//触发 onReady 事件,并调用此处指定的回调函数
  	//回调接收到文件信息作为参数,
  	//并把其中 MIME 类型信息作为 Promise 的成功结果返回。
    mp4boxfile.onReady = (info) => resolve(info.mime);
    mp4boxfile.onError = () => reject();

    (buffer).fileStart = 0;
    mp4boxfile.appendBuffer(buffer);
  });
}

实现流程图
基于MSE实现web前端视频预加载,前端,音视频

MSE在其中扮演了buffer流的管理及桥接工作,因为MSE支持的是fmp4格式,所以对于mp4文件我们需要在加载队列之后进行一个软编解码。综上所述,实现流程如下:文章来源地址https://www.toymoban.com/news/detail-791159.html

  1. 编写加载器loader,请求 mp4 视频数据。
  2. 编写解析器将 mp4 视频数据进行流处理等 。
  3. 将解复用的视频数据转成 fmp4 格式并传递给 MediaSource。
  4. 通过createObjectURL将MediaSource与 video 进行关联,完成播放。
    5.基于MSE实现web前端视频预加载,前端,音视频

到了这里,关于基于MSE实现web前端视频预加载的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 浏览器自动播放音视频-前端实现方案

    目录 前言 浏览器自动播放策略 策略详情: 实现方案  方案1: 互动后播放 方案2: 互动后出声 总结 在开发中可能有遇到这样的需求,当用户打开页面后,需要自动播放视频或音频,按理说那就打开页面时play()一下不就搞定了吗,但实际情况很明显不是,不然也没得这篇文

    2024年02月04日
    浏览(58)
  • 【声网】实现web端与uniapp微信小程序端音视频互动

    利用声网实现音视频互动 注册声网账号 进入Console 成功登录控制台后,按照以下步骤创建一个声网项目: 展开控制台左上角下拉框,点击 创建项目 按钮。 在弹出的对话框内,依次选择 项目类型 ,输入 项目名称 ,选择 场景标签 和 鉴权机制 。其中鉴权机制推荐选择 安全

    2024年04月27日
    浏览(54)
  • FFMpeg-3、基于QT实现音视频播放显示

    1、音视频播放的基础知识 内容来自雷神博客 1、在Windows平台下的视频播放技术主要有以下三种:GDI,Direct3D和OpenGL;音频播放技术主要是DirectSound。 SDL本身并不具有播放显示的功能,它只是封装了底层播放显示的代码 记录三种视频显示技术:GDI,Direct3D,OpenGL。其中Direct3D包

    2024年02月03日
    浏览(62)
  • 《保姆级教程》基于Agora SDK实现音视频通话及屏幕共享

    😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想当开发的测试,不是一个好测试✌️。 如果感觉博主的文章还不错的话,还请点赞、收藏哦

    2024年02月12日
    浏览(45)
  • 【复】基于 WebRTC 的音视频在线监考模块的设计与实现(下)

    在上一篇博文 【复】基于 WebRTC 的音视频在线监考模块的设计与实现(上) 中,主要介绍了关于 WebRTC 的基本理论,那么这篇文章我们将进入实战阶段,通过 WebRTC 框架,去实现 P2P 通话,以及延伸到一对多的音视频通话,从而实现在线监考功能;   在开发 Web 时,WebRTC 标准

    2024年02月01日
    浏览(59)
  • 基于webrtc的音视频通话,实现相机流识别人脸的功能

    这几天研究了一下webRTC的基础能力,在此基础之上能实现的视频通话,互动等更多实用功能。项目中使用的是阿里的rtc,我研究的是声网的是否符合功能,后续会总结和记录一下应用到的几个功能实现方法。 今天要记录的功能是项目流识别人脸的功能,其实类似功能很常见了

    2024年04月28日
    浏览(50)
  • Unity Metaverse(八)、RTC Engine 基于Agora声网SDK实现音视频通话

    本文介绍如何在Unity中接入声网SDK,它可以应用的场景有许多,例如直播、电商、游戏、社交等,音视频通话是其实时互动的基础能力。 如下图所示,可以在官网中选择Unity SDK进行下载,也可以到 Unity Asset Store 资源商店中搜索 Agora SDK 进行下载导入。 在官网中前往 Console 控制

    2024年02月09日
    浏览(55)
  • WebCodecs 开启 Web 音视频新篇章

    本期作者 WebCodecs 是什么 WebCodecs 是一个 Web 规范,21 年 9 月份在 Chrome 94 中实现 WebCodecs 提供访问编解码能力的接口,可精细控制音视频数据  Web 音视频 API 存在什么问题 音视频技术在 Web 平台上的应用非常广泛,已有许多 Web API  间接调用了编解码器 来实现特定功能: 视频

    2024年01月15日
    浏览(64)
  • Hololens2远程音视频通话与AR远程空间标注,基于OpenXR+MRTK3+WebRTC实现

    下面展示一些 内联代码片 。

    2024年04月10日
    浏览(59)
  • 前端基础(三十六):读取本地音视频设备并进行播放

    请求媒体输入和输出设备的列表,例如麦克风,摄像机,耳机设备等 会提示用户给予使用媒体输入的许可,媒体输入会产生一个MediaStream,里面包含了请求的媒体类型的轨道。此流可以包含一个视频轨道(来自硬件或者虚拟视频源,比如相机、视频采集设备和屏幕共享服务等

    2024年02月15日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包