mediaserver

package module
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 28, 2018 License: GPL-2.0 Imports: 13 Imported by: 24

README

media-server-go

Build Status

WebRTC media server for go

x86 x64
Linux   -   ✔︎  
macOS   -   ✔︎  

only support Linux x64 and macOS x64 for now

Functionality

We intend to implement support the following features:

How to use

Yon can see the demos from here Demos

Tutorial

Install

go get github.com/notedit/media-server-go

Thanks

How to build manually

you should install libtool and autoconf before you build

ubuntu

apt install autoconf
apt install libtool

macOS

brew install libtool
brew install autoconf

0, clone the code

1, bash build.sh

2, go build

Documentation

Index

Constants

View Source
const MaxLayerId = 0xFF

Variables

This section is empty.

Functions

func EnableDebug

func EnableDebug(flag bool)

func EnableLog

func EnableLog(flag bool)

func EnableUltraDebug

func EnableUltraDebug(flag bool)

func Max

func Max(x, y int) int

func Min

func Min(x, y int) int

func NextSSRC

func NextSSRC() uint

func SetPortRange

func SetPortRange(minPort, maxPort int) bool

Types

type ActiveEncoding

type ActiveEncoding struct {
	EncodingId   string
	SimulcastIdx int
	Bitrate      uint
	Layers       []*Layer
}

type ActiveLayersInfo

type ActiveLayersInfo struct {
	Active   []*ActiveEncoding
	Inactive []*ActiveEncoding
	Layers   []*Layer
}

type ActiveSpeakerDetector

type ActiveSpeakerDetector struct {
	*emission.Emitter
	// contains filtered or unexported fields
}

func NewActiveSpeakerDetector

func NewActiveSpeakerDetector() *ActiveSpeakerDetector

func (*ActiveSpeakerDetector) AddSpeaker

func (a *ActiveSpeakerDetector) AddSpeaker(track *IncomingStreamTrack)

func (*ActiveSpeakerDetector) RemoveSpeaker

func (a *ActiveSpeakerDetector) RemoveSpeaker(track *IncomingStreamTrack)

func (*ActiveSpeakerDetector) SetMinChangePeriod

func (a *ActiveSpeakerDetector) SetMinChangePeriod(minChangePeriod uint)

func (*ActiveSpeakerDetector) Stop

func (a *ActiveSpeakerDetector) Stop()

type BitrateTraversal

type BitrateTraversal string
const (
	TraversalDefault               BitrateTraversal = "default"
	TraversalSpatialTemporal       BitrateTraversal = "spatial-temporal"
	TraversalZigZagSpatialTemporal BitrateTraversal = "zig-zag-spatial-temporal"
	TraversalZigZagTemporalSpatial BitrateTraversal = "zig-zag-temporal-spatial"
)

type Encoding

type Encoding struct {
	// contains filtered or unexported fields
}

func (*Encoding) GetDepacketizer

func (e *Encoding) GetDepacketizer() native.StreamTrackDepacketizer

func (*Encoding) GetID

func (e *Encoding) GetID() string

func (*Encoding) GetSource

func (e *Encoding) GetSource() native.RTPIncomingSourceGroup

type Endpoint

type Endpoint struct {
	*emission.Emitter
	// contains filtered or unexported fields
}

func NewEndpoint

func NewEndpoint(ip string) *Endpoint

NewEndpoint create a endpoint

func NewEndpointWithPort

func NewEndpointWithPort(ip string, port int) *Endpoint

func (*Endpoint) CreateOffer

func (e *Endpoint) CreateOffer(video *sdp.Capability, audio *sdp.Capability) *sdp.SDPInfo

CreateOffer create offer based on audio and video capability

func (*Endpoint) CreateSDPManager

func (e *Endpoint) CreateSDPManager(sdpSemantics string, capabilities map[string]*sdp.Capability) SDPManager

func (*Endpoint) CreateTransport

func (e *Endpoint) CreateTransport(remoteSdp *sdp.SDPInfo, localSdp *sdp.SDPInfo, disableSTUNKeepAlive bool) *Transport

