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
的用法》