Generate transceivers from incoming SDP.
This commit is contained in:
+19
-19
@@ -11,6 +11,7 @@ import (
|
||||
|
||||
"github.com/pion/rtcp"
|
||||
"github.com/pion/rtp"
|
||||
"github.com/pion/sdp/v3"
|
||||
"github.com/pion/webrtc/v3"
|
||||
|
||||
"github.com/jech/galene/conn"
|
||||
@@ -458,30 +459,29 @@ func pushConn(up *rtpUpConnection, g *group.Group, cs []group.Client) {
|
||||
}(g, cs)
|
||||
}
|
||||
|
||||
func newUpConn(c group.Client, id string, labels map[string]string) (*rtpUpConnection, error) {
|
||||
func newUpConn(c group.Client, id string, labels map[string]string, offer string) (*rtpUpConnection, error) {
|
||||
var o sdp.SessionDescription
|
||||
err := o.Unmarshal([]byte(offer))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
pc, err := c.Group().API().NewPeerConnection(*ice.ICEConfiguration())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
_, err = pc.AddTransceiverFromKind(webrtc.RTPCodecTypeAudio,
|
||||
webrtc.RtpTransceiverInit{
|
||||
Direction: webrtc.RTPTransceiverDirectionRecvonly,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
pc.Close()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
_, err = pc.AddTransceiverFromKind(webrtc.RTPCodecTypeVideo,
|
||||
webrtc.RtpTransceiverInit{
|
||||
Direction: webrtc.RTPTransceiverDirectionRecvonly,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
pc.Close()
|
||||
return nil, err
|
||||
for _, m := range o.MediaDescriptions {
|
||||
_, err = pc.AddTransceiverFromKind(
|
||||
webrtc.NewRTPCodecType(m.MediaName.Media),
|
||||
webrtc.RtpTransceiverInit{
|
||||
Direction: webrtc.RTPTransceiverDirectionRecvonly,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
pc.Close()
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
up := &rtpUpConnection{id: id, pc: pc, labels: labels}
|
||||
|
||||
@@ -206,7 +206,7 @@ func getUpConns(c *webClient) []*rtpUpConnection {
|
||||
return up
|
||||
}
|
||||
|
||||
func addUpConn(c *webClient, id string, labels map[string]string) (*rtpUpConnection, bool, error) {
|
||||
func addUpConn(c *webClient, id string, labels map[string]string, offer string) (*rtpUpConnection, bool, error) {
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
|
||||
@@ -222,7 +222,7 @@ func addUpConn(c *webClient, id string, labels map[string]string) (*rtpUpConnect
|
||||
return old, false, nil
|
||||
}
|
||||
|
||||
conn, err := newUpConn(c, id, labels)
|
||||
conn, err := newUpConn(c, id, labels, offer)
|
||||
if err != nil {
|
||||
return nil, false, err
|
||||
}
|
||||
@@ -488,7 +488,7 @@ func gotOffer(c *webClient, id string, sdp string, renegotiate bool, labels map[
|
||||
delUpConn(c, id)
|
||||
}
|
||||
|
||||
up, isnew, err := addUpConn(c, id, labels)
|
||||
up, isnew, err := addUpConn(c, id, labels, sdp)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user