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/base/avpacket_stream.go

71 lines
2.5 KiB
Go

// Copyright 2022, 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 base
type (
AvPacketStreamAudioFormat int
AvPacketStreamVideoFormat int
)
const (
AvPacketStreamAudioFormatUnknown AvPacketStreamAudioFormat = 0
AvPacketStreamAudioFormatRawAac AvPacketStreamAudioFormat = 1
AvPacketStreamAudioFormatAdtsAac AvPacketStreamAudioFormat = 2
AvPacketStreamVideoFormatUnknown AvPacketStreamVideoFormat = 0
AvPacketStreamVideoFormatAvcc AvPacketStreamVideoFormat = 1
AvPacketStreamVideoFormatAnnexb AvPacketStreamVideoFormat = 2
)
type AvPacketStreamOption struct {
AudioFormat AvPacketStreamAudioFormat
VideoFormat AvPacketStreamVideoFormat // 视频流的格式,注意,不是指编码格式,而是编码格式确定后,流的格式
}
var DefaultApsOption = AvPacketStreamOption{
AudioFormat: AvPacketStreamAudioFormatRawAac,
VideoFormat: AvPacketStreamVideoFormatAvcc,
}
type IAvPacketStream interface {
// WithOption 修改配置项
//
WithOption(modOption func(option *AvPacketStreamOption))
// FeedAudioSpecificConfig 传入音频AAC的初始化数据
//
// @param asc:
//
// AudioSpecificConfig。含义可参考 aac.AscContext, aac.MakeAscWithAdtsHeader 等内容。
// 注意,调用 FeedAvPacket 传入AAC音频数据前需要先调用 FeedAudioSpecificConfig。
// FeedAudioSpecificConfig 在最开始总共调用一次,后面就可以一直调用 FeedAvPacket
//
FeedAudioSpecificConfig(asc []byte)
// FeedAvPacket
//
// @param packet:
//
// PayloadType: 类型支持avc(h264)hevc(h265)aac
//
// Timestamp: 时间戳单位毫秒。注意是累计递增值不是单个包的duration时长。
//
// Payload: 音视频数据,格式如下
//
// 如果是音频AAC格式是裸数据不需要adts头。
// 注意,调用 FeedAvPacket 传入AAC音频数据前需要先调用 FeedAudioSpecificConfig。
// FeedAudioSpecificConfig 在最开始总共调用一次,后面就可以一直调用 FeedAvPacket
//
// 如果是视频支持Avcc和Annexb两种格式。
// Avcc也即[<4字节长度 + nal>...]Annexb也即[<4字节start code 00 00 00 01 + nal>...]。
// 注意sps和pps也通过 FeedAvPacket 传入。sps和pps可以单独调用 FeedAvPacket也可以sps+pps+I帧组合在一起调用一次 FeedAvPacket
//
FeedAvPacket(packet AvPacket)
}