web 技术分享| WebRTC 记录音视频流
监听开始事件
EventTarget.addEventListener() 方法将指定的监听器注册到
EventTarget上,当该对象触发指定的事件时,指定的回调函数就会被执行。 事件目标可以是一个文档上的元素Element,Document和Window或者任何其他支持事件的对象 (比如XMLHttpRequest)。addEventListener()的工作原理是将实现EventListener的函数或对象添加到调用它的EventTarget上的指定事件类型的事件侦听器列表中。
获取音视频轨道
MediaDevices.getUserMedia()会提示用户给予使用媒体输入的许可,媒体输入会产生一个MediaStream,里面包含了请求的媒体类型的轨道。此流可以包含一个视频轨道(来自硬件或者虚拟视频源,比如相机、视频采集设备和屏幕共享服务等等)、一个音频轨道(同样来自硬件或虚拟音频源,比如麦克风、A/D 转换器等等),也可能是其它轨道类型。它返回一个
Promise对象,成功后会resolve回调一个MediaStream对象。若用户拒绝了使用权限,或者需要的媒体源不可用,promise会reject回调一个PermissionDeniedError或者NotFoundError。
HTMLMediaElement接口的srcObject属性设定或返回一个对象,这个对象提供了一个与HTMLMediaElement关联的媒体源,这个对象通常是MediaStream,但根据规范可以是MediaSource,Blob或者File。
录制媒体流
MediaRecorder()构造函数会创建一个对指定的MediaStream进行录制的MediaRecorder对象MediaRecorder.ondataavailable事件处理程序 API 处理dataavailable事件,在响应运行代码Blob数据被提供使用。dataavailable当 MediaRecorder 将媒体数据传递到您的应用程序以供使用时,将触发该事件。数据在包含数据的Blob对象中提供。这在四种情况下发生:媒体流结束时,所有尚未传递到
ondataavailable处理程序的媒体数据都将在单个Blob中传递。当调用
MediaRecorder.stop()(en-US)时,自记录开始或dataavailable事件最后一次发生以来已捕 获的所有媒体数据都将传递到Blob中;此后,捕获结束。调用
MediaRecorder.requestData()(en-US)dataavailable时,将传递自记录开始或事件最后一次发生以来捕获的所有媒体数据;然后Blob创建一个新文件,并将媒体捕获继续到该 blob 中。如果将
timeslice属性传递到开始媒体捕获的MediaRecorder.start()(en-US)方法中,dataavailable则每timeslice毫秒触发一次事件。这意味着每个 Blob 都有特定的持续时间(最后一个 Blob 除外,后者可能更短,因为它将是自上次事件以来剩下的所有东西)。
播放媒体流
URL.createObjectURL()静态方法会创建一个DOMString,其中包含一个表示参数中给出的对象的 URL。这个 URL 的生命周期和创建它的窗口中的document绑定。这个新的 URL 对象表示指定的File对象或Blob对象。
HTML
CSS
JavaScript
版权声明: 本文为 InfoQ 作者【anyRTC开发者】的原创文章。
原文链接:【http://xie.infoq.cn/article/4cf2201bff88ab0ae157d32da】。文章转载请联系作者。











评论