webrtc

package
v0.1.28 Latest Latest
Warning

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

Go to latest
Published: Mar 22, 2025 License: AGPL-3.0 Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MAX_BUFFERED_AMOUNT     = 64 * 1024
	ICECOMPLETE_TIMEOUT     = 5 * 1000
	CHANNEL_CLOSING_TIMEOUT = 5 * 1000
)
View Source
const (
	WebrtcSignalType_TransceiverRequest = "transceiverRequest"
	WebrtcSignalType_Renegotiate        = "renegotiate"
	WebrtcSignalType_Sdp                = "sdp"
	WebrtcSignalType_Offer              = "offer"
	WebrtcSignalType_Answer             = "answer"
	WebrtcSignalType_Candidate          = "candidate"
	WebrtcSignalType_Join               = "join"
)
View Source
const (
	RouterType_Mesh = "mesh"
	RouterType_Sfu  = "sfu"
	RouterType_Mcu  = "mcu"

	RouterIdentity_Publisher  = "publisher"
	RouterIdentity_Subscriber = "subscriber"
	RouterIdentity_PubSub     = "pubsub"
)
View Source
const MessageSize = 15

Variables

This section is empty.

Functions

func GetICEServers

func GetICEServers() []webrtc.ICEServer

func Signal added in v0.1.24

func Signal(webrtcSignal *WebrtcSignal, targetPeerId string) (interface{}, error)

* 调用注册发送信号函数发送信号

Types

type AdvancedPeerConnection added in v0.1.24

type AdvancedPeerConnection struct {
	Room *MeetingRoom
	// contains filtered or unexported fields
}

func CreateAdvancedPeerConnection added in v0.1.24

func CreateAdvancedPeerConnection(peerId string, initiator bool, clientId string, name string,
	connectPeerId string, connectSessionId string, room *MeetingRoom) *AdvancedPeerConnection

func (*AdvancedPeerConnection) AddTrack added in v0.1.24

func (this *AdvancedPeerConnection) AddTrack(track webrtc.TrackLocal) (*webrtc.RTPSender, error)

func (*AdvancedPeerConnection) Close added in v0.1.24

func (this *AdvancedPeerConnection) Close()

* 关闭本节点的wenbrtc连接,并从池中删除

func (*AdvancedPeerConnection) CreateTrack added in v0.1.24

func (this *AdvancedPeerConnection) CreateTrack(c *webrtc.RTPCodecCapability, trackId string, streamId string) (webrtc.TrackLocal, error)

func (*AdvancedPeerConnection) GetSenders added in v0.1.24

func (this *AdvancedPeerConnection) GetSenders(streamId string) []*webrtc.RTPSender

func (*AdvancedPeerConnection) GetTrackRemotes added in v0.1.24

func (this *AdvancedPeerConnection) GetTrackRemotes(streamId string) []*webrtc.TrackRemote

func (*AdvancedPeerConnection) Id added in v0.1.24

func (this *AdvancedPeerConnection) Id() string

func (*AdvancedPeerConnection) Init added in v0.1.24

func (this *AdvancedPeerConnection) Init(iceServers []webrtc.ICEServer) error

* 创建新的Webrtc节点

func (*AdvancedPeerConnection) ReadRTP added in v0.1.24

func (this *AdvancedPeerConnection) ReadRTP(track *webrtc.TrackRemote) (*rtp.Packet, error)

func (*AdvancedPeerConnection) Send added in v0.1.24

func (this *AdvancedPeerConnection) Send(data []byte) error

* 利用缺省数据通道发送数据

func (*AdvancedPeerConnection) SendText added in v0.1.24

func (this *AdvancedPeerConnection) SendText(data string) error

* 利用缺省数据通道发送数据

func (*AdvancedPeerConnection) WriteRTP added in v0.1.24

func (this *AdvancedPeerConnection) WriteRTP(sender *webrtc.RTPSender, packet *rtp.Packet) error

