【app精品源码】【分时涨幅源码】【人脉通源码】getusermedia源码

1.谈谈MediaStream

getusermedia源码

源码app精品源码

谈谈MediaStream

源码app精品源码

       MediaStream 是连接 WebRTC API 和底层物理流的中间层,webRTC将音视频经过Vocie / Video engine进行处理后,再通过MediaStream API给暴露给上层使用。

源码app精品源码

        MediaStreamTrack是WebRTC中的基本媒体单位,一个MediaStreamTrack包含一种媒体源(媒体设备或录制内容)返回的单一类型的媒体(如音频,视频)。单个轨道可包含多个频道,如立体声源尽管由多个音频轨道构成,但也可以看作是一个轨道。

源码app精品源码

        WebRTC并不能直接访问或者控制源,对源的一切控制都可以通过轨道控制 MediaTrackConstraints 进行实施。

源码app精品源码

        MediaStreamTrack MDN文档

源码app精品源码

        MediaTrackConstraints MDN文档

源码app精品源码

        MediaStream是MediaStreamTrack的合集,可以包含 >=0 个 MediaStreamTrack。MediaStream能够确保它所包含的所有轨道都是是同时播放的,以及轨道的单一性。

源码app精品源码

        MediaStream MDN文档

源码app精品源码

        再MediaTrack的源码中,MediaTrack都是由对应的source和sink组成的。

源码app精品源码

        浏览器中存在从source到sink的媒体管道,其中source负责生产媒体资源,包括多媒体文件,web资源等静态资源以及麦克风采集的音频,摄像头采集的视频等动态资源。而sink则负责消费source生产媒体资源,也就是通过<img>,<video>,<audio>等媒体标签进行展示,或者是通过RTCPeerConnection将source通过网络传递到远端。RTCPeerConnection可同时扮演source与sink的角色,作为sink,可以将获取的source降低码率,缩放,调整帧率等,然后传递到远端,作为source,将获取的远端码流传递到本地渲染。

源码app精品源码

        source 与sink构成一个MediaTrack,多个MeidaTrack构成MediaStram。

源码app精品源码

        MediaTrackConstraints 描述MediaTrack的功能以及每个功能可以采用的一个或多个值,从而达到选择和控制源的目的。 MediaTrackConstraints 可作为参数传递给 applyConstraints() 以达到控制轨道属性的目的,同时可以通过调 getConstraints() 用来查看最近应用自定义约束。

源码app精品源码

        可将MediaStream对象直接赋值给 HTMLMediaElement 接口的 srcObject 属性。

源码app精品源码

        srcObject MDN文档

源码app精品源码

        可通过调用 MediaDevices.getUserMedia() 来访问本地媒体,调用该方法后浏览器会提示用户给予使用媒体输入的许可,媒体输入会产生一个 MediaStream ,里面包含了请求的媒体类型的轨道。此流可以包含一个视频轨道(来自硬件或者虚拟视频源,比如相机、视频采集设备和屏幕共享服务等等)、一个音频轨道(同样来自硬件或虚拟音频源,比如麦克风、A/D转换器等等),也可能是其它轨道类型。

源码app精品源码

        通过 MediaDevices.enumerateDevices() 我们可以得到一个本机可用的媒体输入和输出设备的列表,例如麦克风,摄像机,耳机设备等。

源码app精品源码

        列表中的每个媒体输入都可作为MediaTrackConstraints中对应类型的值,如一个音频设备输入audioDeviceInput可设置为MediaTrackConstraints中audio属性的值

源码app精品源码

        将该constraint值作为参数传入到 MediaDevices.getUserMedia(constraints) 中,便可获得该设备的MediaStream。

源码app精品源码

        MediaDevices.enumerateDevices() MDN文档

源码app精品源码

        MediaDevices.getUserMedia() MDN文档

源码app精品源码

        使用 MediaDevices.getDisplayMedia() 方法,可以提示用户去选择和授权捕获展示的内容或部分内容(如一个窗口),并将录制内容在一个 MediaStream 里。

源码app精品源码

        MediaDevices.getDisplayMedia() MDN文档

源码app精品源码

        使用 HTMLCanvasElement.captureStream() 方法返回的 CanvasCaptureMediaStream 是一个实时捕获的canvas动画流。

源码app精品源码

        HTMLCanvasElement.captureStream() MDN文档

源码app精品源码

        CanvasCaptureMediaStream MDN文档

源码app精品源码

        可通过构造函数 MediaStream() 返回新建的空白的 MediaStream 实例

源码app精品源码

        MediaRecorder MDN文档

源码app精品源码

更多内容请点击【热点】专栏