| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- // 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 SSRC/PayloadTypes
- CodecParameters() []RTPCodecParameters
- // HeaderExtensions returns the negotiated RTPHeaderExtensionParameters. These are the header extensions supported by
- // both PeerConnections and the SSRC/PayloadTypes
- HeaderExtensions() []RTPHeaderExtensionParameter
- // SSRC requires the negotiated SSRC of this track
- // This track may have multiple if RTX is enabled
- SSRC() 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 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
- // This track may have multiple if RTX is enabled
- func (t *baseTrackLocalContext) SSRC() SSRC {
- return t.ssrc
- }
- // 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
- }
|