网站首页 > 技术文章 正文
0.引言
本篇文章主要是讲解媒体协商的有关知识,为后面实战写代码做好准备。本篇文章也是连载,可以参考前面的文章,参考列表如下:
1.重要接口讲解
1.1 createOffer
基本格式
aPromise = myPeerConnection.createOffer([options])?
[options]包括以下重要字段,说明如下:
var options = {
offerToReceiveAudio: true, // 告诉另一端,你是否想接收音频,默认true
offerToReceiveVideo: true, // 告诉另一端,你是否想接收视频,默认true
iceRestart: false, // 是否在活跃状态重启ICE网络协商
};
https://webrtc.github.io/samples/src/content/peerconnection/restart-ice/
iceRestart:只有在处于活跃的时候,iceRestart=false才有作用。
1.2 createAnswer
在源码中的基本格式,表示如下:
aPromise = RTCPeerConnection .createAnswer([ options ]);
注意:目前createAnswer的options是无效的。
1.3 setLocalDescription
在源码中的基本格式,表示如下:
aPromise = RTCPeerConnection .setLocalDescription(sessionDescription);
1.4 setRemoteDescription
在源码中的基本格式,表示如下:
aPromise = pc.setRemoteDescription(sessionDescription);
1.5 加入Stream/Track
addTrack
在源码中的基本格式,表示如下:
rtpSender = rtcPeerConnection .addTrack(track,stream ...);
track:添加到RTCPeerConnection中的媒体轨(音频track/视频track)
stream:getUserMedia中拿到的流,指定track所在的stream
1.6 网络协商
addIceCandidate
在源码中的基本格式,表示如下:
aPromise = pc.addIceCandidate(候选人);
candidate
为了兼容android和web才做如下设置。
1.7 RTCPeerConnection补充
构造函数
在源码中的基本格式,表示如下:
pc = new RTCPeerConnection([ configuration ]);
对于new RTCPeerConnection([configuration]),如果在公网上使用,configuration就一定要有值。对于configuration的值的选择是,一般都是选用第三种max-bundle,也就是都绑定到同一个传输通道,兼容性会更好。
configuration可选
bundlePolicy 一般用max-bundle
(1)banlanced:音频与视频轨使用各自的传输通道。
(2)max-compat:每个轨使用自己的传输通道。
(3)max-bundle:都绑定到同一个传输通道。
1.8 iceTransportPolicy 一般用all
在测试iceTransportPolicy,一般都是用all,但是在测试的时候,建议用relay模式。只有通过中继的方式通了之后,才能说明网络是正真的通了,到公网才能够成功。如果用all模式的话,在局域网内,couturn就算是没有成功,那也能够通话成功。
指定ICE的传输策略
relay:只使用中继候选者。
all:可以使用任何类型的候选者。
1.9 iceServers
其由RTCIceServer组成,每个RTCIceServer都是一个ICE代理的服务器。属性对应如下:
credential:就表示一个密码的意思。
源码中的turn和stun是一定要注意,使用自己的公网地址。打洞可以使用udp或tcp。
1.10 rtcpMuxPolicy
rtcpMuxPolicy 一般用require,rtcp的复用策略,该选项在收集ICE候选者时使用。属性说明如下:
重要事件
(1)onicecandidate表示 收到候选者时触发的事件。
(2)ontrack 表示获取远端流。
(3)onconnectionstatechange表示PeerConnection的连接状态。可以参考如下链接地址:
https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/connectionState
上面这个链接给出的会有很多关于webrtc的API说明,可以值得参考。
界面如下:
部分源码展示:
pc.onconnectionstatechange = function(event) {
switch(pc.connectionState) {
case "connected":
// The connection has become fully connected
break;
case "disconnected":
case "failed":
// One or more transports has terminated unexpectedly or in an error
break;
case "closed":
// The connection has been closed
break;
}
}
onconnectionstatechange ice连接事件,具体参考链接如下:
https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/iceConnectionState
2.测试
谷歌官方给的一个测试例子,链接如下:
https://webrtc.github.io/samples/src/content/peerconnection/restart-ice/
注意:这个链接必须要翻墙才能打开,国内的网站可能是打不开。
测试网站(可以测试简单的音视频通话),界面如下:
谷歌给的官方案例,在源码里加上打印。如下:
当把音频或视频重新获取时,那就需要重新执行candidate。也就是修改这个值后。只有处于活跃的时候,iceRestart=false才有用。
3.总结
本篇文章讲解了wertc视频通话中的一些常用API,还给出谷歌官方提供的测试网站和API的学习,希望对你有帮助。欢迎关注,转发,收藏,点赞。
后面关于项目有关的知识,可以关注微信公众号"记录世界 from antonio"
猜你喜欢
- 2024-10-02 一文看懂WebRTC建连过程 webrtc socket
- 2024-10-02 webrtc原理及相关api使用逻辑 webrtcvad
- 2024-10-02 网页端WebRTC推流转换为RTMP/GB28181等其他直播流协议
- 2024-10-02 FaceTime终直面WebRTC:deep dive实现(上)
- 2024-10-02 音视频流媒体开发WebRTC 基础知识 -- ICE 交互总结
- 2024-10-02 FaceTime终直面WebRTC:deep dive实现(下)
- 2024-10-02 webRTC 连接建立原理演示 webrtc怎么用
- 2024-10-02 资讯|WebRTC M98 更新 webrtc mediastream
- 2024-10-02 WebRTC客户端主要流程分析 webrtc internals
- 2024-10-02 WebRTC 入门教程:WebRTC信令控制与STUN/TURN服务器搭建
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)