type BasePeerConnection added in v0.1.24

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

func CreateBasePeerConnection added in v0.1.24

func CreateBasePeerConnection(initiator bool) *BasePeerConnection

func (*BasePeerConnection) AddTrack added in v0.1.24

func (this *BasePeerConnection) AddTrack(track webrtc.TrackLocal) (*webrtc.RTPSender, error)

* 将本地轨道加入,并存放进流中

func (*BasePeerConnection) BufferedAmount added in v0.1.24

func (this *BasePeerConnection) BufferedAmount() uint64

func (*BasePeerConnection) Close added in v0.1.24

func (this *BasePeerConnection) Close()

* 关闭peer

func (*BasePeerConnection) Connected added in v0.1.24

func (this *BasePeerConnection) Connected()

func (*BasePeerConnection) CreateTrack added in v0.1.24

func (this *BasePeerConnection) CreateTrack(c *webrtc.RTPCodecCapability, trackId string, streamId string) (webrtc.TrackLocal, error)

*

  • 主动创建本地track能够发送和接收媒体信息

func (*BasePeerConnection) Emit added in v0.1.24

func (this *BasePeerConnection) Emit(name WebrtcEventType, event *WebrtcEvent) (interface{}, error)

* 事件发生,调用外部函数

func (*BasePeerConnection) GetReceiver added in v0.1.24

func (this *BasePeerConnection) GetReceiver(trackId string) (*webrtc.TrackRemote, *webrtc.RTPReceiver)

func (*BasePeerConnection) GetSender added in v0.1.24

func (this *BasePeerConnection) GetSender(trackId string) *webrtc.RTPSender

func (*BasePeerConnection) GetSenders added in v0.1.24

func (this *BasePeerConnection) GetSenders(streamId string) []*webrtc.RTPSender

func (*BasePeerConnection) GetSendersByKind added in v0.1.24

func (this *BasePeerConnection) GetSendersByKind(kind webrtc.RTPCodecType) []*webrtc.RTPSender

func (*BasePeerConnection) GetTrackRemotes added in v0.1.24

func (this *BasePeerConnection) GetTrackRemotes(streamId string) []*webrtc.TrackRemote

func (*BasePeerConnection) GetTrackRemotesByKind added in v0.1.24

func (this *BasePeerConnection) GetTrackRemotesByKind(kind webrtc.RTPCodecType) []*webrtc.TrackRemote

func (*BasePeerConnection) Init added in v0.1.24

func (this *BasePeerConnection) Init(extension *SignalExtension, localTracks []webrtc.TrackLocal) error

func (*BasePeerConnection) On added in v0.1.24

func (this *BasePeerConnection) On(name WebrtcEventType, fn func(event *WebrtcEvent) (interface{}, error))

* 注册事件,发生时调用外部函数

func (*BasePeerConnection) ReadRTP added in v0.1.24

func (this *BasePeerConnection) ReadRTP(track *webrtc.TrackRemote) (*rtp.Packet, error)

func (*BasePeerConnection) RemoveStream added in v0.1.24

func (this *BasePeerConnection) RemoveStream(streamId string) error

func (*BasePeerConnection) RemoveTrack added in v0.1.24

func (this *BasePeerConnection) RemoveTrack(trackId string) error

func (*BasePeerConnection) ReplaceTrack added in v0.1.24

func (this *BasePeerConnection) ReplaceTrack(oldTrack webrtc.TrackLocal, newTrack webrtc.TrackLocal) error

func (*BasePeerConnection) Send added in v0.1.24

func (this *BasePeerConnection) Send(data []byte) error

* 把要发送的数据送入缓存

func (*BasePeerConnection) SendText added in v0.1.24

func (this *BasePeerConnection) SendText(message string) error

* 把要发送的数据送入缓存

func (*BasePeerConnection) SetStatus added in v0.1.24

func (this *BasePeerConnection) SetStatus(status PeerConnectionStatus)

