WebRTC API分析

news/2024/11/17 4:26:36 标签: webrtc

主题

本文详细描述常用的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


http://www.niftyadmin.cn/n/5754874.html

相关文章

flutter字体大小切换案例 小字体,标准字体,大字体,超大字体案例

flutter字体大小切换案例 小字体&#xff0c;标准字体&#xff0c;大字体&#xff0c;超大字体案例 Android iOS设备带有选择记录 我的flutter项目版本 environment: sdk: ‘>3.4.4 <4.0.0’ 图片案例 pubspec.yaml 添加依赖 # 屏幕尺寸适配 https://github.com/OpenF…

Docker compose部署portainer

整个工具的代码都在Gitee或者Github地址内 gitee&#xff1a;solomon-parent: 这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodb github&#xff1a;GitHub - ZeroNing/solomon-parent: 这个项目主要是…

stm32在linux环境下的开发与调试

环境安装 注&#xff1a;文末提供一键脚本 下载安装stm32cubeclt 下载地址为&#xff1a;https://www.st.com/en/development-tools/stm32cubeclt.html 选择 linux版本下载安装 安装好后默认在家目录st下 > $ ls ~/st/stm32cubeclt_1.16.0 …

【网络安全】网络安全防护体系

1.网络安全防护体系概述 1.1 网络安全的重要性 网络安全是保护网络空间不受恶意攻击、数据泄露和其他安全威胁的关键。随着数字化转型的加速&#xff0c;网络安全的重要性日益凸显&#xff0c;它不仅关系到个人隐私和企业机密的保护&#xff0c;还涉及到国家安全和社会稳定。…

使用 Vue 和 ECharts 创建交互式图表

使用 Vue 和 ECharts 创建交互式图表 引言 在现代 Web 应用中&#xff0c;数据可视化是一个重要的组成部分。它不仅能够帮助用户更好地理解复杂的数据&#xff0c;还能提升用户体验。 技术背景 Vue.js Vue.js 是一个渐进式 JavaScript 框架&#xff0c;用于构建用户界面。…

Python进程间通讯大揭秘:原理深度剖析与实战案例分享

在Python编程中,进程间通讯(Inter-Process Communication,简称IPC)是一个不可或缺的概念。它允许多个进程在操作系统中相互协作,共享信息或执行特定的任务。本文将深入剖析Python进程间通讯的原理,并通过实例展示其实现方法,帮助读者更好地理解和应用这一技术。 一、进程…

nacos集群源码解析-cp架构

目录 1 简介 1.1 什么是 CP 架构&#xff1f; 1.2 Nacos 中的 CP 架构特点 1.3 优缺点 1.4适用场景 2 cp架构的主节点选举 2.1 选举流程 2.2 总结 3 cp架构主节点的心跳发送 3.1 leader发送心跳 3.2 follower接收心跳 3.3 总结 4 cp架构的服务注册 4.1 注册流程 …

引领豪华MPV新趋势,比亚迪夏内饰科技广州车展全球首发

11月15日&#xff0c;比亚迪第五代DM技术中大型旗舰MPV夏内饰科技在广州车展正式发布。作为王朝网全新IP夏的首款同名车型&#xff0c;夏采用王朝新一代内饰设计语言&#xff0c;传承华夏文化深厚底蕴&#xff0c;从技术、平台、安全、设计、空间、智享、智驾七大维度&#xff…