You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lal/pkg/rtprtcp/rtp.go

81 lines
1.9 KiB
Go

// Copyright 2020, Chef. All rights reserved.
// https://github.com/q191201771/lal
//
// Use of this source code is governed by a MIT-style license
// that can be found in the License file.
//
// Author: Chef (191201771@qq.com)
package rtprtcp
// rfc3984 5.2. Common Structure of the RTP Payload Format
// Table 1. Summary of NAL unit types and their payload structures
//
// Type Packet Type name Section
// ---------------------------------------------------------
// 0 undefined -
// 1-23 NAL unit Single NAL unit packet per H.264 5.6
// 24 STAP-A Single-time aggregation packet 5.7.1
// 25 STAP-B Single-time aggregation packet 5.7.1
// 26 MTAP16 Multi-time aggregation packet 5.7.2
// 27 MTAP24 Multi-time aggregation packet 5.7.2
// 28 FU-A Fragmentation unit 5.8
// 29 FU-B Fragmentation unit 5.8
// 30-31 undefined -
const (
NaluTypeAvcSingleMax = 23
NaluTypeAvcStapa = 24 // one packet, multiple nals
NaluTypeAvcFua = 28
// TODO(chef): hevc有stapa格式吗
NaluTypeHevcFua = 49
)
// 比较序号的值,内部处理序号翻转问题,见单元测试中的例子
// @return 0 a和b相等
// 1 a大于b
// -1 a小于b
func CompareSeq(a, b uint16) int {
if a == b {
return 0
}
if a > b {
if a-b < 16384 {
return 1
}
return -1
}
// must be a < b
if b-a < 16384 {
return -1
}
return 1
}
// a减b的值内部处理序号翻转问题如果a小于b则返回负值见单元测试中的例子
func SubSeq(a, b uint16) int {
if a == b {
return 0
}
if a > b {
d := a - b
if d < 16384 {
return int(d)
}
return int(d) - 65536
}
// must be a < b
d := b - a
if d < 16384 {
return -int(d)
}
return 65536 - int(d)
}