XRTC1.0-向offer中添加rtcp复用以及传输方向

2.9万 未经授权,禁止转载了解课程
课程介绍
讨论{{interaction.discussNum ? '(' + interaction.discussNum + ')' : ''}}
适合人群
想快速入门WebRTC技术、掌握WebRTC的有效学习方法,并打算体系化学习WebRTC技术;对音视频技术、高性能后台服务开发、分布式架构十分感兴趣,未来有意愿从事相关工作。
你将会学到
你将掌握基于WebRTC的高性能实时音视频后台服务开发技术,可用于视频通话、在线教育、视频会议等
  • Web端屏幕共享技术
  • 基于libev+消息队列的异步网络编程框架实现
  • 音视频实时分发核心架构设计
  • STUN/TURN/ICE/DTLS等网络协议栈详解与实现
  • WebRTC核心通信流程剖析
  • WebRTC推拉功能实现
  • RTP/RTCP/SRTP/SRTCP协议详解与实现
课程简介

掌握本门课程的技术,你可以拓展实现以下功能:

1. 低延迟直播系统(在线教育等)
2. 1v1视频通话(微信视频聊天、主播连麦等)
3. 视频会议(腾讯会议等)
4. 云渲染、云游戏
5. 其它需要实时音视频功能的场景

WebRTC全套课程咨询&答疑服务粉丝群,不购课也可入群交流学习WebRTC和音视频技术,购课后请务必添加粉丝群,以便提供更好的答疑服务

51二维码.png

课程服务

1. 手把手视频教程
2. 分章节迭代源代码
3. 课程学习笔记
4. 1v1答疑服务

核心内容介绍(完整的课程目录,请查看文末)
本课程总共由4个部分构成。

第一部分(快速入门)

通过本部分课程,你可以学到以下核心内容:
1. Web端屏幕共享技术
2. WebRTC核心通信流程
3. 搭建Go静态资源服务并支持https

第二部分(基础架构)

通过本部分课程,你可以学到以下核心内容:
1. 用golang实现一个轻量级的web框架
2. 基于libev + 消息队列的高性能异步网络编程
3. 无锁队列的原理和实现
4. golang与c++之间的rpc功能设计和实现

第三部分(RTC推流)

通过本部分课程,你可以学到以下核心内容:
1. RTC推流功能实现,兼容WebRTC
2. 音视频实时分发核心架构设计
3. offer/answer模型,SDP各属性详解
4. STUN/ICE/DTLS等协议栈详解和实现
5. ICE核心功能实现
6. WebRTC peerconnection核心流程建立和异常处理
7. WebRTC核心基础库的运用
8. DTLS核心流程实现

第四部分(RTC拉流)

通过本部分课程,你可以学到以下核心内容:
1. RTC拉流功能实现,兼容WebRTC
2. DTLS协商秘钥的获取
3. 音视频包的加密和解密处理
4. RTP/RTCP、SRTP/SRTCP协议

核心模块组成

xrtcclient(js + html,后续会开发win/android/iOS端的课程,敬请期待):负责rtc推拉流客户端
xrtcserver(c++实现): 负责音视频数据的实时分发
signaling(go实现):负责WebRTC SDP的交换

signaling(信令服务)

signaling.png

XRTCServer(分发服务)

xrtcserver.png

协议栈和核心流程

核心流程.png

效果展示

远程共享本地视频(推流端)

推流.png

远程共享视频(拉流端)

拉流.png

延迟效果测试

秒表.png

完整目录