func (*Endpoint) CreateTransportWithRemote

func (e *Endpoint) CreateTransportWithRemote(sdpInfo *sdp.SDPInfo, disableSTUNKeepAlive bool) *Transport

func (*Endpoint) GetDTLSFingerprint

func (e *Endpoint) GetDTLSFingerprint() string

func (*Endpoint) GetLocalCandidates

func (e *Endpoint) GetLocalCandidates() []*sdp.CandidateInfo

func (*Endpoint) Stop

func (e *Endpoint) Stop()

Stop stop this endpoint

type IncomingAllStats

type IncomingAllStats struct {
	Rtt          uint
	MinWaitTime  uint
	MaxWaitTime  uint
	AvgWaitTime  float64
	Media        *IncomingStats
	Rtx          *IncomingStats
	Fec          *IncomingStats
	Bitrate      uint
	Total        uint
	Remb         uint
	SimulcastIdx int
	// contains filtered or unexported fields
}

type IncomingStats

type IncomingStats struct {
	LostPackets    uint
	DropPackets    uint
	NumPackets     uint
	NumRTCPPackets uint
	TotalBytes     uint
	TotalRTCPBytes uint
	TotalPLIs      uint
	TotalNACKs     uint
	Bitrate        uint
	Layers         []*Layer
}

type IncomingStream

type IncomingStream struct {
	*emission.Emitter
	// contains filtered or unexported fields
}

func (*IncomingStream) AddTrack

func (i *IncomingStream) AddTrack(track *IncomingStreamTrack) error

func (*IncomingStream) CreateTrack

func (i *IncomingStream) CreateTrack(track *sdp.TrackInfo) *IncomingStreamTrack

func (*IncomingStream) GetAudioTracks

func (i *IncomingStream) GetAudioTracks() []*IncomingStreamTrack

func (*IncomingStream) GetID

func (i *IncomingStream) GetID() string

func (*IncomingStream) GetStats

func (i *IncomingStream) GetStats() map[string]map[string]*IncomingAllStats

func (*IncomingStream) GetStreamInfo

func (i *IncomingStream) GetStreamInfo() *sdp.StreamInfo

func (*IncomingStream) GetTrack

func (i *IncomingStream) GetTrack(trackID string) *IncomingStreamTrack

func (*IncomingStream) GetTracks

func (i *IncomingStream) GetTracks() []*IncomingStreamTrack

func (*IncomingStream) GetVideoTracks

func (i *IncomingStream) GetVideoTracks() []*IncomingStreamTrack

func (*IncomingStream) Stop

func (i *IncomingStream) Stop()

type IncomingStreamTrack

type IncomingStreamTrack struct {
	*emission.Emitter
	// contains filtered or unexported fields
}

func (*IncomingStreamTrack) Attached

func (i *IncomingStreamTrack) Attached()

func (*IncomingStreamTrack) Detached

func (i *IncomingStreamTrack) Detached()

func (*IncomingStreamTrack) GetActiveLayers

func (i *IncomingStreamTrack) GetActiveLayers() *ActiveLayersInfo

func (*IncomingStreamTrack) GetEncodings

func (i *IncomingStreamTrack) GetEncodings() map[string]*Encoding

func (*IncomingStreamTrack) GetFirstEncoding

func (i *IncomingStreamTrack) GetFirstEncoding() *Encoding

func (*IncomingStreamTrack) GetID

func (i *IncomingStreamTrack) GetID() string

func (*IncomingStreamTrack) GetMedia

func (i *IncomingStreamTrack) GetMedia() string

func (*IncomingStreamTrack) GetSSRCs

func (i *IncomingStreamTrack) GetSSRCs() []map[string]native.RTPIncomingSource

func (*IncomingStreamTrack) GetStats

func (i *IncomingStreamTrack) GetStats() map[string]*IncomingAllStats

func (*IncomingStreamTrack) GetTrackInfo

func (i *IncomingStreamTrack) GetTrackInfo() *sdp.TrackInfo

func (*IncomingStreamTrack) Refresh

func (i *IncomingStreamTrack) Refresh()

