目录
一 基本概念
DTLS(Datagram Transport Layer Security) 提供了 UDP 传输场景下的安全机制,能防止窃听、篡改、冒充等问题。在 WebRTC中使用 DTLS 的地方包括两部分:
Datachannel 数据通道。在 Datachannel 数据通道中,WebRTC 完全使用 DTLS 来进行协商和加解密
MediaChannel 媒体通道。在媒体通道中 WebRTC 使用 SRTP 来进行数据的加解密,DTLS 的作用仅仅是用来做密钥交换,RTP/RTCP 的数据为了与历史设备兼容性的考虑,完全通过 SRTP 来实现。
twcc:接收端twcc主要功能就是通过fb通知发送端每一个rtp的接收时间。
基本逻辑:当接收端接收到每一个rtp包的时候,记录当前的接受时间和包序号,然后按一定策略定时的发送到发送端,然后发送端可以根据的发送,接收时间统计延迟,为后续估算提供数据点。
REMB:Receiver Estimated Max Bitrate,是一种RTCP 反馈消息,作为接收方,告诉发送方它可以接收的带宽是多少
sdp包含remb
a=rtcp-fb:<payload type> goog-remb
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
FEC:前向纠错(FEC)是抵抗网络错误的重要手段。FEC在发送端将数据包添加冗余纠错码,纠错码连同数据包一起发送到接收端;接收端根据纠错码对数据进行检查和纠正。
NACK:丢包重传(NACK)也是抵抗网络错误的重要手段。NACK在接收端检测到数据丢包后,发送NACK报文到发送端;发送端根据NACK报文中的序列号,在发送缓冲区找到对应的数据包,重新发送到接收端。NACK需要发送端,发送缓冲区的支持。webrtc中支持音频和视频的NACK重传。
SSRC:在RTP协议中, 定义同步源(SSRC,Synchronization source)为RTP包流的源,用RTP报头中32位数值的SSRC标识符进行标识,使其不依赖于网络地址。通常麦克风,音频接口,摄像头,视频接口的变化,都会导致SSRC的变化。
二 关键类
| epoll管理多个socket连接 class EventPoller : public TaskExecutor, public AnyStorage, public std::enable_shared_from_this<EventPoller> { public: using Ptr = std::shared_ptr<EventPoller>; friend class TaskExecutorGetterImp; ~EventPoller(); /** * 获取EventPollerPool单例中的第一个EventPoller实例, * 保留该接口是为了兼容老代码 * @return 单例 */ static EventPoller &Instance(); /** * 添加事件监听 * @param fd 监听的文件描述符 * @param event 事件类型,例如 Event_Read | Event_Write * @param eventCb 事件回调functional * @return -1:失败,0:成功 */ int addEvent(int fd, int event, PollEventCB eventCb); /** * 删除事件监听 * @param fd 监听的文件描述符 * @param delCb 删除成功回调functional * @return -1:失败,0:成功 */ int delEvent(int fd, PollDelCB delCb = nullptr); /** * 修改监听事件类型 * @param fd 监听的文件描述符 * @param event 事件类型,例如 Event_Read | Event_Write * @return -1:失败,0:成功 */ int modifyEvent(int fd, int event); /** * 异步执行任务 * @param task 任务 * @param may_sync 如果调用该函数的线程就是本对象的轮询线程,那么may_sync |

本文深入探讨了WebRTC技术的关键概念,如DTLS安全机制、TWCC、REMB等,并介绍了其在实时通信中的应用流程。此外,还解析了epoll等关键类的作用,以及WebRTC在实际项目中的实现细节。
最低0.47元/天 解锁文章
5239

被折叠的 条评论
为什么被折叠?



