-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
Copy pathtrack_local.go
128 lines (101 loc) · 4.53 KB
/
track_local.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
// SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
// SPDX-License-Identifier: MIT
package webrtc
import (
"github.com/pion/interceptor"
"github.com/pion/rtp"
)
// TrackLocalWriter is the Writer for outbound RTP Packets
type TrackLocalWriter interface {
// WriteRTP encrypts a RTP packet and writes to the connection
WriteRTP(header *rtp.Header, payload []byte) (int, error)
// Write encrypts and writes a full RTP packet
Write(b []byte) (int, error)
}
// TrackLocalContext is the Context passed when a TrackLocal has been Binded/Unbinded from a PeerConnection, and used
// in Interceptors.
type TrackLocalContext interface {
// CodecParameters returns the negotiated RTPCodecParameters. These are the codecs supported by both
// PeerConnections and the PayloadTypes
CodecParameters() []RTPCodecParameters
// HeaderExtensions returns the negotiated RTPHeaderExtensionParameters. These are the header extensions supported by
// both PeerConnections and the URI/IDs
HeaderExtensions() []RTPHeaderExtensionParameter
// SSRC returns the negotiated SSRC of this track
SSRC() SSRC
// SSRCRetransmission returns the negotiated SSRC used to send retransmissions for this track
SSRCRetransmission() SSRC
// SSRCForwardErrorCorrection returns the negotiated SSRC to send forward error correction for this track
SSRCForwardErrorCorrection() SSRC
// WriteStream returns the WriteStream for this TrackLocal. The implementer writes the outbound
// media packets to it
WriteStream() TrackLocalWriter
// ID is a unique identifier that is used for both Bind/Unbind
ID() string
// RTCPReader returns the RTCP interceptor for this TrackLocal. Used to read RTCP of this TrackLocal.
RTCPReader() interceptor.RTCPReader
}
type baseTrackLocalContext struct {
id string
params RTPParameters
ssrc, ssrcRTX, ssrcFEC SSRC
writeStream TrackLocalWriter
rtcpInterceptor interceptor.RTCPReader
}
// CodecParameters returns the negotiated RTPCodecParameters. These are the codecs supported by both
// PeerConnections and the SSRC/PayloadTypes
func (t *baseTrackLocalContext) CodecParameters() []RTPCodecParameters {
return t.params.Codecs
}
// HeaderExtensions returns the negotiated RTPHeaderExtensionParameters. These are the header extensions supported by
// both PeerConnections and the SSRC/PayloadTypes
func (t *baseTrackLocalContext) HeaderExtensions() []RTPHeaderExtensionParameter {
return t.params.HeaderExtensions
}
// SSRC requires the negotiated SSRC of this track
func (t *baseTrackLocalContext) SSRC() SSRC {
return t.ssrc
}
// SSRCRetransmission returns the negotiated SSRC used to send retransmissions for this track
func (t *baseTrackLocalContext) SSRCRetransmission() SSRC {
return t.ssrcRTX
}
// SSRCForwardErrorCorrection returns the negotiated SSRC to send forward error correction for this track
func (t *baseTrackLocalContext) SSRCForwardErrorCorrection() SSRC {
return t.ssrcFEC
}
// WriteStream returns the WriteStream for this TrackLocal. The implementer writes the outbound
// media packets to it
func (t *baseTrackLocalContext) WriteStream() TrackLocalWriter {
return t.writeStream
}
// ID is a unique identifier that is used for both Bind/Unbind
func (t *baseTrackLocalContext) ID() string {
return t.id
}
// RTCPReader returns the RTCP interceptor for this TrackLocal. Used to read RTCP of this TrackLocal.
func (t *baseTrackLocalContext) RTCPReader() interceptor.RTCPReader {
return t.rtcpInterceptor
}
// TrackLocal is an interface that controls how the user can send media
// The user can provide their own TrackLocal implementations, or use
// the implementations in pkg/media
type TrackLocal interface {
// Bind should implement the way how the media data flows from the Track to the PeerConnection
// This will be called internally after signaling is complete and the list of available
// codecs has been determined
Bind(TrackLocalContext) (RTPCodecParameters, error)
// Unbind should implement the teardown logic when the track is no longer needed. This happens
// because a track has been stopped.
Unbind(TrackLocalContext) error
// ID is the unique identifier for this Track. This should be unique for the
// stream, but doesn't have to globally unique. A common example would be 'audio' or 'video'
// and StreamID would be 'desktop' or 'webcam'
ID() string
// RID is the RTP Stream ID for this track.
RID() string
// StreamID is the group this track belongs too. This must be unique
StreamID() string
// Kind controls if this TrackLocal is audio or video
Kind() RTPCodecType
}