------------快速入门------------
1. XRTC1.0-系统效果演示
2. 课程内容介绍
3. 课程环境准备
4.1v1桌面共享-用golang搭建http静态资源服务
5. 1v1桌面共享-支持https访问
6. 1v1桌面共享-UI界面设计
7. 1v1桌面共享-chrome屏幕共享插件的获取和配置
8. 1v1桌面共享-获取屏幕共享视频流
9. 1v1桌面共享-WebRTC的核心流程介绍
10. 1v1桌面共享-实现WebRTC推流
11. 1v1桌面共享-实现WebRTC拉流(上)
12. 1v1桌面共享-实现WebRTC拉流(中)
13. 1v1桌面共享-实现WebRTC拉流(下)
14. 1v1桌面共享-停止推流和拉流、小结
------------核心架构------------
15. XRTC1.0-服务转发的基本设计理念
16. XRTC1.0-推流基本流程设计
17. XRTC1.0-signaling服务基础框架1
18. XRTC1.0-signaling服务基础框架2
19. XRTC1.0-推流端UI设计
20. XRTC1.0-signaling服务添加log模块1
21. XRTC1.0-signaling服务添加log模块2
22. XRTC1.0-signaling服务设计comlog
23. XRTC1.0-signaling服务comlog填充通用日志字段
24. XRTC1.0-signaling服务comlog添加耗时计算
25. XRTC1.0-signaling服务添加conf模块
26. XRTC1.0-signaling服务支持https和静态资源访问
27. XRTC1.0-signaling服务push请求的发送和处理
28. XRTC1.0-signaling服务push请求参数的解析和异常处理
29. XRTC1.0-signaling服务与分发服务通信协议设计
30. XRTC1.0-signaling服务通过配置文件加载xrpc client
31. XRTC1.0-signaling服务定义header、request、response对象
32. XRTC1.0-signaling服务xrpc负载均衡实现
33. XRTC1.0-xrtcserver搭建基础框架
34. XRTC1.0-xrtcserver添加conf模块
35. XRTC1.0-xrtcserver添加log模块
36. XRTC1.0-xrtcserver实现log异步写入文件
37. XRTC1.0-xrtcserver解决log写入文件失败的问题
38. XRTC1.0-xrtcserver信令处理模块设计
39. XRTC1.0-xrtcserver创建tcp server
40. XRTC1.0-xrtcserver libev封装
41. XRTC1.0-xrtcserver IOWatcher增加启动、停止、删除功能
42. XRTC1.0-xrtcserver 添加事件循环、启动、停止服务功能
43. XRTC1.0-xrtcserver 创建workers
44. XRTC1.0-xrtcserver 分发new_conn 给worker处理
45. XRTC1.0-xrtcserver 无锁队列的实现
46. XRTC1.0-xrtcserver 封装TcpConnection类
47. XRTC1.0-signaling实现请求的转发写入
48. XRTC1.0-xrtcserver tcp连接数据读取1
49. XRTC1.0-xrtcserver tcp连接数据读取2
50. XRTC1.0-xrtcserver tcp连接超时处理以及资源清理
51. XRTC1.0-xrtcserver 解析请求body并处理
52. XRTC1.0-xrtcserver 创建rtcserver
53. XRTC1.0-xrtcserver 创建rtcworkers
54. XRTC1.0-rtcserver将请求分配给worker进行处理
55. XRTC1.0-xrtcserver rtcworker将offer返给signaling worker
56. XRTC1.0-xrtcserver信令worker构造响应包
57. XRTC1.0-xrtcserver信令worker将响应包写入tcpconnection
58. XRTC1.0-signaling服务读取响应结果
59. XRTC1.0-signaling服务返回offer给客户端
------------RTC推流-------------
60. XRTC1.0-流管理器设计
61. XRTC1.0-开始实现create offer
62. XRTC1.0-向offer中添加media content
63. XRTC1.0-实现BUNDLE的功能
64. XRTC1.0-向offer中添加m行以及支持的编解码
65. XRTC1.0-向offer中添加codec及其详细参数
66. XRTC1.0-向offer中添加rtcp-mux以及传输方向
67. XRTC1.0-向offer中添加ice-ufrag和ice-pwd
68. XRTC1.0-向offer中添加fingerprint
69. XRTC1.0-向offer中添加setup属性
70. XRTC1.0-创建IceTransportChannel
71. XRTC1.0-实现SetLocalDescription
72. XRTC1.0-获取本地所有可用的网络接口
73. XRTC1.0-封装PortAllocator类
74. XRTC1.0-ICE的运行步骤和candidate的分类
75. XRTC1.0-创建UDP Port
76. XRTC1.0-准备socket address
77. XRTC1.0-创建ICE local candidate
78. XRTC1.0-ICE candidate的收集和交换方式
79. XRTC1.0-client peerconnection设置offer并创建answer
80. XRTC1.0-client peerconnection向signaling发送answer
81. XRTC1.0-signaling server处理sendanswer请求
82. XRTC1.0-xrtcserver处理answer请求
83. XRTC1.0-解析answer中的transport info
84. XRTC1.0-实现SetRemoteDescription
85. XRTC1.0-实现异步读取推流端网络数据包
86. XRTC1.0-STUN协议详解
87. XRTC1.0-验证STUN fingerprint
88. XRTC1.0-STUN message读取
89. XRTC1.0-实现STUN ByteString属性类型的读取
90. XRTC1.0-解析并验证USERNAME属性
91. XRTC1.0-解析并验证MESSAGE-INTEGRITY属性
92. XRTC1.0-STUN Binding request异常处理
93. XRTC1.0-创建peer reflexive candidate
94. XRTC1.0-创建IceConnection
95. XRTC1.0-构造binding response
96. XRTC1.0-添加MESSAGE-INTEGRITY属性
97. XRTC1.0-添加FINGERPRINT属性
98. XRTC1.0-发送binding response
99. XRTC1.0-实现UDP packet的高性能发送
100. XRTC1.0-完成ICE connection的keepalive
101. XRTC1.0-发送STUN error response message
102. XRTC1.0-实现服务侧的连通性检查
103. XRTC1.0-设计IceTransportChannel的ping执行周期
104. XRTC1.0-ICE Connection的ping优先级
105. XRTC1.0-选择一个connection执行本轮ping请求
106. XRTC1.0-构造STUN request请求
107. XRTC1.0-ICE普通提名和积极提名
108. XRTC1.0-发送STUN ping请求
109. XRTC1.0-处理STUN response响应
110. XRTC1.0-输出RTT和ping ID信息
111. XRTC1.0-更新IceConnection的读写状态
112. XRTC1.0-实现selected connection的切换策略
113. XRTC1.0-切换策略考虑IceConnection的priority和RTT
114. XRTC1.0-开始切换selected connection
115. XRTC1.0-清理STUN request并处理错误响应
116. XRTC1.0-设置CandidatePairState
117. XRTC1.0-处理IceConnection ping周期问题
118. XRTC1.0-实现IceConnection探活机制
119. XRTC1.0-更新IceTransportChannel的状态
120. XRTC1.0-封装DtlsTransport类
121. XRTC1.0-缓存ClientHello packet
122. XRTC1.0-安装DTLS
123. XRTC1.0-实现SetLocalCertificate方法
124. XRTC1.0-实现SetRemoteFingerprint方法
125. XRTC1.0-启动DTLS
126. XRTC1.0-实现DTLS数据的读取
127. XRTC1.0-实现DTLS数据的写入
128. XRTC1.0-设置DTLS-SRTP密码套件
129. XRTC1.0-设置DtlsTransport的状态
130. XRTC1.0-设置DtlsTransport receiving状态
131. XRTC1.0-计算PeerConnection的状态
132. XRTC1.0-计算IceTransportChannel的状态
133. XRTC1.0-计算IceAgent的状态
134. XRTC1.0-联合ICE和DTLS的状态重新计算PeerConnection的状态
135. XRTC1.0-实现PeerConnection failed状态下的资源清理
136. XRTC1.0-signaling支持停止推流
137. XRTC1.0-xrtcserver支持停止推流
138. XRTC1.0-推流部分小结
--------------RTC拉流----------------
139. XRTC1.0-设计拉流端UI
140. XRTC1.0-xrtcserver处理pull命令
141. XRTC1.0-音视频转发方案设计
142. XRTC1.0-解析PushStream中SDP的ssrc信息
143. XRTC1.0-解析ssrc group信息
144. XRTC1.0-创建音视频track
145. XRTC1.0-PushStream实现获取音视频源的方法
146. XRTC1.0-PullStream实现设置音视频源的方法
147. XRTC1.0-offer sdp中增加ssrc的描述信息
148. XRTC1.0-创建DtlsSrtpTransport
149. XRTC1.0-从DTLS中导出server和client key
150. XRTC1.0-创建SrtpSession并设置参数
151. XRTC1.0-引入libsrtp库
152. XRTC1.0-初始化libsrtp库
153. XRTC1.0-创建或者更新srtp context结构
154. XRTC1.0-完成srtp的set_recv和update_recv方法
155. XRTC1.0-开始安装DTLS-SRTP
156. XRTC1.0-解复用rtp和rtcp包
157. XRTC1.0-实现rtp和rtcp包的判断方法
158. XRTC1.0-rtp数据包解密
159. XRTC1.0-rtcp数据包解密
160. XRTC1.0-RtcStream获取rtp和rtcp数据包
161. XRTC1.0-转发rtp数据
162. XRTC1.0-实现DtlsSrtpTransport的rtp发送
163. XRTC1.0-加密rtp数据包
164. XRTC1.0-发送加密的rtcp数据包
165. XRTC1.0-signaling停止拉流
166. XRTC1.0-xrtcserver处理停止拉流命令
167. XRTC1.0-异常处理、代码完善
168. XRTC1.0-总结和效果演示

