编码格式
引用路径
import "github.com/Monibuca/engine/avformat"
AVPacket
type AVPacket struct {
Timestamp uint32
Type byte //8 audio,9 video
IsSequence bool //序列帧
IsKeyFrame bool//是否为关键帧
Payload []byte
Number int //编号,audio和video独立编号
}
func (av *AVPacket) VideoFrameType() bool
func NewAVPacket(avType byte) (p *AVPacket)
func (av *AVPacket) Recycle()
func (av *AVPacket) ADTS2ASC() (tagPacket *AVPacket)
这个是音视频数据的通用结构体
- Timestamp 是发布者提供的时间戳
- Type 代表音频还是视频
- IsSequence 代表是否是AAC或者AVC的Sequence头
- IsADTS 代表AAC头是否使用ADTS格式
- VideoFrameType 代表视频帧类型1为关键帧,2为普通帧
- Payload 音频或者视频的裸数据
- IsKeyFrame 用来判断是否是关键帧
- ADTS2ASC 将AAC的ADTS头转换成AudioSpecificConfig格式
SendPacket
type SendPacket struct {
Timestamp uint32
*AVPacket
}
func (packet *SendPacket) Recycle() {
packet.Packet.Recycle()
SendPacketPool.Put(packet)
}
func NewSendPacket(p *AVPacket, timestamp uint32) (result *SendPacket) {
result = SendPacketPool.Get().(*SendPacket)
result.AVPacket = p
result.Timestamp = timestamp
return
}
该结构体用于在不同的协议中传输使用,本质上就是复用了AVPacket,只是不同的订阅者的时间戳不同。所以需要增加一层时间戳。