func (*BasePeerConnection) Status added in v0.1.24

func (*BasePeerConnection) StopReceiver added in v0.1.24

func (this *BasePeerConnection) StopReceiver(trackId string) error

func (*BasePeerConnection) StopStream added in v0.1.24

func (this *BasePeerConnection) StopStream(streamId string) error

func (*BasePeerConnection) Write added in v0.1.24

func (this *BasePeerConnection) Write(sender *webrtc.RTPSender, buf []byte) error

func (*BasePeerConnection) WriteRTP added in v0.1.24

func (this *BasePeerConnection) WriteRTP(sender *webrtc.RTPSender, packet *rtp.Packet) error

type MeetingRoom added in v0.1.24

type MeetingRoom struct {
	Id       string `json:"id,omitempty"`
	Typ      string `json:"type,omitempty"`
	Action   string `json:"action,omitempty"`
	RoomId   string `json:"roomId,omitempty"`
	Identity string `json:"identity,omitempty"`
}

type MessageSlice added in v0.1.24

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

/把二进制消息分片和汇总

type NegotiateStatus added in v0.1.24

type NegotiateStatus string
const (
	NegotiateStatus_none        NegotiateStatus = "none"
	NegotiateStatus_negotiating NegotiateStatus = "negotiating" //协商过程中
	NegotiateStatus_negotiated  NegotiateStatus = "negotiated"
)

type PeerConnectionPool added in v0.1.24

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

func GetPeerConnectionPool added in v0.1.24

func GetPeerConnectionPool() *PeerConnectionPool

func (*PeerConnectionPool) Close added in v0.1.24

func (this *PeerConnectionPool) Close(peerId string, clientId string) bool

/主动关闭,从池中移除连接

func (*PeerConnectionPool) Emit added in v0.1.24

func (this *PeerConnectionPool) Emit(name WebrtcEventType, event *WebrtcEvent) (interface{}, error)

func (*PeerConnectionPool) On added in v0.1.24

func (this *PeerConnectionPool) On(name WebrtcEventType, fn func(event *WebrtcEvent) (interface{}, error))

type PeerConnectionStatus added in v0.1.24

type PeerConnectionStatus string
const (
	PeerConnectionStatus_none         PeerConnectionStatus = "none"
	PeerConnectionStatus_created      PeerConnectionStatus = "created"
	PeerConnectionStatus_init         PeerConnectionStatus = "init"
	PeerConnectionStatus_reconnecting PeerConnectionStatus = "reconnecting"
	PeerConnectionStatus_failed       PeerConnectionStatus = "failed"
	PeerConnectionStatus_connected    PeerConnectionStatus = "connected" //连接是否完全建立,即协商过程结束
	PeerConnectionStatus_closed       PeerConnectionStatus = "closed"    //是否关闭连接完成
)

type Sfu added in v0.1.24

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

* 自己实现的SFU sfu是多个peer的集合,一个room可以有多个sfu,但是在一个服务器peer上只能有一个,所以roomId和sfuId相同

func Create added in v0.1.24

func Create(sfuId string) *Sfu

* 创建新的SFU

type SfuPool added in v0.1.24

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

* 一个服务器上的所有sfu的集合,每个sfu都属于不同的room

func GetSfuPool added in v0.1.24

func GetSfuPool() *SfuPool

func (*SfuPool) Destroy added in v0.1.24

func (this *SfuPool) Destroy(roomId string) error

func (*SfuPool) Get added in v0.1.24

func (this *SfuPool) Get(roomId string) *Sfu

func (*SfuPool) Join added in v0.1.24

func (this *SfuPool) Join(peerConnection *AdvancedPeerConnection) (*Sfu, error)

* 根据roomId查找是否有sfu,如果存在就加入,不存在,则创建一个sfu并加入

func (*SfuPool) Leave added in v0.1.24

func (this *SfuPool) Leave(peerConnection *AdvancedPeerConnection) error

* 关闭*AdvancedPeerConnection