展开更多
发布
头像

{{ item.user.nick_name }} {{ EROLE_NAME[item.user.identity] }}

置顶笔记
讨论图
{{ item.create_time }}回复
  • 删除

    是否确认删除?

    确认
    取消
  • {{ item.is_top == 1 ? '取消置顶' : '置顶'}}

    已有置顶的讨论,是否替换已有的置顶?

    确认
    取消
{{ tag.text}}
头像
{{ subitem.user.nick_name }}{{ EROLE_NAME[subitem.user.identity] }}
{{ subitem.create_time }}回复
删除

是否确认删除?

确认
取消
发布
{{pageType === 'video' ? '讨论区抢占沙发,可获得双倍学分' :'讨论区空空如也,你来讲两句~'}}
发布
{{tips.text}}
{{ noteHeaderTitle }} 笔记{{ hasMyNote ? '我的笔记' : '记笔记' }}
{{ hasMyNote ? '我的笔记' : '记笔记' }}
优质笔记
更新于:{{ $dayjs.formate('YYYY-MM-DD HH:mm:ss', item.last_uptime*1000) }}
头像
{{ detail.username }}

公开笔记对他人可见,有机会被管理员评为“优质笔记”

{{ noteEditor.content.length }}/2000

公开笔记
保存
提问

讲师收到你的提问会尽快为你解答。若选择公开提问,可以获得更多学员的帮助。

记录时间点
记录提问时视频播放的时间点,便于后续查看
公开提问
提交