从 0 打造音视频直播系统
李超
前新东方音视频直播技术专家,前沪江音视频架构师
32579 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 41 讲
WebRTC 1对1通话 (23讲)
从 0 打造音视频直播系统
15
15
1.0x
00:00/00:00
登录|注册

12 | RTCPeerConnection:音视频实时通讯的核心

结合信令服务器实现1对1系统
显示远端媒体流
RTCPeerConnection工作
适配各种浏览器
本地视频元素和控制按钮
处理细节
类似于socket
WebRTC处理过程
编解码器选择
音视频同步
数据传输质量保障
连通性保障
连接建立
NAT 穿越
媒体协商
SDP 协议
控制协议
网络数据传输协议
1对1实时互动音视频系统
实时音视频通讯
思考时间
实现通话
工作原理
位置
功能
WebRTC
RTCPeerConnection
RTCPeerConnection

该思维导图由 AI 生成,仅供参考

RTCPeerConnection 类是在浏览器下使用 WebRTC 实现 1 对 1 实时互动音视频系统最核心的类。你可以认为它是一个总的接口类或者称它为聚合类,而该类中实现的很多功能都是由其他类具体实现的。
像我前面讲的很多文章,都是 RTCPeerConnection 类的一部分功能,如 :
《06 | WebRTC 中的 RTP 及 RTCP 详解》讲的是底层网络数据传输协议与其控制协议。
《09 | 让我们揭开 WebRTC 建立连接的神秘面纱》讲的是 WebRTC 底层是如何建立连接的。
《10 | WebRTC NAT 穿越原理》介绍了在 WebRTC 底层进行 NAT 穿越的过程。
以上这些内容都是 RTCPeerConnection 类的功能。除了上述讲的这些内容之外,RTCPeerConnection 类还有许多其他的功能,我在后面的文章中还会向你逐一介绍。
RTPPeerConnection 这个知识点是你掌握 WebRTC 开发的重中之重,抓住它你就抓住了学习 WebRTC 的钥匙(这里你一定要清楚,SDP 是掌握 WebRTC 运行机制的钥匙,而 RTCPeerConnection 是使用 WebRTC 的钥匙),这样可以让你很快学会 WebRTC 的使用。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

RTCPeerConnection是WebRTC实现音视频通讯的核心类,负责建立端到端连接、传输音视频数据以及保障服务质量。与普通socket类似,但功能更强大,实现更为复杂。在实现1对1通话系统时,RTCPeerConnection处理诸多细节,如建立连接、NAT穿越、丢包处理、带宽控制、音视频同步等。文章介绍了RTCPeerConnection的工作原理和实现通话的例子,强调了其重要性和功能。此外,还提到了适配各种浏览器的问题,并介绍了adapter.js适配器脚本的作用。整体而言,文章深入浅出地介绍了RTCPeerConnection的重要性和工作原理,对于想要了解WebRTC音视频通讯的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 打造音视频直播系统》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(24)

  • 最新
  • 精选
  • forever
    老师您好,我想请教一下如何解决webrtc 兼容性的问题,特别是在ios端使用腾讯x5内核的时候

    作者回复: iOS端只能用 safari,其它的浏览器都不能用 webrtc,之所以这样是因为苹果不允许其它浏览器访问底层 API,只能通过 webview实现浏览器。因此你会发现在iOS上只有 safari才能访问专栏中讲解的那些API

    2019-08-10
    7
  • Bubbly
    addStream好像要被addTrack替代了。老师可以分析下使用addTrack来替代addStream的原因吗?

    作者回复: 是的,原因在于WebRTC底层都是以 track 为单位的,而且使用track 更灵活,音频与视频可以随音组合

    2020-10-30
    3
  • dayu
    老师,请问一下,如果在局域网内进行一对一通话,是不是可以不搭建STUN\TURN服务器?

    作者回复: 可以,除非你们公司内部对 P2P 做了限制

    2020-02-16
    2
    3
  • Jackson
    这个例子是webrtc官方的吧?

    作者回复: 是的!

    2019-12-18
    2
    2
  • Random
    老师你好,通话过程中的ice restart的触发时机选择什么时候比较好呢?

    作者回复: 这个你要检测"iceConnectionState"的值了,其中我们感兴趣的是disconnected和failed两个状态,disconnected 表式断连了,failed表示经多次偿试仍无法恢复。所以当你检测到 failed时就可以重启 ICE 了

    2020-06-04
    2
    1
  • xilie
    前面看不懂,到这才有感觉,又得回头去看前面的协议,建议凡事先上能跑起来的代码,再逐步解剖协议,好一点

    作者回复: 😄,协议的内容相对来说稍难了一些,而知识的理解也需要一个时间过程

    2019-08-14
    1
  • Ray-J
    老师,Candidate的作用是用来做什么的呢?翻译过来 是候选人, 很难理解这个词,希望能得到老师的帮助加深理解

    作者回复: 就是 <IP,端口>对, 假设你的主机有两上网卡,都使用5678这个端口,那你就有两个候选者,它们分别是<网卡1的IP,5679>,<网卡2IP, 5678>

    2019-08-12
    1
  • Her later
    在真实的场景中,每当获得一个新的 Candidate 后,就会通过信令服务器交换给对端,对端再调用 RTCPeerConnection 对象的 addIceCandidate() 方法将收到的 Candidate 保存起来,然后按照 Candidate 的优先级进行连通性检测。 真实场景中,应该是candidate 都是通过信令服务器转发的吧,rtcpeerconnection并不会收到oncandidate 的回调,不知道我理解是否正确?

    作者回复: oncandidate是webrtc 底层收集到本机自己的Candidate 时通知上层应用的回调函数呀,你应该是还没看懂这快逻辑

    2021-04-15
  • Her later
    这篇文章解析了 如何端对端的推拉流 ,但是如果我要将流推到服务器 ,其他很多人订阅服务器的流老播放 ,又该怎样实现呢 ,有没有专门的文章介绍 ,有的话 ,我就买了 。

    作者回复: 多人订阅使用nginx+rtmp 的方式

    2021-04-08
  • npersonal
    老师,编解码没有讲解吗。我现在碰到个问题,使用h264编码,stream的width和height都为0,这是什么原因

    作者回复: 那肯定是编码失败的

    2021-03-02
收起评论
显示
设置
留言
24
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部