webrtc insertable stream
介绍
webrtc insertable stream 是webrtc nv新增的功能,目前在最新版本chrome上支持,通过它可以对音视频数据进行操作,这里以接收端为例子进行说明。
使用
- 要在接收端使用该功能,需要从Receiver获取RTCInsertableStreams对象,RTCInsertableStreams相关信息可从webkit-search.igalia.com/webkit/sour…查询。
- 获取Receiver
// 接收端需要在webrtc connected状态之后,获取receiver
// 获取到的receives是一个数组,正常情况下会有两个,一个接受音频,一个接受视频
const receives = pc.getReceivers()
- 获取RTCInsertableStreams对象
// 从receives迭代取出receive,通过createEncodedStreams方法可获得RTCInsertableStreams对象
const receiverStreams = receive.createEncodedStreams();
- RTCInsertableStreams定义如下,可从webkit-search.igalia.com/webkit/sour…查询
dictionary RTCInsertableStreams {
ReadableStream readable;
WritableStream writable;
};
- ReadableStream对象提供了pipeThrough,pipeTo两个方法,配合TransformStream对象可以在webrtc组帧完成和解码中间进行一些操作,TransformStream文档developer.mozilla.org/en-US/docs/…
const transformStream = new window.TransformStream({
transform: demo
});
receiverStreams.readable
.pipeThrough(transformStream)
.pipeTo(receiverStreams.writable);
- transform对应的方法会传入两个参数: chunk, controller
demo(chunk, controller) {
// 帧数据(chunk.data);
// TODO 处理帧数据
// 将处理过后的数据重新放回
controller.enqueue(chunk);
}
用途
- 当webrtc黑屏或没有声音时,可从这里获取数据,判断问题原因
- 音频可以处理变声等
- 视频可以处理美颜等
- 数据加密