type SignalExtension added in v0.1.24

type SignalExtension struct {
	PeerId     string             `json:"peerId,omitempty"`
	ClientId   string             `json:"clientId,omitempty"`
	Name       string             `json:"name,omitempty"`
	Room       *MeetingRoom       `json:"room,omitempty"`
	IceServers []webrtc.ICEServer `json:"iceServers,omitempty"`
}

type SignalType added in v0.1.24

type SignalType string

type WebrtcEvent added in v0.1.24

type WebrtcEvent struct {
	PeerId           string      `json:"peerId,omitempty"`
	ClientId         string      `json:"clientId,omitempty"`
	Name             string      `json:"name,omitempty"`
	ConnectPeerId    string      `json:"connectPeerId,omitempty"`
	ConnectSessionId string      `json:"connectSessionId,omitempty"`
	Data             interface{} `json:"data,omitempty"`
}

type WebrtcEventType added in v0.1.24

type WebrtcEventType string

/可以注册的事件

const (
	WebrtcEventType_created            WebrtcEventType = "created"  //创建被叫连接
	WebrtcEventType_signal             WebrtcEventType = "signal"   //发送信号
	WebrtcEventType_onSignal           WebrtcEventType = "onSignal" //接收到信号
	WebrtcEventType_connected          WebrtcEventType = "connected"
	WebrtcEventType_closed             WebrtcEventType = "closed"
	WebrtcEventType_status             WebrtcEventType = "status"  //状态发生变化
	WebrtcEventType_message            WebrtcEventType = "message" //接收到消息
	WebrtcEventType_stream             WebrtcEventType = "stream"
	WebrtcEventType_removeStream       WebrtcEventType = "removeStream"
	WebrtcEventType_track              WebrtcEventType = "track"
	WebrtcEventType_addTrack           WebrtcEventType = "addTrack"
	WebrtcEventType_removeTrack        WebrtcEventType = "removeTrack"
	WebrtcEventType_error              WebrtcEventType = "error"
	WebrtcEventType_iceCandidate       WebrtcEventType = "iceCandidate"
	WebrtcEventType_connectionState    WebrtcEventType = "connectionState"
	WebrtcEventType_iceConnectionState WebrtcEventType = "iceConnectionState"
	WebrtcEventType_iceGatheringState  WebrtcEventType = "iceGatheringState"
	WebrtcEventType_signalingState     WebrtcEventType = "signalingState"
	WebrtcEventType_iceCompleted       WebrtcEventType = "iceCompleted"
	WebrtcEventType_dataChannelState   WebrtcEventType = "dataChannelState"
)

type WebrtcSignal added in v0.1.24

type WebrtcSignal struct {
	SignalType         string                     `json:"type,omitempty"`
	Renegotiate        bool                       `json:"renegotiate,omitempty"`
	TransceiverRequest map[string]interface{}     `json:"transceiverRequest,omitempty"`
	Candidates         []*webrtc.ICECandidateInit `json:"candidates,omitempty"`
	Sdp                *webrtc.SessionDescription `json:"sdp,omitempty"`
	SignalExtension    *SignalExtension           `json:"extension,omitempty"`
}

* 用于交换的signal消息,当type为join的时候,表示需要服务器反拨,发起offer 如果为offer,表示服务器为被叫方,如果router字段不为空,表示有sfu的要求

func Transform added in v0.1.24

func Transform(payload map[string]interface{}) *WebrtcSignal

/将信号消息转换成信号对象

Directories

Path Synopsis
receive
Package gst provides an easy API to create an appsink pipeline
Package gst provides an easy API to create an appsink pipeline
sink
Package gst provides an easy API to create an appsrc pipeline
Package gst provides an easy API to create an appsrc pipeline
ion
sfu
sip
softphone
Package softphone provides abstractions for SIP over Websocket
Package softphone provides abstractions for SIP over Websocket

Jump to

Keyboard shortcuts

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