/
rtp_header_extension_ids.go
77 lines (71 loc) · 2.24 KB
/
rtp_header_extension_ids.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
package rtc
import (
"fmt"
"github.com/byyam/mediasoup-go-worker/mserror"
"github.com/byyam/mediasoup-go-worker/pkg/mediasoupdata"
)
type RtpHeaderExtensionIds struct {
Mid uint8
Rid uint8
RRid uint8
AbsSendTime uint8
TransportWideCc01 uint8
FrameMarking07 uint8
FrameMarking uint8
SsrcAudioLevel uint8
VideoOrientation uint8
TOffset uint8
AbsCaptureTime uint8
}
func (r *RtpHeaderExtensionIds) set(headerExtensions []mediasoupdata.RtpHeaderExtensionParameters, isProducer bool) error {
fn := func(ext mediasoupdata.RtpHeaderExtensionParameters) {
ext.Type = mediasoupdata.GetRtpHeaderExtensionUri(ext.Uri)
if r.Mid == 0 && ext.Type == mediasoupdata.MID {
r.Mid = uint8(ext.Id)
}
if r.Rid == 0 && ext.Type == mediasoupdata.RTP_STREAM_ID {
r.Rid = uint8(ext.Id)
}
if r.RRid == 0 && ext.Type == mediasoupdata.REPAIRED_RTP_STREAM_ID {
r.RRid = uint8(ext.Id)
}
if r.AbsSendTime == 0 && ext.Type == mediasoupdata.ABS_SEND_TIME {
r.AbsSendTime = uint8(ext.Id)
}
if r.TransportWideCc01 == 0 && ext.Type == mediasoupdata.TRANSPORT_WIDE_CC_01 {
r.TransportWideCc01 = uint8(ext.Id)
}
// NOTE: Remove this once framemarking draft becomes RFC.
if r.FrameMarking07 == 0 && ext.Type == mediasoupdata.FRAME_MARKING_07 && isProducer {
r.FrameMarking07 = uint8(ext.Id)
}
if r.FrameMarking == 0 && ext.Type == mediasoupdata.FRAME_MARKING && isProducer {
r.FrameMarking = uint8(ext.Id)
}
if r.SsrcAudioLevel == 0 && ext.Type == mediasoupdata.SSRC_AUDIO_LEVEL {
r.SsrcAudioLevel = uint8(ext.Id)
}
if r.VideoOrientation == 0 && ext.Type == mediasoupdata.VIDEO_ORIENTATION {
r.VideoOrientation = uint8(ext.Id)
}
if r.TOffset == 0 && ext.Type == mediasoupdata.TOFFSET && isProducer {
r.TOffset = uint8(ext.Id)
}
if r.AbsCaptureTime == 0 && ext.Type == mediasoupdata.ABS_CAPTURE_TIME && isProducer {
r.AbsCaptureTime = uint8(ext.Id)
}
}
for _, ext := range headerExtensions {
if ext.Id == 0 {
return mserror.ErrInvalidParam
}
fn(ext)
}
return nil
}
func (r *RtpHeaderExtensionIds) String() string {
out := "RtpHeaderExtensionIds:\n"
out += fmt.Sprintf("\tMID:%d\n", r.Mid)
out += fmt.Sprintf("\tRID:%d\n", r.Rid)
return out
}