func (*IncomingStreamTrack) Stop

func (i *IncomingStreamTrack) Stop()

type Layer

type Layer struct {
	EncodingId      string
	SpatialLayerId  int
	TemporalLayerId int
	TotalBytes      uint
	NumPackets      uint
	Bitrate         uint
	SimulcastIdx    int
}

type MediaFrameCallback

type MediaFrameCallback func(frame []byte, duration uint, timestamp uint)

type MediaStreamDuplicater

type MediaStreamDuplicater struct {
	// contains filtered or unexported fields
}

func NewMediaStreamDuplicater

func NewMediaStreamDuplicater(track *IncomingStreamTrack, callback MediaFrameCallback) *MediaStreamDuplicater

func (*MediaStreamDuplicater) Stop

func (d *MediaStreamDuplicater) Stop()

type OutgoingStats

type OutgoingStats struct {
	NumPackets     uint
	NumRTCPPackets uint
	TotalBytes     uint
	TotalRTCPBytes uint
	Bitrate        uint
}

type OutgoingStatss

type OutgoingStatss struct {
	Media *OutgoingStats
	Rtx   *OutgoingStats
	Fec   *OutgoingStats
	// contains filtered or unexported fields
}

type OutgoingStream

type OutgoingStream struct {
	*emission.Emitter
	// contains filtered or unexported fields
}

func NewOutgoingStream

func NewOutgoingStream(transport native.DTLSICETransport, info *sdp.StreamInfo) *OutgoingStream

func (*OutgoingStream) AddTrack

func (o *OutgoingStream) AddTrack(track *OutgoingStreamTrack) error

func (*OutgoingStream) AttachTo

func (o *OutgoingStream) AttachTo(incomingStream *IncomingStream) []*Transponder

func (*OutgoingStream) CreateTrack

func (o *OutgoingStream) CreateTrack(track *sdp.TrackInfo) *OutgoingStreamTrack

func (*OutgoingStream) Detach

func (o *OutgoingStream) Detach()

func (*OutgoingStream) GetAudioTracks

func (o *OutgoingStream) GetAudioTracks() []*OutgoingStreamTrack

func (*OutgoingStream) GetID

func (o *OutgoingStream) GetID() string

func (*OutgoingStream) GetStats

func (o *OutgoingStream) GetStats() map[string]*OutgoingStatss

func (*OutgoingStream) GetStreamInfo

func (o *OutgoingStream) GetStreamInfo() *sdp.StreamInfo

func (*OutgoingStream) GetTrack

func (o *OutgoingStream) GetTrack(trackID string) *OutgoingStreamTrack

func (*OutgoingStream) GetTracks

func (o *OutgoingStream) GetTracks() []*OutgoingStreamTrack

func (*OutgoingStream) GetVideoTracks

func (o *OutgoingStream) GetVideoTracks() []*OutgoingStreamTrack

func (*OutgoingStream) IsMuted

func (o *OutgoingStream) IsMuted() bool

func (*OutgoingStream) Mute

func (o *OutgoingStream) Mute(muting bool)

func (*OutgoingStream) Stop

func (o *OutgoingStream) Stop()

type OutgoingStreamTrack

type OutgoingStreamTrack struct {

	// todo outercallback
	*emission.Emitter
	// contains filtered or unexported fields
}

func (*OutgoingStreamTrack) AttachTo

func (o *OutgoingStreamTrack) AttachTo(incomingTrack *IncomingStreamTrack) *Transponder

func (*OutgoingStreamTrack) Detach

func (o *OutgoingStreamTrack) Detach()

func (*OutgoingStreamTrack) GetID

func (o *OutgoingStreamTrack) GetID() string

func (*OutgoingStreamTrack) GetMedia

func (o *OutgoingStreamTrack) GetMedia() string

func (*OutgoingStreamTrack) GetSSRCs

func (*OutgoingStreamTrack) GetStats

func (o *OutgoingStreamTrack) GetStats() *OutgoingStatss

func (*OutgoingStreamTrack) GetTrackInfo

