-
Notifications
You must be signed in to change notification settings - Fork 458
/
avpacket_stream.go
72 lines (63 loc) · 2.55 KB
/
avpacket_stream.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// 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
}