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

73 lines
2.5 KiB
Go

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// 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 修改配置项
//
// TODO(chef): [refactor] 重命名为WithAvPacketStreamOption 202301
//
WithOption(modOption func(option *AvPacketStreamOption))
// FeedAudioSpecificConfig 传入音频AAC的初始化数据
//
// @param asc:
//
// AudioSpecificConfig。含义可参考 aac.AscContext, aac.MakeAscWithAdtsHeader 等内容。
// 注意,调用 FeedAvPacket 传入AAC音频数据前需要先调用 FeedAudioSpecificConfig。
// FeedAudioSpecificConfig 在最开始总共调用一次,后面就可以一直调用 FeedAvPacket
//
FeedAudioSpecificConfig(asc []byte) error
// 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) error
}