Documentation ¶
Index ¶
- Constants
- Variables
- func CompareSeq(a, b uint16) int
- func IsAvcBoundary(pkt RtpPacket) bool
- func IsAvcHevcBoundary(pkt RtpPacket, pt base.AvPacketPt) bool
- func IsHevcBoundary(pkt RtpPacket) bool
- func MswLsw2Ntp(msw, lsw uint64) uint64
- func MswLsw2UnixNano(msw, lsw uint64) uint64
- func Ntp2UnixNano(v uint64) uint64
- func SubSeq(a, b uint16) int
- type IRtpPackerPayload
- type IRtpUnpackContainer
- type IRtpUnpacker
- type IRtpUnpackerProtocol
- type ModRtpPackerOption
- type ModRtpPackerPayloadAvcHevcOption
- type OnAvPacket
- type Rr
- type RrProducer
- type RtcpHeader
- type RtpHeader
- type RtpPacker
- type RtpPackerOption
- type RtpPackerPayloadAac
- type RtpPackerPayloadAvcHevc
- func NewRtpPackerPayloadAvc(modOptions ...ModRtpPackerPayloadAvcHevcOption) *RtpPackerPayloadAvcHevc
- func NewRtpPackerPayloadAvcHevc(payloadType base.AvPacketPt, modOptions ...ModRtpPackerPayloadAvcHevcOption) *RtpPackerPayloadAvcHevc
- func NewRtpPackerPayloadHevc(modOptions ...ModRtpPackerPayloadAvcHevcOption) *RtpPackerPayloadAvcHevc
- type RtpPackerPayloadAvcHevcOption
- type RtpPackerPayloadAvcHevcType
- type RtpPacket
- type RtpPacketList
- type RtpPacketListItem
- type RtpUnpackContainer
- type RtpUnpackerAac
- type RtpUnpackerAvcHevc
- type Sr
Constants ¶
View Source
const ( RtcpPacketTypeSr = 200 // 0xc8 Sender Report RtcpPacketTypeRr = 201 // 0xc9 Receiver Report RtcpPacketTypeApp = 204 RtcpHeaderLength = 4 RtcpVersion = 2 )
View Source
const ( NaluTypeAvcSingleMax = 23 NaluTypeAvcStapa = 24 // one packet, multiple nals NaluTypeAvcFua = 28 // TODO(chef): hevc有stapa格式吗 NaluTypeHevcFua = 49 )
View Source
const ( RtpPackerPayloadAvcHevcTypeNalu RtpPackerPayloadAvcHevcType = 1 RtpPackerPayloadAvcHevcTypeAvcc = 2 RtpPackerPayloadAvcHevcTypeAnnexb = 3 )
View Source
const ( RtpFixedHeaderLength = 12 DefaultRtpVersion = 2 )
View Source
const ( PositionTypeSingle uint8 = 1 PositionTypeFuaStart uint8 = 2 PositionTypeFuaMiddle uint8 = 3 PositionTypeFuaEnd uint8 = 4 PositionTypeStapa uint8 = 5 )
View Source
const MaxRtpRtcpPacketSize = 1500
Variables ¶
View Source
var ErrRtcp = errors.New("lal.rtcp: fxxk")
View Source
var ErrRtp = errors.New("lal.rtp: fxxk")
Functions ¶
func IsAvcBoundary ¶ added in v0.24.1
func IsAvcHevcBoundary ¶ added in v0.24.1
func IsAvcHevcBoundary(pkt RtpPacket, pt base.AvPacketPt) bool
@param pt: 取值范围为AvPacketPtAvc或AvPacketPtHevc,否则直接返回false
func IsHevcBoundary ¶ added in v0.24.1
func MswLsw2Ntp ¶ added in v0.24.1
msw是ntp的高32位,lsw是ntp的低32位
func MswLsw2UnixNano ¶ added in v0.24.1
将ntp时间戳(高32位低32位分开的形式)转换为Unix时间戳
func Ntp2UnixNano ¶ added in v0.24.1
将ntp时间戳转换为Unix时间戳,Unix时间戳单位是纳秒
Types ¶
type IRtpPackerPayload ¶ added in v0.24.1
type IRtpUnpackContainer ¶ added in v0.24.1
type IRtpUnpackContainer interface {
Feed(pkt RtpPacket)
}
type IRtpUnpacker ¶ added in v0.24.1
type IRtpUnpacker interface { IRtpUnpackContainer }
func DefaultRtpUnpackerFactory ¶ added in v0.24.1
func DefaultRtpUnpackerFactory(payloadType base.AvPacketPt, clockRate int, maxSize int, onAvPacket OnAvPacket) IRtpUnpacker
目前支持AVC,HEVC和AAC MPEG4-GENERIC,业务方也可以自己实现IRtpUnpackerProtocol,甚至是IRtpUnpackContainer
type IRtpUnpackerProtocol ¶ added in v0.24.1
type IRtpUnpackerProtocol interface { // 计算rtp包处于帧中的位置 CalcPositionIfNeeded(pkt *RtpPacket) // 尝试合成一个完整帧 // // 从当前队列的第一个包开始合成 // 如果一个rtp包对应一个完整帧,则合成一帧 // 如果一个rtp包对应多个完整帧,则合成多帧 // 如果多个rtp包对应一个完整帧,则尝试合成一帧 // // @return unpackedFlag 本次调用是否成功合成 // @return unpackedSeq 如果成功合成,合成使用的最后一个seq号;如果失败,则为0 TryUnpackOne(list *RtpPacketList) (unpackedFlag bool, unpackedSeq uint16) }
type ModRtpPackerOption ¶ added in v0.24.1
type ModRtpPackerOption func(option *RtpPackerOption)
type ModRtpPackerPayloadAvcHevcOption ¶ added in v0.24.1
type ModRtpPackerPayloadAvcHevcOption func(option *RtpPackerPayloadAvcHevcOption)
type OnAvPacket ¶ added in v0.24.1
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
type RrProducer ¶ added in v0.24.1
type RrProducer struct {
// contains filtered or unexported fields
}
func NewRrProducer ¶ added in v0.24.1
func NewRrProducer(clockRate int) *RrProducer
func (*RrProducer) FeedRtpPacket ¶ added in v0.24.1
func (r *RrProducer) FeedRtpPacket(seq uint16)
每次收到rtp包,都将seq序号传入这个函数
func (*RrProducer) Produce ¶ added in v0.24.1
func (r *RrProducer) Produce(lsr uint32) []byte
收到sr包时,产生rr包
@param lsr: 从sr包中获取,见func SR.GetMiddleNtp @return: rr包的二进制数据
type RtcpHeader ¶ added in v0.24.1
type RtcpHeader struct { Version uint8 // 2b Padding uint8 // 1b CountOrFormat uint8 // 5b PacketType uint8 // 8b Length uint16 // 16b, whole packet byte length = (Length+1) * 4 }
func ParseRtcpHeader ¶ added in v0.24.1
func ParseRtcpHeader(b []byte) RtcpHeader
func (*RtcpHeader) PackTo ¶ added in v0.24.1
func (r *RtcpHeader) PackTo(out []byte)
@param out 传出参数,注意,调用方保证长度>=4
type RtpHeader ¶ added in v0.24.1
type RtpHeader struct { Version uint8 // 2b * Padding uint8 // 1b Extension uint8 // 1 CsrcCount uint8 // 4b Mark uint8 // 1b * PacketType uint8 // 7b Seq uint16 // 16b ** Timestamp uint32 // 32b **** samples Ssrc uint32 // 32b **** Synchronization source // contains filtered or unexported fields }
func MakeDefaultRtpHeader ¶ added in v0.24.1
func MakeDefaultRtpHeader() RtpHeader
func ParseRtpHeader ¶ added in v0.24.1
type RtpPacker ¶ added in v0.24.1
type RtpPacker struct {
// contains filtered or unexported fields
}
func NewRtpPacker ¶ added in v0.24.1
func NewRtpPacker(payloadPacker IRtpPackerPayload, clockRate int, ssrc uint32, modOptions ...ModRtpPackerOption) *RtpPacker
type RtpPackerOption ¶ added in v0.24.1
type RtpPackerPayloadAac ¶ added in v0.24.1
type RtpPackerPayloadAac struct { }
func NewRtpPackerPayloadAac ¶ added in v0.24.1
func NewRtpPackerPayloadAac() *RtpPackerPayloadAac
type RtpPackerPayloadAvcHevc ¶ added in v0.24.1
type RtpPackerPayloadAvcHevc struct {
// contains filtered or unexported fields
}
func NewRtpPackerPayloadAvc ¶ added in v0.24.1
func NewRtpPackerPayloadAvc(modOptions ...ModRtpPackerPayloadAvcHevcOption) *RtpPackerPayloadAvcHevc
func NewRtpPackerPayloadAvcHevc ¶ added in v0.24.1
func NewRtpPackerPayloadAvcHevc(payloadType base.AvPacketPt, modOptions ...ModRtpPackerPayloadAvcHevcOption) *RtpPackerPayloadAvcHevc
func NewRtpPackerPayloadHevc ¶ added in v0.24.1
func NewRtpPackerPayloadHevc(modOptions ...ModRtpPackerPayloadAvcHevcOption) *RtpPackerPayloadAvcHevc
type RtpPackerPayloadAvcHevcOption ¶ added in v0.24.1
type RtpPackerPayloadAvcHevcOption struct {
Typ RtpPackerPayloadAvcHevcType
}
type RtpPackerPayloadAvcHevcType ¶ added in v0.24.1
type RtpPackerPayloadAvcHevcType int
type RtpPacket ¶ added in v0.24.1
type RtpPacket struct { Header RtpHeader Raw []byte // 包含header内存 // contains filtered or unexported fields }
func MakeRtpPacket ¶ added in v0.24.1
func ParseRtpPacket ¶ added in v0.24.1
函数调用结束后,不持有参数<b>的内存块
type RtpPacketList ¶ added in v0.24.1
type RtpPacketList struct { Head RtpPacketListItem // 哨兵,自身不存放rtp包,第一个rtp包存在在head.next中 Size int // 实际元素个数 }
type RtpPacketListItem ¶ added in v0.24.1
type RtpPacketListItem struct { Packet RtpPacket Next *RtpPacketListItem }
type RtpUnpackContainer ¶ added in v0.24.1
type RtpUnpackContainer struct {
// contains filtered or unexported fields
}
func NewRtpUnpackContainer ¶ added in v0.24.1
func NewRtpUnpackContainer(maxSize int, unpackerProtocol IRtpUnpackerProtocol) *RtpUnpackContainer
func (*RtpUnpackContainer) Feed ¶ added in v0.24.1
func (r *RtpUnpackContainer) Feed(pkt RtpPacket)
输入收到的rtp包
type RtpUnpackerAac ¶ added in v0.24.1
type RtpUnpackerAac struct {
// contains filtered or unexported fields
}
func NewRtpUnpackerAac ¶ added in v0.24.1
func NewRtpUnpackerAac(payloadType base.AvPacketPt, clockRate int, onAvPacket OnAvPacket) *RtpUnpackerAac
func (*RtpUnpackerAac) CalcPositionIfNeeded ¶ added in v0.24.1
func (unpacker *RtpUnpackerAac) CalcPositionIfNeeded(pkt *RtpPacket)
func (*RtpUnpackerAac) TryUnpackOne ¶ added in v0.24.1
func (unpacker *RtpUnpackerAac) TryUnpackOne(list *RtpPacketList) (unpackedFlag bool, unpackedSeq uint16)
type RtpUnpackerAvcHevc ¶ added in v0.24.1
type RtpUnpackerAvcHevc struct {
// contains filtered or unexported fields
}
func NewRtpUnpackerAvcHevc ¶ added in v0.24.1
func NewRtpUnpackerAvcHevc(payloadType base.AvPacketPt, clockRate int, onAvPacket OnAvPacket) *RtpUnpackerAvcHevc
func (*RtpUnpackerAvcHevc) CalcPositionIfNeeded ¶ added in v0.24.1
func (unpacker *RtpUnpackerAvcHevc) CalcPositionIfNeeded(pkt *RtpPacket)
func (*RtpUnpackerAvcHevc) TryUnpackOne ¶ added in v0.24.1
func (unpacker *RtpUnpackerAvcHevc) TryUnpackOne(list *RtpPacketList) (unpackedFlag bool, unpackedSeq uint16)
Click to show internal directories.
Click to hide internal directories.