WebRTC API分析

主题

本文详细描述常用的webrtc api

媒体协商类

myPeerConnection.createOffer([options]);

var options = {

offerToReceiveAudio: true, // 告诉另一端,你是否想接收音频,默认true

offerToReceiveVideo: true, // 告诉另一端,你是否想接收视频,默认true

iceRestart: false, // 是否在活跃状态重启ICE网络协商

};

iceRestart:只有在处于活跃的时候,iceRestart=false才有作用。

RTCPeerConnection .createAnswer([ options ]);

options :

voiceActivityDetection (布尔型,默认 true): 是否启用语音活动检测。

offerToReceiveAudio (整型,默认 1): 希望接收的音频流数量。

offerToReceiveVideo (整型,默认 1): 希望接收的视频流数量。

RTCPeerConnection .setLocalDescription 设置本地sdp描述

RTCPeerConnection .setRemoteDescription设置对端sdp描述

RTCPeerConnection.addTrack(track, ...streams) 用于将一个或多个媒体轨道添加到 RTCPeerConnection
track: 要添加的 MediaStreamTrack 对象。
...streams: 可选的 MediaStream 对象列表,表示该轨道属于哪些流。
例子:
//添加本地轨道
localStream.getTracks().forEach((track) => pc.addTrack(track, localStream));

网络协商类

RTCPeerConnection.addIceCandidate(candidate) 添加一个 ICE 候选人

candidate

注意Android和Web端的不同。

RTCPeerConnection补充

pc = new RTCPeerConnection([ configuration ]);

configuration可选

bundlePolicy 一般用maxbundle

banlanced:音频与视频轨使用各自的传输通道

maxcompat:每个轨使用自己的传输通道

maxbundle:都绑定到同一个传输通道
iceTransportPolicy 一般用all

指定ICE的传输策略

relay:只使用中继候选者

all:可以使用任何类型的候选者

iceServers

其由RTCIceServer组成,每个RTCIceServer都是一个ICE代理的服务器

rtcpMuxPolicy一般用require

rtcp的复用策略,该选项在收集ICE候选者时使用

使用例子:

复制代码
var defaultConfiguration = {
        bundlePolicy: "max-bundle",
        rtcpMuxPolicy: "require",
        iceTransportPolicy: "all",//relay 或者 all
        // 修改ice数组测试效果,需要进行封装
        iceServers: [
            {
                "urls": [
                    "turn:192.168.1.25:3478?transport=udp",
                    "turn:192.168.1.25:3478?transport=tcp"     // 可以插入多个进行备选
                ],
                "username": "jbj",
                "credential": "123456"
            },
            {
                "urls": [
                    "stun:192.168.1.25:3478"
                ]
            }
        ]
    };

    pc = new RTCPeerConnection(defaultConfiguration);

重要事件回调

onicecandidate 事件:

  • RTCPeerConnection 对象收集到一个新的 ICE 候选人时,会触发这个事件。

  • 事件回调函数会收到一个 RTCPeerConnectionIceEvent 对象,其中包含新收集到的 RTCIceCandidate 对象。

  • 你可以在这个事件处理函数中,将收集到的 ICE 候选人发送给对方对等端。

ontrack 事件:

  • RTCPeerConnection 对象接收到来自远端的媒体流时,会触发这个事件。

  • 事件回调函数会收到一个 RTCTrackEvent 对象,其中包含新收到的 MediaStreamTrack 对象以及相关的 MediaStream 对象。

  • 你可以在这个事件处理函数中,将接收到的媒体流添加到页面上进行渲染。

onconnectionstatechange 事件:

  • **当 RTCPeerConnection 对象的连接状态发生变化时,**会触发这个事件。

  • 连接状态可以是 newconnectingconnecteddisconnectedfailedclosed

  • 你可以在这个事件处理函数中,根据连接状态的变化采取相应的措施,如更新 UI、重试连接等。

oniceconnectionstatechange 事件:

  • RTCPeerConnection 对象的 ICE 连接状态发生变化时,会触发这个事件。

  • ICE 连接状态可以是 newcheckingconnectedcompleteddisconnectedfailedclosed

  • 你可以在这个事件处理函数中,根据 ICE 连接状态的变化采取相应的措施,如诊断网络问题、重试连接等。

学习资料分享

0voice · GitHub

相关推荐
Thread.sleep(0)7 天前
WebRTC源码解析:Android如何渲染画面
android·webrtc
chen_song_10 天前
WebRTC的ICE之TURN协议的交互流程中继转发Relay媒体数据的turnserver的测试
算法·音视频·webrtc·交互·媒体
程序员阿灿10 天前
ZLMediaKit 源码分析——[3] ZLToolKit 中EventPoller之网络事件处理
网络·webrtc·zlmediakit·zltoolkit
EasyCVR11 天前
视频AI赋能水利行业生态治理,水电站大坝漂浮物实时监测与智能预警方案
webrtc·智能硬件
拖孩13 天前
[特殊字符]我在 Chatterbox(话匣子)中 WebRTC 的使用-上篇(基本介绍)
开发语言·php·webrtc
多看书少吃饭13 天前
WebRTC简介及应用
前端·vue.js·websocket·webrtc
chen_song_15 天前
WebRTC中音视频服务质量QoS之FEC+NACK调用流程
udp·音视频·webrtc·rtc·h264·nack·fec
_洛_神18 天前
Webrtc编译官方示例实现视频通话
音视频·webrtc
EasyCVR18 天前
跨平台IPC通信、嵌入式WebRTC轻量化引擎:解析EasyRTC在ARM/Linux平台的性能突破
linux·arm开发·webrtc
GDAL18 天前
WebRTC协议全面教程:原理、应用与优化指南
webrtc