webrtc insertable stream简单介绍

921 阅读1分钟

webrtc insertable stream

介绍

webrtc insertable stream 是webrtc nv新增的功能,目前在最新版本chrome上支持,通过它可以对音视频数据进行操作,这里以接收端为例子进行说明。

使用

// 接收端需要在webrtc connected状态之后,获取receiver
// 获取到的receives是一个数组,正常情况下会有两个,一个接受音频,一个接受视频
const receives = pc.getReceivers()
  • 获取RTCInsertableStreams对象
// 从receives迭代取出receive,通过createEncodedStreams方法可获得RTCInsertableStreams对象
const receiverStreams = receive.createEncodedStreams();
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黑屏或没有声音时,可从这里获取数据,判断问题原因
  • 音频可以处理变声等
  • 视频可以处理美颜等
  • 数据加密