1 Star 0 Fork 0

zengyongheng/ionsdkgojson

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
transport.go 3.28 KB
一键复制 编辑 原始数据 按行查看 历史
zengyongheng 提交于 2021-07-04 00:34 +08:00 . init
package engine
import (
"github.com/pion/ice/v2"
log "github.com/pion/ion-log"
"github.com/pion/webrtc/v3"
)
// Transport is pub/sub transport
type Transport struct {
api *webrtc.DataChannel
signal *Signal
pc *webrtc.PeerConnection
role int
config WebRTCTransportConfig
SendCandidates []*webrtc.ICECandidate
RecvCandidates []webrtc.ICECandidateInit
}
// NewTransport create a transport
func NewTransportByMedia(role int, signal *Signal, cfg WebRTCTransportConfig, me *webrtc.MediaEngine) *Transport {
t := &Transport{
role: role,
signal: signal,
config: cfg,
}
var err error
var api *webrtc.API
cfg.Setting.SetICEMulticastDNSMode(ice.MulticastDNSModeDisabled)
/*
var me *webrtc.MediaEngine
cfg.Setting.SetICEMulticastDNSMode(ice.MulticastDNSModeDisabled)
if role == PUBLISHER {
me, err = getPublisherMediaEngine(cfg.VideoMime)
} else {
me, err = getSubscriberMediaEngine()
}
api = webrtc.NewAPI(webrtc.WithMediaEngine(me), webrtc.WithSettingEngine(cfg.Setting))
*/
api = webrtc.NewAPI(webrtc.WithMediaEngine(me), webrtc.WithSettingEngine(cfg.Setting))
t.pc, err = api.NewPeerConnection(cfg.Configuration)
if err != nil {
log.Errorf("NewPeerConnection error: %v", err)
return nil
}
if role == PUBLISHER {
_, err = t.pc.CreateDataChannel(API_CHANNEL, &webrtc.DataChannelInit{})
if err != nil {
log.Errorf("error creating data channel: %v", err)
return nil
}
}
t.pc.OnICECandidate(func(c *webrtc.ICECandidate) {
if c == nil {
// Gathering done
log.Infof("gather candidate done")
return
}
//append before join session success
if t.pc.CurrentRemoteDescription() == nil {
t.SendCandidates = append(t.SendCandidates, c)
} else {
for _, cand := range t.SendCandidates {
t.signal.Trickle(cand, role)
}
t.SendCandidates = []*webrtc.ICECandidate{}
t.signal.Trickle(c, role)
}
})
return t
}
// NewTransport create a transport
func NewTransport(role int, signal *Signal, cfg WebRTCTransportConfig) *Transport {
t := &Transport{
role: role,
signal: signal,
config: cfg,
}
var err error
var api *webrtc.API
var me *webrtc.MediaEngine
cfg.Setting.SetICEMulticastDNSMode(ice.MulticastDNSModeDisabled)
if role == PUBLISHER {
me, err = getPublisherMediaEngine(cfg.VideoMime)
} else {
me, err = getSubscriberMediaEngine()
}
api = webrtc.NewAPI(webrtc.WithMediaEngine(me), webrtc.WithSettingEngine(cfg.Setting))
t.pc, err = api.NewPeerConnection(cfg.Configuration)
if err != nil {
log.Errorf("NewPeerConnection error: %v", err)
return nil
}
if role == PUBLISHER {
_, err = t.pc.CreateDataChannel(API_CHANNEL, &webrtc.DataChannelInit{})
if err != nil {
log.Errorf("error creating data channel: %v", err)
return nil
}
}
t.pc.OnICECandidate(func(c *webrtc.ICECandidate) {
if c == nil {
// Gathering done
log.Infof("gather candidate done")
return
}
//append before join session success
if t.pc.CurrentRemoteDescription() == nil {
t.SendCandidates = append(t.SendCandidates, c)
} else {
for _, cand := range t.SendCandidates {
t.signal.Trickle(cand, role)
}
t.SendCandidates = []*webrtc.ICECandidate{}
t.signal.Trickle(c, role)
}
})
return t
}
func (t *Transport) GetPeerConnection() *webrtc.PeerConnection {
return t.pc
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/zengyongheng/ionsdkgojson.git
git@gitee.com:zengyongheng/ionsdkgojson.git
zengyongheng
ionsdkgojson
ionsdkgojson
54d76d672752

搜索帮助