func (o *OutgoingStreamTrack) GetTrackInfo() *sdp.TrackInfo

func (*OutgoingStreamTrack) GetTransponder

func (o *OutgoingStreamTrack) GetTransponder() *Transponder

func (*OutgoingStreamTrack) IsMuted

func (o *OutgoingStreamTrack) IsMuted() bool

func (*OutgoingStreamTrack) Mute

func (o *OutgoingStreamTrack) Mute(muting bool)

func (*OutgoingStreamTrack) Stop

func (o *OutgoingStreamTrack) Stop()

type Player

type Player struct {
	// contains filtered or unexported fields
}

func NewPlayer

func NewPlayer(filename string) (*Player, error)

func (*Player) GetAudioTracks

func (p *Player) GetAudioTracks() []*IncomingStreamTrack

func (*Player) GetTracks

func (p *Player) GetTracks() []*IncomingStreamTrack

func (*Player) GetVideoTracks

func (p *Player) GetVideoTracks() []*IncomingStreamTrack

func (*Player) Pause

func (p *Player) Pause()

func (*Player) Play

func (p *Player) Play()

func (*Player) Resume

func (p *Player) Resume()

func (*Player) Seek

func (p *Player) Seek(time uint64)

func (*Player) Stop

func (p *Player) Stop()

type RawRTPStreamer

type RawRTPStreamer struct {
	// contains filtered or unexported fields
}

func NewRawRTPStreamer

func NewRawRTPStreamer() *RawRTPStreamer

func (*RawRTPStreamer) CreateSession

func (s *RawRTPStreamer) CreateSession(media *sdp.MediaInfo) *RawRTPStreamerSession

func (*RawRTPStreamer) Stop

func (s *RawRTPStreamer) Stop()

type RawRTPStreamerSession

type RawRTPStreamerSession struct {
	*emission.Emitter
	// contains filtered or unexported fields
}

func NewRawRTPStreamerSession

func NewRawRTPStreamerSession(media *sdp.MediaInfo) *RawRTPStreamerSession

func (*RawRTPStreamerSession) GetID

func (s *RawRTPStreamerSession) GetID() string

func (*RawRTPStreamerSession) GetIncomingStreamTrack

func (s *RawRTPStreamerSession) GetIncomingStreamTrack() *IncomingStreamTrack

func (*RawRTPStreamerSession) Push

func (s *RawRTPStreamerSession) Push(rtp []byte)

func (*RawRTPStreamerSession) Stop

func (s *RawRTPStreamerSession) Stop()

type Recorder

type Recorder struct {
	// contains filtered or unexported fields
}

func NewRecorder

func NewRecorder(filename string, waitForIntra bool, refresh int) *Recorder

func (*Recorder) Record

func (r *Recorder) Record(incoming *IncomingStreamTrack)

func (*Recorder) RecordStream

func (r *Recorder) RecordStream(incoming *IncomingStream)

func (*Recorder) Stop

func (r *Recorder) Stop()

type RecorderTrack

type RecorderTrack struct {
	*emission.Emitter
	// contains filtered or unexported fields
}

func NewRecorderTrack

func NewRecorderTrack(id string, track *IncomingStreamTrack, encoding *Encoding) *RecorderTrack

func (*RecorderTrack) GetEncoding

func (r *RecorderTrack) GetEncoding() *Encoding

func (*RecorderTrack) GetID

func (r *RecorderTrack) GetID() string

func (*RecorderTrack) GetTrack

func (r *RecorderTrack) GetTrack() *IncomingStreamTrack

func (*RecorderTrack) Stop

func (r *RecorderTrack) Stop()

type Refresher

type Refresher struct {
	*emission.Emitter
	// contains filtered or unexported fields
}

func NewRefresher

func NewRefresher(period int) *Refresher

func (*Refresher) Add

func (r *Refresher) Add(incom *IncomingStreamTrack)

func (*Refresher) AddStream

func (r *Refresher) AddStream(incoming *IncomingStream)

func (*Refresher) Stop

func (r *Refresher) Stop()

type RenegotiationCallback

type RenegotiationCallback func(transport *Transport)

