Documentation
¶
Overview ¶
Package rtp provides RTP packetizer and depacketizer
Index ¶
- Constants
- Variables
- func WithPayloadType(pt uint8) func(*packetizer)
- func WithSSRC(ssrc uint32) func(*packetizer)
- func WithTimestamp(timestamp uint32) func(*packetizer)
- type AbsCaptureTimeExtension
- type AbsSendTimeExtension
- type AudioLevelExtension
- type Depacketizer
- type Extension
- type Header
- func (h Header) Clone() Header
- func (h *Header) DelExtension(id uint8) error
- func (h *Header) GetExtension(id uint8) []byte
- func (h *Header) GetExtensionIDs() []uint8
- func (h Header) Marshal() (buf []byte, err error)
- func (h Header) MarshalSize() int
- func (h Header) MarshalTo(buf []byte) (n int, err error)
- func (h *Header) SetExtension(id uint8, payload []byte) error
- func (h *Header) Unmarshal(buf []byte) (n int, err error)
- type HeaderExtension
- type OneByteHeaderExtension
- func (e *OneByteHeaderExtension) Del(id uint8) error
- func (e *OneByteHeaderExtension) Get(id uint8) []byte
- func (e *OneByteHeaderExtension) GetIDs() []uint8
- func (e OneByteHeaderExtension) Marshal() ([]byte, error)
- func (e OneByteHeaderExtension) MarshalSize() int
- func (e OneByteHeaderExtension) MarshalTo(buf []byte) (int, error)
- func (e *OneByteHeaderExtension) Set(id uint8, buf []byte) error
- func (e *OneByteHeaderExtension) Unmarshal(buf []byte) (int, error)
- type Packet
- type Packetizer
- type PacketizerOption
- type PartitionHeadChecker
- type Payloader
- type PlayoutDelayExtension
- type RawExtension
- func (e *RawExtension) Del(id uint8) error
- func (e *RawExtension) Get(id uint8) []byte
- func (e *RawExtension) GetIDs() []uint8
- func (e RawExtension) Marshal() ([]byte, error)
- func (e RawExtension) MarshalSize() int
- func (e RawExtension) MarshalTo(buf []byte) (int, error)
- func (e *RawExtension) Set(id uint8, payload []byte) error
- func (e *RawExtension) Unmarshal(buf []byte) (int, error)
- type Sequencer
- type SpatialLayer
- type TransportCCExtension
- type TwoByteHeaderExtension
- func (e *TwoByteHeaderExtension) Del(id uint8) error
- func (e *TwoByteHeaderExtension) Get(id uint8) []byte
- func (e *TwoByteHeaderExtension) GetIDs() []uint8
- func (e TwoByteHeaderExtension) Marshal() ([]byte, error)
- func (e TwoByteHeaderExtension) MarshalSize() int
- func (e TwoByteHeaderExtension) MarshalTo(buf []byte) (int, error)
- func (e *TwoByteHeaderExtension) Set(id uint8, buf []byte) error
- func (e *TwoByteHeaderExtension) Unmarshal(buf []byte) (int, error)
- type VLA
Constants ¶
const ( // PayloadTypePCMU is a payload type for ITU-T G.711 PCM μ-Law audio 64 kbit/s (RFC 3551). PayloadTypePCMU = 0 // PayloadTypeGSM is a payload type for European GSM Full Rate audio 13 kbit/s (GSM 06.10). PayloadTypeGSM = 3 // PayloadTypeG723 is a payload type for ITU-T G.723.1 audio (RFC 3551). PayloadTypeG723 = 4 // PayloadTypeDVI4_8000 is a payload type for IMA ADPCM audio 32 kbit/s (RFC 3551). PayloadTypeDVI4_8000 = 5 // PayloadTypeDVI4_16000 is a payload type for IMA ADPCM audio 64 kbit/s (RFC 3551). PayloadTypeDVI4_16000 = 6 // PayloadTypeLPC is a payload type for Experimental Linear Predictive Coding audio 5.6 kbit/s (RFC 3551). PayloadTypeLPC = 7 // PayloadTypePCMA is a payload type for ITU-T G.711 PCM A-Law audio 64 kbit/s (RFC 3551). PayloadTypePCMA = 8 // PayloadTypeG722 is a payload type for ITU-T G.722 audio 64 kbit/s (RFC 3551). PayloadTypeG722 = 9 // PayloadTypeL16Stereo is a payload type for Linear PCM 16-bit Stereo audio 1411.2 kbit/s, uncompressed (RFC 3551). PayloadTypeL16Stereo = 10 // PayloadTypeL16Mono is a payload type for Linear PCM 16-bit audio 705.6 kbit/s, uncompressed (RFC 3551). PayloadTypeL16Mono = 11 // PayloadTypeQCELP is a payload type for Qualcomm Code Excited Linear Prediction (RFC 2658, RFC 3551). PayloadTypeQCELP = 12 // PayloadTypeCN is a payload type for Comfort noise (RFC 3389). PayloadTypeCN = 13 // PayloadTypeMPA is a payload type for MPEG-1 or MPEG-2 audio only (RFC 3551, RFC 2250). PayloadTypeMPA = 14 // PayloadTypeG728 is a payload type for ITU-T G.728 audio 16 kbit/s (RFC 3551). PayloadTypeG728 = 15 // PayloadTypeDVI4_11025 is a payload type for IMA ADPCM audio 44.1 kbit/s (RFC 3551). PayloadTypeDVI4_11025 = 16 // PayloadTypeDVI4_22050 is a payload type for IMA ADPCM audio 88.2 kbit/s (RFC 3551). PayloadTypeDVI4_22050 = 17 // PayloadTypeG729 is a payload type for ITU-T G.729 and G.729a audio 8 kbit/s (RFC 3551, RFC 3555). PayloadTypeG729 = 18 )
Audio Payload Types as defined in https://www.iana.org/assignments/rtp-parameters/rtp-parameters.xhtml
const ( // PayloadTypeCELLB is a payload type for Sun CellB video (RFC 2029). PayloadTypeCELLB = 25 // PayloadTypeJPEG is a payload type for JPEG video (RFC 2435). PayloadTypeJPEG = 26 // PayloadTypeNV is a payload type for Xerox PARC's Network Video (nv, RFC 3551). PayloadTypeNV = 28 // PayloadTypeH261 is a payload type for ITU-T H.261 video (RFC 4587). PayloadTypeH261 = 31 // PayloadTypeMPV is a payload type for MPEG-1 and MPEG-2 video (RFC 2250). PayloadTypeMPV = 32 // PayloadTypeMP2T is a payload type for MPEG-2 transport stream (RFC 2250). PayloadTypeMP2T = 33 // PayloadTypeH263 is a payload type for H.263 video, first version (1996, RFC 3551, RFC 2190). PayloadTypeH263 = 34 )
Video Payload Types as defined in https://www.iana.org/assignments/rtp-parameters/rtp-parameters.xhtml
const (
// PayloadTypeFirstDynamic is a first non-static payload type.
PayloadTypeFirstDynamic = 35
)
Variables ¶
var ( // ErrVLATooShort is returned when payload is too short. ErrVLATooShort = errors.New("VLA payload too short") // ErrVLAInvalidStreamCount is returned when RTP stream count is invalid. ErrVLAInvalidStreamCount = errors.New("invalid RTP stream count in VLA") // ErrVLAInvalidStreamID is returned when RTP stream ID is invalid. ErrVLAInvalidStreamID = errors.New("invalid RTP stream ID in VLA") // ErrVLAInvalidSpatialID is returned when spatial ID is invalid. ErrVLAInvalidSpatialID = errors.New("invalid spatial ID in VLA") // ErrVLADuplicateSpatialID is returned when spatial ID is invalid. ErrVLADuplicateSpatialID = errors.New("duplicate spatial ID in VLA") // ErrVLAInvalidTemporalLayer is returned when temporal layer is invalid. ErrVLAInvalidTemporalLayer = errors.New("invalid temporal layer in VLA") )
Functions ¶
func WithPayloadType ¶
func WithPayloadType(pt uint8) func(*packetizer)
WithPayloadType sets the PayloadType for the Packetizer.
func WithSSRC ¶
func WithSSRC(ssrc uint32) func(*packetizer)
WithSSRC sets the SSRC for the Packetizer.
func WithTimestamp ¶
func WithTimestamp(timestamp uint32) func(*packetizer)
WithTimestamp sets the initial Timestamp for the Packetizer.
Types ¶
type AbsCaptureTimeExtension ¶
AbsCaptureTimeExtension is a extension payload format in. http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ID | len=7 | absolute capture timestamp (bit 0-23) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | absolute capture timestamp (bit 24-55) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... (56-63) | +-+-+-+-+-+-+-+-+ .
func NewAbsCaptureTimeExtension ¶
func NewAbsCaptureTimeExtension(captureTime time.Time) *AbsCaptureTimeExtension
NewAbsCaptureTimeExtension makes new AbsCaptureTimeExtension from time.Time.
func NewAbsCaptureTimeExtensionWithCaptureClockOffset ¶
func NewAbsCaptureTimeExtensionWithCaptureClockOffset( captureTime time.Time, captureClockOffset time.Duration, ) *AbsCaptureTimeExtension
NewAbsCaptureTimeExtensionWithCaptureClockOffset makes new AbsCaptureTimeExtension from time.Time and a clock offset.
func (AbsCaptureTimeExtension) CaptureTime ¶
func (t AbsCaptureTimeExtension) CaptureTime() time.Time
CaptureTime produces the estimated time.Time represented by this extension.
func (AbsCaptureTimeExtension) EstimatedCaptureClockOffsetDuration ¶
func (t AbsCaptureTimeExtension) EstimatedCaptureClockOffsetDuration() *time.Duration
EstimatedCaptureClockOffsetDuration produces the estimated time.Duration represented by this extension.
func (AbsCaptureTimeExtension) Marshal ¶
func (t AbsCaptureTimeExtension) Marshal() ([]byte, error)
Marshal serializes the members to buffer.
func (*AbsCaptureTimeExtension) Unmarshal ¶
func (t *AbsCaptureTimeExtension) Unmarshal(rawData []byte) error
Unmarshal parses the passed byte slice and stores the result in the members.
type AbsSendTimeExtension ¶
type AbsSendTimeExtension struct {
Timestamp uint64
}
AbsSendTimeExtension is a extension payload format in http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
func NewAbsSendTimeExtension ¶
func NewAbsSendTimeExtension(sendTime time.Time) *AbsSendTimeExtension
NewAbsSendTimeExtension makes new AbsSendTimeExtension from time.Time.
func (*AbsSendTimeExtension) Estimate ¶
func (t *AbsSendTimeExtension) Estimate(receive time.Time) time.Time
Estimate absolute send time according to the receive time. Note that if the transmission delay is larger than 64 seconds, estimated time will be wrong.
func (AbsSendTimeExtension) Marshal ¶
func (t AbsSendTimeExtension) Marshal() ([]byte, error)
Marshal serializes the members to buffer.
func (*AbsSendTimeExtension) Unmarshal ¶
func (t *AbsSendTimeExtension) Unmarshal(rawData []byte) error
Unmarshal parses the passed byte slice and stores the result in the members.
type AudioLevelExtension ¶
AudioLevelExtension is a extension payload format described in https://tools.ietf.org/html/rfc6464
Implementation based on: https://chromium.googlesource.com/external/webrtc/+/e2a017725570ead5946a4ca8235af27470ca0df9/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc#49
One byte format: 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ID | len=0 |V| level | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Two byte format: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ID | len=1 |V| level | 0 (pad) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
func (AudioLevelExtension) Marshal ¶
func (a AudioLevelExtension) Marshal() ([]byte, error)
Marshal serializes the members to buffer.
func (*AudioLevelExtension) Unmarshal ¶
func (a *AudioLevelExtension) Unmarshal(rawData []byte) error
Unmarshal parses the passed byte slice and stores the result in the members.
type Depacketizer ¶
type Depacketizer interface {
// Unmarshal parses the RTP payload and returns media.
// Metadata may be stored on the Depacketizer itself
Unmarshal(packet []byte) ([]byte, error)
// Checks if the packet is at the beginning of a partition. This
// should return false if the result could not be determined, in
// which case the caller will detect timestamp discontinuities.
IsPartitionHead(payload []byte) bool
// Checks if the packet is at the end of a partition. This should
// return false if the result could not be determined.
IsPartitionTail(marker bool, payload []byte) bool
}
Depacketizer depacketizes a RTP payload, removing any RTP specific data from the payload.
type Extension ¶
type Extension struct {
// contains filtered or unexported fields
}
Extension RTP Header extension.
type Header ¶
type Header struct {
Version uint8
Padding bool
Extension bool
Marker bool
PayloadType uint8
SequenceNumber uint16
Timestamp uint32
SSRC uint32
CSRC []uint32
ExtensionProfile uint16
Extensions []Extension
// Deprecated: will be removed in a future version.
PayloadOffset int
}
Header represents an RTP packet header.
func (*Header) DelExtension ¶
DelExtension Removes an RTP Header extension.
func (*Header) GetExtension ¶
GetExtension returns an RTP header extension.
func (*Header) GetExtensionIDs ¶
GetExtensionIDs returns an extension id array.
func (Header) MarshalSize ¶
MarshalSize returns the size of the header once marshaled.
func (*Header) SetExtension ¶
SetExtension sets an RTP header extension.
type HeaderExtension ¶
type HeaderExtension interface {
Set(id uint8, payload []byte) error
GetIDs() []uint8
Get(id uint8) []byte
Del(id uint8) error
Unmarshal(buf []byte) (int, error)
Marshal() ([]byte, error)
MarshalTo(buf []byte) (int, error)
MarshalSize() int
}
HeaderExtension represents an RTP extension header.
type OneByteHeaderExtension ¶
type OneByteHeaderExtension struct {
// contains filtered or unexported fields
}
OneByteHeaderExtension is an RFC8285 one-byte header extension.
func (*OneByteHeaderExtension) Del ¶
func (e *OneByteHeaderExtension) Del(id uint8) error
Del deletes the extension with the specified ID.
func (*OneByteHeaderExtension) Get ¶
func (e *OneByteHeaderExtension) Get(id uint8) []byte
Get returns the payload of the extension with the given ID.
func (*OneByteHeaderExtension) GetIDs ¶
func (e *OneByteHeaderExtension) GetIDs() []uint8
GetIDs returns the available IDs.
func (OneByteHeaderExtension) Marshal ¶
func (e OneByteHeaderExtension) Marshal() ([]byte, error)
Marshal returns the extension payload.
func (OneByteHeaderExtension) MarshalSize ¶
func (e OneByteHeaderExtension) MarshalSize() int
MarshalSize returns the size of the extension payload.
func (OneByteHeaderExtension) MarshalTo ¶
func (e OneByteHeaderExtension) MarshalTo(buf []byte) (int, error)
MarshalTo writes the extension payload to the given buffer.
type Packet ¶
type Packet struct {
Header
Payload []byte
PaddingSize byte
// Deprecated: will be removed in a future version.
Raw []byte
}
Packet represents an RTP Packet.
func (Packet) MarshalSize ¶
MarshalSize returns the size of the packet once marshaled.
type Packetizer ¶
type Packetizer interface {
Packetize(payload []byte, payloadType uint8, samples uint32) []*Packet
GeneratePadding(samples uint32) []*Packet
EnableAbsSendTime(value int)
SkipSamples(skippedSamples uint32)
}
Packetizer packetizes a payload.
func NewPacketizer ¶
func NewPacketizer( mtu uint16, pt uint8, ssrc uint32, payloader Payloader, sequencer Sequencer, clockRate uint32, ) Packetizer
NewPacketizer returns a new instance of a Packetizer for a specific payloader.
func NewPacketizerWithOptions ¶
func NewPacketizerWithOptions( mtu uint16, payloader Payloader, sequencer Sequencer, clockRate uint32, options ...PacketizerOption, ) Packetizer
NewPacketizerWithOptions returns a new instance of a Packetizer with the given options.
type PacketizerOption ¶
type PacketizerOption func(*packetizer)
PacketizerOption is a function that configures a RTP Packetizer.
type PartitionHeadChecker ¶
PartitionHeadChecker is the interface that checks whether the packet is keyframe or not.
type PlayoutDelayExtension ¶
type PlayoutDelayExtension struct {
MinDelay, MaxDelay uint16
}
PlayoutDelayExtension is a extension payload format in http://www.webrtc.org/experiments/rtp-hdrext/playout-delay 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ID | len=2 | MIN delay | MAX delay | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ .
func (PlayoutDelayExtension) Marshal ¶
func (p PlayoutDelayExtension) Marshal() ([]byte, error)
Marshal serializes the members to buffer.
func (*PlayoutDelayExtension) Unmarshal ¶
func (p *PlayoutDelayExtension) Unmarshal(rawData []byte) error
Unmarshal parses the passed byte slice and stores the result in the members.
type RawExtension ¶
type RawExtension struct {
// contains filtered or unexported fields
}
RawExtension represents an RFC3550 header extension.
func (*RawExtension) Del ¶
func (e *RawExtension) Del(id uint8) error
Del deletes the extension with the specified ID.
func (*RawExtension) Get ¶
func (e *RawExtension) Get(id uint8) []byte
Get returns the payload of the extension with the given ID.
func (*RawExtension) GetIDs ¶
func (e *RawExtension) GetIDs() []uint8
GetIDs returns the available IDs.
func (RawExtension) Marshal ¶
func (e RawExtension) Marshal() ([]byte, error)
Marshal returns the raw extension payload.
func (RawExtension) MarshalSize ¶
func (e RawExtension) MarshalSize() int
MarshalSize returns the size of the extension when marshaled.
func (RawExtension) MarshalTo ¶
func (e RawExtension) MarshalTo(buf []byte) (int, error)
MarshalTo marshals the extension to the given buffer.
type Sequencer ¶
Sequencer generates sequential sequence numbers for building RTP packets.
func NewFixedSequencer ¶
NewFixedSequencer returns a new sequencer starting from a specific sequence number.
func NewRandomSequencer ¶
func NewRandomSequencer() Sequencer
NewRandomSequencer returns a new sequencer starting from a random sequence number.
type SpatialLayer ¶
type SpatialLayer struct {
RTPStreamID int
SpatialID int
TargetBitrates []int // target bitrates per temporal layer
// Following members are valid only when HasResolutionAndFramerate is true
Width int
Height int
Framerate int
}
SpatialLayer is a spatial layer in VLA.
type TransportCCExtension ¶
type TransportCCExtension struct {
TransportSequence uint16
}
TransportCCExtension is a extension payload format in https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 0xBE | 0xDE | length=1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ID | L=1 |transport-wide sequence number | zero padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ .
func (TransportCCExtension) Marshal ¶
func (t TransportCCExtension) Marshal() ([]byte, error)
Marshal serializes the members to buffer.
func (*TransportCCExtension) Unmarshal ¶
func (t *TransportCCExtension) Unmarshal(rawData []byte) error
Unmarshal parses the passed byte slice and stores the result in the members.
type TwoByteHeaderExtension ¶
type TwoByteHeaderExtension struct {
// contains filtered or unexported fields
}
TwoByteHeaderExtension is an RFC8285 two-byte header extension.
func (*TwoByteHeaderExtension) Del ¶
func (e *TwoByteHeaderExtension) Del(id uint8) error
Del deletes the extension with the specified ID.
func (*TwoByteHeaderExtension) Get ¶
func (e *TwoByteHeaderExtension) Get(id uint8) []byte
Get returns the payload of the extension with the given ID.
func (*TwoByteHeaderExtension) GetIDs ¶
func (e *TwoByteHeaderExtension) GetIDs() []uint8
GetIDs returns the available IDs.
func (TwoByteHeaderExtension) Marshal ¶
func (e TwoByteHeaderExtension) Marshal() ([]byte, error)
Marshal returns the extension payload.
func (TwoByteHeaderExtension) MarshalSize ¶
func (e TwoByteHeaderExtension) MarshalSize() int
MarshalSize returns the size of the extension payload.
func (TwoByteHeaderExtension) MarshalTo ¶
func (e TwoByteHeaderExtension) MarshalTo(buf []byte) (int, error)
MarshalTo marshals the extension to the given buffer.
type VLA ¶
type VLA struct {
RTPStreamID int // 0-origin RTP stream ID (RID) this allocation is sent on (0..3)
RTPStreamCount int // Number of RTP streams (1..4)
ActiveSpatialLayer []SpatialLayer
HasResolutionAndFramerate bool
}
VLA is a Video Layer Allocation (VLA) extension. See https://webrtc.googlesource.com/src/+/refs/heads/main/docs/native-code/rtp-hdrext/video-layers-allocation00
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package codecs implements codec specific RTP payloader/depayloaders
|
Package codecs implements codec specific RTP payloader/depayloaders |
|
av1/frame
Package frame provides code to construct complete media frames from packetized media.
|
Package frame provides code to construct complete media frames from packetized media. |
|
av1/obu
Package obu implements tools for working with the Open Bitstream Unit.
|
Package obu implements tools for working with the Open Bitstream Unit. |
|
vp9
Package vp9 contains a VP9 header parser.
|
Package vp9 contains a VP9 header parser. |
|
pkg
|
|
|
frame
Package frame is deprecated.
|
Package frame is deprecated. |
|
obu
Package obu is deprecated.
|
Package obu is deprecated. |