Skip to content

TIP

媒体流指的是访问设备后产生的数据流,轨道指的是 WebRTC 中的基本媒体单元。

前言

大家好,我是小鑫同学。一位从事过Android开发混合开发,现在长期从事前端开发的编程爱好者,我觉得在编程之路上最重要的是知识的分享,所谓三人行必有我师。所以我开始在社区持续输出我所了解到、学习到、工作中遇到的各种编程知识,欢迎有想法、有同感的伙伴加我fe-xiaoxin微信交流~

媒体流指的是访问设备后产生的数据流,轨道指的是 WebRTC 中的基本媒体单元。

当开始采集音频或视频设备后就会源源不断的产生媒体数据(媒体流),比如从摄像头,画布,桌面捕获到的视频流,从麦克风捕获到的音频流。只有当我们不停的接收到媒体流才能看到视频和听到音乐。

在实际应用场景中这些媒体流将由更多种数据组成,WebRTC 将其划分成了多个轨道,我们可以得到不同轨道对应的设备信息,也可以对其进行控制,如麦克风静音或网络不优秀的时候关掉视频。

媒体流与轨道相关 API:

函数名参数描述
MediaStream通过 getUserMedia 或 getDisplayMedia 接口获取媒体流
MediaStreamTrack通过 MediaStream.getVideoTracks 获取所有视频轨道通过 MediaStream.getAudioTracks 获取所有音频轨道
Video.captureStreamfps 帧率捕获 Video 对象播放的媒体流,通过传入更大的帧率得到更清晰流畅的画面,也需要更高的宽带支持
Canvas.captureStreamfps 帧率捕获 Canvas 中的媒体数据,可以动态的播放画布中的数据,同样传入更大的帧率得到的效果将更加流畅清晰

媒体流介绍:

媒体流是通过 MediaStream 接口得到后进行操作的,在一个媒体流中可以包含多个轨道,如同时支持视频和音频后得到的视频轨道和音频轨道,在前面的学习中我们将其输出显示为视频或音频元素,其实我们还可以将其发送到 RTCPeerConnection 对象,然后将其发送到远程计算机。

媒体流有多少中获取的方式呢?如何得到媒体流?

  1. 摄像头:捕获用户设备中所支持的摄像头硬件设备;
  2. 麦克风:捕获用户设备中所支持的麦克风硬件设备;
  3. 计算机屏幕,窗口:捕获用户计算机屏幕、窗口等;
  4. Canvas:捕获在 Canvas 中的内容;
  5. 视频源 Video:捕获 Video 播放中视频的内容;
  6. 远端流:使用对等连接来接收新的流。

MediaStream API:

序号属性描述
1active当 MediaStream 处于激活状态时返回 true,反之返回 false。
2ended当媒体流读取完毕触发结束事件后返回 true,反之返回 false。
3id对象的唯一标识符
4label用户代理分配的唯一标识符

通过事件来监听流处理及活动状态的变化:

序号事件描述
1onactive当 MediaStream 对象变为活动状态时触发此事件。
2onaddtrack当添加新的 MediaStreamTrack 对象时触发该事件。
3onended当流终止是触发该事件。
4oninactive当 MediaStream 对象变为不活动状态时触发该事件。
5onremovetrack当有轨道从 MediaStreamTrack 移除时触发该事件。

通过方法来添加、删除、克隆及获取音视频轨道数据:

序号方法描述
1addTrack()从 MediaStream 添加作为参数的 MediaStreamTrack 对象,多次添加则只响应第一次的操作
2clone()返回一份 MediaStream 的克隆后的对象(新 id)
3getAudioTracks()从 MediaStream 得到音频 MediaStreamTrack 列表
4getTrackById()通过 id 得到对应的轨道数据,相同 id 的多个轨道会得到第一个
5getTracks()从 MediaStream 得到所有 MediaStreamTrack 列表
6getVideoTracks()从 MediaStream 得到视频 MediaStreamTrack 列表
7removeTracks()从 MediaStream 删除作为参数的 MediaStreamTrack 对象,已删除后执行将不会发生任何操作

结语:

今天先了解一下对于媒体流和对象的各种操作,为后续的实验做准备,明天继续~


如果看完觉得有收获,欢迎点赞、评论、分享支持一下。你的支持和肯定,是我坚持写作的动力~

最后可以关注我@小鑫同学。欢迎点此扫码加我微信fe-xiaoxin交流,共同进步(还可以帮你fix🐛)~