1. 简介:
rtpjitterbuffer在gstreamer中是比较重要的一个组件,gstreamer中对rtp处理的组合组件rtpbin中就包含了rtpjitterbuffer,rtpjitterbuffer在rtpbin整个处理中起到了至关重要的作用,包括了对rtp包的乱序重排,丢包重传请求事件的激活等。
2. 功能:
rtpjitterbuffer在gstreamer中并不单纯是对时间抖动的计算,还有其他如下功能:
1) 重复包判断并丢弃
2) 乱序包重排
3) 延迟计算估计
4) 网络丢包或包延迟处理,包括了丢包的重传请求事件的触发及其时间间隔控制、丢包向下游的事件处理。
3. 组件内部机制
rtpjitterbuffer内部主要有三个线程:
1) 主线程,接受上游包的处理线程,包括rtp和rtcp包的处理。
2) 定时器线程,当丢包发生时,会给对应包添加一个定时器,超时后对这个包进行对应处理(重传或者不重传),如果在定时器到来之前收到这个包,会移除对应的定时器。
3) 数据推送线程,当rtpjitterbuffer工作在PUSH模式下时候,会额外开辟一个线程用来进行数据的推送。
4. 简单流程
1) 当上游有数据到来时,会通过注册的chain函数进行包的处理,这里主要讨论RTP包,函数为gst_rtp_jitter_buffer_chain。
2) 当该包连续,则会添加该序号包,类型为BUFFER的item到jbuf中,在jbuf中