-
Notifications
You must be signed in to change notification settings - Fork 458
/
avpacket.go
74 lines (60 loc) · 2.14 KB
/
avpacket.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
73
74
// 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 base
import (
"encoding/hex"
"fmt"
"github.com/q191201771/naza/pkg/nazabytes"
)
// ---------------------------------------------------------------------------------------------------------------------
type AvPacketPt int
const (
AvPacketPtUnknown AvPacketPt = -1
AvPacketPtG711U AvPacketPt = 0 // g711u
AvPacketPtG711A AvPacketPt = 8 // g711a
AvPacketPtAvc AvPacketPt = 96 // h264
AvPacketPtHevc AvPacketPt = 98 // h265
AvPacketPtAac AvPacketPt = 97 // aac
AvPacketPtOpus AvPacketPt = 101 // opus
)
func (a AvPacketPt) ReadableString() string {
switch a {
case AvPacketPtUnknown:
return "unknown"
case AvPacketPtAvc:
return "h264"
case AvPacketPtHevc:
return "h265"
case AvPacketPtAac:
return "aac"
}
return ""
}
// ---------------------------------------------------------------------------------------------------------------------
// AvPacket
//
// 不同场景使用时,字段含义可能不同。
// 使用 AvPacket 的地方,应注明各字段的含义。
type AvPacket struct {
PayloadType AvPacketPt
Timestamp int64 // 如无特殊说明,此字段是Dts
Pts int64
Payload []byte
}
func (packet *AvPacket) IsAudio() bool {
return packet.PayloadType == AvPacketPtAac || packet.PayloadType == AvPacketPtG711A || packet.PayloadType == AvPacketPtG711U || packet.PayloadType == AvPacketPtOpus
}
func (packet *AvPacket) IsVideo() bool {
return packet.PayloadType == AvPacketPtAvc || packet.PayloadType == AvPacketPtHevc
}
func (packet *AvPacket) DebugString() string {
return fmt.Sprintf("[%p] type=%s, timestamp=%d, pts=%d, len=%d, payload=%s",
packet, packet.PayloadType.ReadableString(), packet.Timestamp, packet.Pts, len(packet.Payload), hex.Dump(nazabytes.Prefix(packet.Payload, 32)))
}
// ---------------------------------------------------------------------------------------------------------------------
type OnAvPacketFunc func(packet *AvPacket)