type SDPManager

type SDPManager interface {
	GetState() string
	GetTransport() *Transport
	CreateLocalDescription() (*sdp.SDPInfo, error)
	ProcessRemoteDescription(sdp string) (*sdp.SDPInfo, error)
}

type SDPManagerPlanb

type SDPManagerPlanb struct {
	OnRenegotiation RenegotiationCallback
	// contains filtered or unexported fields
}

func NewSDPManagerPlanb

func NewSDPManagerPlanb(endpoint *Endpoint, capabilities map[string]*sdp.Capability) *SDPManagerPlanb

func (*SDPManagerPlanb) CreateLocalDescription

func (s *SDPManagerPlanb) CreateLocalDescription() (*sdp.SDPInfo, error)

func (*SDPManagerPlanb) GetState

func (s *SDPManagerPlanb) GetState() string

func (*SDPManagerPlanb) GetTransport

func (s *SDPManagerPlanb) GetTransport() *Transport

func (*SDPManagerPlanb) ProcessRemoteDescription

func (s *SDPManagerPlanb) ProcessRemoteDescription(sdpStr string) (*sdp.SDPInfo, error)

type SDPManagerUnified

type SDPManagerUnified struct {
	OnRenegotiation RenegotiationCallback
	// contains filtered or unexported fields
}

func NewSDPManagerUnified

func NewSDPManagerUnified(endpoint *Endpoint, capabilities map[string]*sdp.Capability) *SDPManagerUnified

func (*SDPManagerUnified) CreateLocalDescription

func (s *SDPManagerUnified) CreateLocalDescription() (*sdp.SDPInfo, error)

func (*SDPManagerUnified) GetState

func (s *SDPManagerUnified) GetState() string

func (*SDPManagerUnified) GetTransport

func (s *SDPManagerUnified) GetTransport() *Transport

func (*SDPManagerUnified) ProcessRemoteDescription

func (s *SDPManagerUnified) ProcessRemoteDescription(sdpStr string) (*sdp.SDPInfo, error)

type Streamer

type Streamer struct {
	// contains filtered or unexported fields
}

func NewStreamer

func NewStreamer() *Streamer

func (*Streamer) CreateSession

func (s *Streamer) CreateSession(local bool, ip string, port int, media *sdp.MediaInfo) *StreamerSession

func (*Streamer) Stop

func (s *Streamer) Stop()

type StreamerSession

type StreamerSession struct {
	*emission.Emitter
	// contains filtered or unexported fields
}

func NewStreamerSession

func NewStreamerSession(local bool, ip string, port int, media *sdp.MediaInfo) *StreamerSession

func (*StreamerSession) GetID

func (s *StreamerSession) GetID() string

func (*StreamerSession) GetIncomingStreamTrack

func (s *StreamerSession) GetIncomingStreamTrack() *IncomingStreamTrack

func (*StreamerSession) GetOutgoingStreamTrack

func (s *StreamerSession) GetOutgoingStreamTrack() *OutgoingStreamTrack

func (*StreamerSession) Stop

func (s *StreamerSession) Stop()

type Transponder

type Transponder struct {
	*emission.Emitter
	// contains filtered or unexported fields
}

func NewTransponder

func NewTransponder(transponderFacade native.RTPStreamTransponderFacade) *Transponder

func (*Transponder) GetAvailableLayers

func (t *Transponder) GetAvailableLayers()

GetAvailableLayers Get available encodings and layers

func (*Transponder) GetIncomingTrack

func (t *Transponder) GetIncomingTrack() *IncomingStreamTrack

func (*Transponder) GetSelectedEncoding

func (t *Transponder) GetSelectedEncoding() string

func (*Transponder) GetSelectedSpatialLayerId

func (t *Transponder) GetSelectedSpatialLayerId() int

func (*Transponder) GetSelectedTemporalLayerId

func (t *Transponder) GetSelectedTemporalLayerId() int

func (*Transponder) IsMuted

func (t *Transponder) IsMuted() bool

func (*Transponder) Mute

func (t *Transponder) Mute(muting bool)

