2.1 媒体流

在WebRTC的众多技术中,我们首先介绍媒体流(MediaStream),因为媒体流应用在WebRTC技术的各个方面,理解了媒体流的相关概念和使用方法,才能更好地展开介绍其他技术。

媒体流是信息的载体,代表了一个媒体设备的内容流。媒体流可以被采集、传输和播放,通常一个媒体流包含多个媒体轨道,如音频轨道、视频轨道。

媒体流使用MediaStream接口来管理,通常获取媒体流的方式有如下几种。

  • 从摄像头或者话筒获取流对象。
  • 从屏幕共享获取流对象。
  • 从canvas(HTMLCanvasElement)内容中获取流对象。
  • 从媒体元素(HTMLMediaElement)获取流对象。

上述方法获取的媒体流都可以通过WebRTC进行传输,并在多个对等端之间共享。

MediaStream的定义如代码清单2-1所示。

代码清单2-1 MediaStream的定义

interface MediaStream : EventTarget {
  constructor();
  constructor(MediaStream stream);
  constructor(sequence<MediaStreamTrack> tracks);
  readonly attribute DOMString id;
  sequence<MediaStreamTrack> getAudioTracks();
  sequence<MediaStreamTrack> getVideoTracks();
  sequence<MediaStreamTrack> getTracks();
  MediaStreamTrack? getTrackById(DOMString trackId);
  void addTrack(MediaStreamTrack track);
  void removeTrack(MediaStreamTrack track);
  MediaStream clone();
  readonly attribute boolean active;
  attribute EventHandler onaddtrack;
  attribute EventHandler onremovetrack;
};

我们将在本节详细讨论媒体流的构造函数、属性、方法和事件。