乐趣区

关于mse:音视频MSE

MSE

MSE 全称是媒体源扩大 API(Media Source Extensions API), 提供了实现无插件且基于 Web 的流媒体的性能。应用 MSE,媒体串流可能通过 JavaScript 创立,并且能通过应用 <audio><video> 元素进行播放。

MSE 使咱们能够把通常的单个媒体文件的 src 值替换成援用 MediaSource对象(一个蕴含行将播放的媒体文件的筹备状态等信息的容器),以及援用多个 SourceBuffer 对象(代表多个组成整个串流的不同媒体块)的元素。MSE 让咱们可能依据内容获取的大小和频率,或是内存占用详情(例如什么时候缓存被回收),进行更加精准地管制。它是基于它可扩大的 API 建设自适应比特率流客户端(例如 DASH 或 HLS 的客户端)的根底。

浏览器反对兼容 MSE 的各种媒体容器,但采纳 H.264 视频编码、AAC 音频编码和 MP4 容器的格局是十分常见的,且肯定兼容。

如果没有准确的管制工夫、媒体品质和内存开释等需要,应用 <video><source> 是一个更加简略但够用的计划。

浏览器是否反对 MSE


if('MediaSource' in window) {//}

MIME 格局是否被客户端录制

var canRecord = MediaRecorder.isTypeSupported(mimeType)

编码格局是受浏览器限度的:

WEB API

MediaSource

new MediaSource()

属性

  • activeSourceBuffers
var myActiveSourceBuffers = mediaSource.activeSourceBuffers;
  • duration

用来获取或者设置以后媒体展现的时长。

mediaSource.duration = 5.5; // 5.5 seconds

var myDuration = mediaSource.duration;
  • readyState
  • closed: 以后源并未附着到一个 media 元素上。
  • open: 以后源已附着到一个 media 元素并筹备好接管 SourceBuffer 对象。
  • ended: 以后源已附着到一个 media 元素,但流已被 MediaSource.endOfStream()完结。

办法

  • MediaSource.addSourceBuffer()

MediaSourceaddSourceBuffer() 办法会依据给定的 MIME 类型创立一个新的 SourceBuffer 对象,而后会将它追加到 MediaSourceSourceBuffers 列表中。


const mimeType = 'video/mp4;codecs=avc1.420028'; // avc1.42c01f avc1.42801e avc1.640028 avc1.420028
var sourceBuffer = mediaSource.addSourceBuffer(mimeType);
  • MediaSource.endOfStream()

MediaSource 接口的 endOfStream() 办法意味着流的完结。

个别只有几种情況会用到:

  • 产生谬误时
  • 重置视频
  • 完结流传输
  • MediaSource.setLiveSeekableRange()

设置用户能够在媒体元素中查找的范畴。(不罕用,理解即可)

感觉要看下 jsmpeg 源码

参考文章

  • H5 直播系列二 MSE(Media Source Extensions)
  • long.js
  • webrtc
  • 反对的所有 codec
  • WebSocket+MSE——HTML5 直播技术解析
  • html5 MSE
  • Nplayer
退出移动版