web 技术分享| webRTC 媒体流录制
音视频的录制音视频的分为服务端录制和客户端录制,下面主要讲的是利用 webrtc 进行客户端录制的方式。因为 WebRTC 录制音视频流之后,最终是通过 Blob 对象将数据保存成多媒体文件的,
Blob
对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成ReadableStream
来用于数据操作。Blob 表示的不一定是 JavaScript 原生格式的数据。
File
接口基于Blob
,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。要从其他非 blob 对象和数据构造一个
Blob
,请使用Blob()
构造函数。要创建一个 blob 数据的子集 blob,请使用slice()
方法。要获取用户文件系统上的文件对应的Blob
对象。接受
Blob
对象的 API 也被列在File
文档中。
了解完 Blob 的特性之后呢, 我们进入正题。
获取元素声明变量
绑定点击事件
URL.createObjectURL()
静态方法会创建一个DOMString
,其中包含一个表示参数中给出的对象的 URL。这个 URL 的生命周期和创建它的窗口中的document
绑定。这个新的 URL 对象表示指定的File
对象或Blob
对象。URL.revokeObjectURL()
静态方法用来释放一个之前已经存在的、通过调用URL.createObjectURL()
创建的 URL 对象。当你结束使用某个 URL 对象之后,应该通过调用这个方法来让浏览器知道不用在内存中继续保留对这个文件的引用了。你可以在sourceopen
被处理之后的任何时候调用revokeObjectURL()
。这是因为createObjectURL()
仅仅意味着将一个媒体元素的src
属性关联到一个MediaSource
对象上去。调用revokeObjectURL()
使这个潜在的对象回到原来的地方,允许平台在合适的时机进行垃圾收集。
点击开始初始化
MediaDevices.getUserMedia()
会提示用户给予使用媒体输入的许可,媒体输入会产生一个MediaStream
,里面包含了请求的媒体类型的轨道。此流可以包含一个视频轨道(来自硬件或者虚拟视频源,比如相机、视频采集设备和屏幕共享服务等等)、一个音频轨道(同样来自硬件或虚拟音频源,比如麦克风、A/D 转换器等等),也可能是其它轨道类型。它返回一个
Promise
对象,成功后会resolve
回调一个MediaStream
对象。若用户拒绝了使用权限,或者需要的媒体源不可用,promise
会reject
回调一个PermissionDeniedError
或者NotFoundError
。
开始记录方法
HTML
CSS
webRTC 功能是非常强大的,关于 webrtc 和直播还有很多技术需要我们去研究,上续呢是 DEMO 的示例代码,感兴趣的小伙伴可以亲自试一试。
版权声明: 本文为 InfoQ 作者【anyRTC开发者】的原创文章。
原文链接:【http://xie.infoq.cn/article/c2a771487f6e477a238f2bfb2】。文章转载请联系作者。
评论