interceptor寻踪:总结
Howard Yin 2021-10-09 11:34:00 WebRTC编程框架pion概念
# 发送方
主角:TrackLocal和RTPSender
BindRTCPReader在NewRTPSender里被调用,返回的RTCPReader.Read在RTPSender的Read里调用,供用户从RTPSender里读取自定义的RTCP包BindLocalStream在RTPSender.Send里被调用,并且在最顶层上都是在SetLocalDescription和SetRemoteDescription里初始化时调用的。在RTPSender.Send里,RTPSender构造为TrackLocalWriter封装进TrackLocalContext然后绑定给用户定义的TrackLocal里,实际发送RTP包需要用户在自己实现的TrackLocal里调用TrackLocalWriter.Write
# 接收方
主角:TrackRemote和RTPReceiver
- 读取RTP包:
OnTrack里用户获取到TrackRemote,调用TrackRemote里的Read,Read调用RTPReceiver里的非导出类执行发RTP包的操作 - 读取RTCP包:
OnTrack里用户获取到RTPReceiver,调用RTPReceiver里的Read就是实际读取RTCP包的操作 - 初始化:在
SetLocalDescription和SetRemoteDescription里,interceptor相关类被初始化(BindRemoteStream和BindRTCPReader)后放入TrackRemote和RTPReceiver里,在OnTrack里里用户获取到的就是这些初始化好的类
# 额外
BindRTCPWriter在NewPeerConnection里被调用,返回的RTCPWriter.Write在PeerConnection的WriteRTCP里调用,供用户发送一些自定义的RTCP包
# 参考
TrackLocal的介绍:《pion中的TrackLocal》RTPSender的介绍:《interceptor寻踪:从TrackLocal开始深入挖掘pion/interceptor的用法》TrackRemote的介绍:《pion中的TrackRemote》RTPReceiver的介绍:《interceptor寻踪:从TrackRemote开始深入挖掘pion/interceptor的用法》