# Functions
CompareSeq 比较序号的值,内部处理序号翻转问题,见单元测试中的例子
@return - 0 a和b相等 - 1 a大于b - -1 a小于b.
DefaultRtpUnpackerFactory 目前支持AVC,HEVC和AAC MPEG4-GENERIC,业务方也可以自己实现IRtpUnpackerProtocol,甚至是IRtpUnpackContainer.
IsAvcHevcBoundary
@param pt: 取值范围为AvPacketPtAvc或AvPacketPtHevc,否则直接返回false.
MswLsw2Ntp msw是ntp的高32位,lsw是ntp的低32位.
MswLsw2UnixNano 将ntp时间戳(高32位低32位分开的形式)转换为Unix时间戳.
Ntp2UnixNano 将ntp时间戳转换为Unix时间戳,Unix时间戳单位是纳秒.
ParseRtpPacket 函数调用结束后,不持有参数<b>的内存块.
ParseSr rfc3550 6.4.1
@param b rtcp包,包含包头.
SubSeq a减b的值,内部处理序号翻转问题,如果a小于b,则返回负值,见单元测试中的例子.
# Constants
MaxRtpRtcpPacketSize UDP接收时的buffer大小.
one packet, multiple nals.
1个rtp包包含多个帧,目前供h265的ap使用.
1个rtp包包含多个帧,目前供h264的stapa使用.
0xc9 Receiver Report.
0xc8 Sender Report.
# Structs
RtpPacketList rtp packet的有序链表,前面的seq小于后面的seq
为什么不用红黑树等查找性能更高的有序kv结构? 第一,容器有最大值,这个数量级用啥容器都差不多, 第二,插入时,99.99%的seq号是当前最大号附近的,遍历找就可以了, 注意,这个链表并不是一个定长容器,当数据有序时,容器内缓存的数据是一个帧的数据。.
# Type aliases
OnAvPacket
@param pkt:
pkt.Timestamp: RTP包头中的时间戳(pts)经过clockrate换算后的时间戳,单位毫秒。 注意,不支持带B帧的视频流,pts和dts永远相同。
pkt.PayloadType: base.AvPacketPTXXX。
pkt.Payload: AAC: 返回的是raw frame,一个AvPacket只包含一帧。 引用的是接收到的RTP包中的内存块。 AVC或HEVC: AVCC格式,每个NAL前包含4字节NAL的长度。 新申请的内存块,回调结束后,内部不再使用该内存块。 注意,这一层只做RTP包的合并,假如sps和pps是两个RTP single包,则合并结果为两个AvPacket, 假如sps和pps是一个stapA包,则合并结果为一个AvPacket。.