forked from wernerd/GoRTP
-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathpayload.go
145 lines (138 loc) · 7.19 KB
/
payload.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
// Copyright (C) 2011 Werner Dittmann
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// Authors: Werner Dittmann <[email protected]>
//
package rtp
// For full reference of registered RTP parameters and payload types refer to:
// http://www.iana.org/assignments/rtp-parameters
// Registry:
// PT encoding name audio/video (A/V) clock rate (Hz) channels (audio) Reference
// -------- -------------- ----------------- --------------- ---------------- ---------
// 0 PCMU A 8000 1 [RFC3551]
// 1 Reserved
// 2 Reserved
// 3 GSM A 8000 1 [RFC3551]
// 4 G723 A 8000 1 [Kumar][RFC3551]
// 5 DVI4 A 8000 1 [RFC3551]
// 6 DVI4 A 16000 1 [RFC3551]
// 7 LPC A 8000 1 [RFC3551]
// 8 PCMA A 8000 1 [RFC3551]
// 9 G722 A 8000 1 [RFC3551]
// 10 L16 A 44100 2 [RFC3551]
// 11 L16 A 44100 1 [RFC3551]
// 12 QCELP A 8000 1 [RFC3551]
// 13 CN A 8000 1 [RFC3389]
// 14 MPA A 90000 [RFC3551][RFC2250]
// 15 G728 A 8000 1 [RFC3551]
// 16 DVI4 A 11025 1 [DiPol]
// 17 DVI4 A 22050 1 [DiPol]
// 18 G729 A 8000 1 [RFC3551]
// 19 Reserved A
// 20 Unassigned A
// 21 Unassigned A
// 22 Unassigned A
// 23 Unassigned A
// 24 Unassigned V
// 25 CelB V 90000 [RFC2029]
// 26 JPEG V 90000 [RFC2435]
// 27 Unassigned V
// 28 nv V 90000 [RFC3551]
// 29 Unassigned V
// 30 Unassigned V
// 31 H261 V 90000 [RFC4587]
// 32 MPV V 90000 [RFC2250]
// 33 MP2T AV 90000 [RFC2250]
// 34 H263 V 90000 [Zhu]
// 35-71 Unassigned ?
// 72-76 Reserved for RTCP conflict avoidance [RFC3551]
// 77-95 Unassigned ?
// 96-127 dynamic ? [RFC3551]
const (
Audio = 1
Video = 2
)
// PayloadFormat holds RTP payload formats.
//
// The global variable PayloadFormatMap holds the well known payload formats
// (see http://www.iana.org/assignments/rtp-parameters).
// Applications shall not alter these predefined formats.
//
// If an application needs additional payload formats it must create and populate
// PayloadFormat structures and insert them into PayloadFormatMap before setting
// up the RTP communication. The index (key) into the map must be the payload
// format number. For dynamic payload formats applications shall use payload
// format numbers between 96 and 127 only.
//
// For example if a dynamic format uses the payload number 98 then the application
// may perform:
//
// PayloadFormatMap[98] = &net.rtp.PayloadFormat{98, net.rtp.Audio, 41000, 2, "CD"}
//
type PayloadFormat struct {
TypeNumber,
MediaType,
ClockRate,
Channels int
Name string
}
type payloadMap map[int]*PayloadFormat
var PayloadFormatMap = make(payloadMap, 128)
func init() {
PayloadFormatMap[0] = &PayloadFormat{0, Audio, 8000, 1, "PCMU"}
// 1 Reserved
// 2 Reserved
PayloadFormatMap[3] = &PayloadFormat{3, Audio, 8000, 1, "GSM"}
PayloadFormatMap[4] = &PayloadFormat{4, Audio, 8000, 1, "G723"}
PayloadFormatMap[5] = &PayloadFormat{5, Audio, 8000, 1, "DVI4"}
PayloadFormatMap[6] = &PayloadFormat{6, Audio, 16000, 1, "DVI4"}
PayloadFormatMap[7] = &PayloadFormat{7, Audio, 8000, 1, "LPC"}
PayloadFormatMap[8] = &PayloadFormat{8, Audio, 8000, 1, "PCMA"}
PayloadFormatMap[9] = &PayloadFormat{9, Audio, 8000, 1, "G722"}
PayloadFormatMap[10] = &PayloadFormat{10, Audio, 44100, 2, "L16"}
PayloadFormatMap[11] = &PayloadFormat{11, Audio, 44100, 1, "L16"}
PayloadFormatMap[12] = &PayloadFormat{12, Audio, 8000, 1, "QCELP"}
PayloadFormatMap[13] = &PayloadFormat{13, Audio, 8000, 1, "CN"}
PayloadFormatMap[14] = &PayloadFormat{14, Audio, 90000, 0, "MPA"}
PayloadFormatMap[15] = &PayloadFormat{15, Audio, 8000, 1, "G728"}
PayloadFormatMap[16] = &PayloadFormat{16, Audio, 11025, 1, "DVI4"}
PayloadFormatMap[17] = &PayloadFormat{17, Audio, 22050, 1, "DVI4"}
PayloadFormatMap[18] = &PayloadFormat{18, Audio, 8000, 1, "G729"}
// 19 Reserved A
// 20 Unassigned A
// 21 Unassigned A
// 22 Unassigned A
// 23 Unassigned A
// 24 Unassigned V
PayloadFormatMap[25] = &PayloadFormat{25, Video, 90000, 0, "CelB"}
PayloadFormatMap[26] = &PayloadFormat{26, Video, 90000, 0, "JPEG"}
// 27 Unassigned V
PayloadFormatMap[28] = &PayloadFormat{28, Video, 90000, 0, "nv"}
// 29 Unassigned V
// 30 Unassigned V
PayloadFormatMap[31] = &PayloadFormat{31, Video, 90000, 0, "H261"}
PayloadFormatMap[32] = &PayloadFormat{32, Video, 90000, 0, "MPV"}
PayloadFormatMap[33] = &PayloadFormat{33, Audio | Video, 90000, 0, "MP2T"}
PayloadFormatMap[34] = &PayloadFormat{34, Video, 90000, 0, "H263"}
// 35-71 Unassigned ?
// 72-76 Reserved for RTCP conflict avoidance
// 77-95 Unassigned ?
// 96-127 dynamic ?
PayloadFormatMap[96] = &PayloadFormat{96, Video, 90000, 0, "H264"}
PayloadFormatMap[97] = &PayloadFormat{97, Audio, 90000, 0, "DYN1"}
PayloadFormatMap[98] = &PayloadFormat{98, Audio, 90000, 0, "DYN2"}
PayloadFormatMap[99] = &PayloadFormat{99, Audio, 90000, 0, "DYN3"}
PayloadFormatMap[100] = &PayloadFormat{100, Audio, 90000, 0, "DYN4"}
}