func (*Transponder) SelectEncoding

func (t *Transponder) SelectEncoding()

func (*Transponder) SelectLayer

func (t *Transponder) SelectLayer(spatialLayerId, temporalLayerId int)

SelectLayer Select SVC temporatl and spatial layers. Only available for VP9 media.

func (*Transponder) SetIncomingTrack

func (t *Transponder) SetIncomingTrack(incomingTrack *IncomingStreamTrack) error

func (*Transponder) SetMaximumLayers

func (t *Transponder) SetMaximumLayers(maxSpatialLayerId, maxTemporalLayerId int)

func (*Transponder) SetTargetBitrate

func (t *Transponder) SetTargetBitrate(bitrate int, traversal BitrateTraversal, strict bool) int

func (*Transponder) Stop

func (t *Transponder) Stop()

type Transport

type Transport struct {
	*emission.Emitter
	// contains filtered or unexported fields
}

func NewTransport

func NewTransport(bundle native.RTPBundleTransport, remoteIce *sdp.ICEInfo, remoteDtls *sdp.DTLSInfo, remoteCandidates []*sdp.CandidateInfo,
	localIce *sdp.ICEInfo, localDtls *sdp.DTLSInfo, localCandidates []*sdp.CandidateInfo, disableSTUNKeepAlive bool) *Transport

func (*Transport) AddRemoteCandidate

func (t *Transport) AddRemoteCandidate(candidate *sdp.CandidateInfo)

func (*Transport) CreateIncomingStream

func (t *Transport) CreateIncomingStream(streamInfo *sdp.StreamInfo) *IncomingStream

func (*Transport) CreateIncomingStreamTrack

func (t *Transport) CreateIncomingStreamTrack(media string, trackId string, ssrcs map[string]uint) *IncomingStreamTrack

func (*Transport) CreateOutgoingStream

func (t *Transport) CreateOutgoingStream(streamID string, audio bool, video bool) *OutgoingStream

func (*Transport) CreateOutgoingStream2

func (t *Transport) CreateOutgoingStream2(streamInfo *sdp.StreamInfo) *OutgoingStream

func (*Transport) CreateOutgoingStreamTrack

func (t *Transport) CreateOutgoingStreamTrack(media string, trackId string, ssrcs map[string]uint) *OutgoingStreamTrack

func (*Transport) CreateOutgoingStreamWithID

func (t *Transport) CreateOutgoingStreamWithID(streamID string, audio bool, video bool) *OutgoingStream

func (*Transport) GetIncomingStream

func (t *Transport) GetIncomingStream(streamId string) *IncomingStream

func (*Transport) GetIncomingStreams

func (t *Transport) GetIncomingStreams() []*IncomingStream

func (*Transport) GetLocalCandidates

func (t *Transport) GetLocalCandidates() []*sdp.CandidateInfo

func (*Transport) GetLocalDTLSInfo

func (t *Transport) GetLocalDTLSInfo() *sdp.DTLSInfo

func (*Transport) GetLocalICEInfo

func (t *Transport) GetLocalICEInfo() *sdp.ICEInfo

func (*Transport) GetOutgoingStream

func (t *Transport) GetOutgoingStream(streamId string) *OutgoingStream

func (*Transport) GetOutgoingStreams

func (t *Transport) GetOutgoingStreams() []*OutgoingStream

func (*Transport) GetRemoteCandidates

func (t *Transport) GetRemoteCandidates() []*sdp.CandidateInfo

func (*Transport) SetBandwidthProbing

func (t *Transport) SetBandwidthProbing(probe bool)

func (*Transport) SetLocalProperties

func (t *Transport) SetLocalProperties(audio *sdp.MediaInfo, video *sdp.MediaInfo)

func (*Transport) SetMaxProbingBitrate

func (t *Transport) SetMaxProbingBitrate(bitrate uint)

func (*Transport) SetRemoteProperties

func (t *Transport) SetRemoteProperties(audio *sdp.MediaInfo, video *sdp.MediaInfo)

func (*Transport) Stop

func (t *Transport) Stop()

Stop stop this transport

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL