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

相关推荐
EasyNVR2 天前
EasyRTC智能硬件:小体积,大能量,开启音视频互动新体验
前端·安全·音视频·webrtc·sdk·p2p·智能硬件
科技小E3 天前
WebRTC与EasyRTC:开启智能硬件音视频通讯的全新旅程
网络·网络协议·音视频·webrtc·p2p·视频监控
cyw89983 天前
vue3读取webrtc-stream 视频流
webrtc
Likeadust4 天前
WebP2P+自研回音消除:视频通话SDK嵌入式EasyRTC构建高交互性音视频应用
音视频·webrtc·p2p·webp2p
EasyGBS5 天前
EasyRTC嵌入式WebRTC视频通话SDK支持Web浏览器、Linux、ARM、Android、iOS
arm开发·音视频·webrtc·webp2p
xiejiashu5 天前
嵌入式EasyRTC实时通话支持海思hi3516cv610,编译器arm-v01c02-linux-musleabi-gcc
webrtc·webrtc嵌入式·嵌入式webrtc·硬件视频通话·嵌入式视频通话
EasyNVR5 天前
WebRTC与EasyRTC:开启智能硬件音视频通讯的全新旅程
网络·安全·音视频·webrtc·智能硬件·视频监控
william_myq8 天前
协议-WebRTC-HLS
音频·webrtc·hls
sun_weitao8 天前
flutter-webrtc安装示例
flutter·webrtc
爱学习的大牛12311 天前
WebRTC 客户端与ZLMediaKit通讯
webrtc·zlmediakit