Fix support sendrecv media for WebRTC passive consumer
This commit is contained in:
+12
-4
@@ -19,11 +19,11 @@ func (c *Conn) AddTrack(media *streamer.Media, track *streamer.Track) *streamer.
|
||||
switch track.Direction {
|
||||
case streamer.DirectionSendonly:
|
||||
// send our track to WebRTC consumer
|
||||
return c.addConsumerSendTrack(track)
|
||||
return c.addConsumerSendTrack(media, track)
|
||||
|
||||
case streamer.DirectionRecvonly:
|
||||
// receive track from WebRTC consumer (microphone, backchannel, two way audio)
|
||||
return c.addConsumerRecvTrack(track)
|
||||
return c.addConsumerRecvTrack(media, track)
|
||||
}
|
||||
|
||||
case streamer.ModePassiveProducer:
|
||||
@@ -42,7 +42,7 @@ func (c *Conn) AddTrack(media *streamer.Media, track *streamer.Track) *streamer.
|
||||
panic("not implemented")
|
||||
}
|
||||
|
||||
func (c *Conn) addConsumerSendTrack(track *streamer.Track) *streamer.Track {
|
||||
func (c *Conn) addConsumerSendTrack(media *streamer.Media, track *streamer.Track) *streamer.Track {
|
||||
codec := track.Codec
|
||||
|
||||
// webrtc.codecParametersFuzzySearch
|
||||
@@ -73,6 +73,10 @@ func (c *Conn) addConsumerSendTrack(track *streamer.Track) *streamer.Track {
|
||||
return nil
|
||||
}
|
||||
|
||||
if err = tr.SetMid(media.MID); err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
codecs := []webrtc.RTPCodecParameters{{RTPCodecCapability: caps}}
|
||||
if err = tr.SetCodecPreferences(codecs); err != nil {
|
||||
return nil
|
||||
@@ -110,7 +114,7 @@ func (c *Conn) addConsumerSendTrack(track *streamer.Track) *streamer.Track {
|
||||
return track
|
||||
}
|
||||
|
||||
func (c *Conn) addConsumerRecvTrack(track *streamer.Track) *streamer.Track {
|
||||
func (c *Conn) addConsumerRecvTrack(media *streamer.Media, track *streamer.Track) *streamer.Track {
|
||||
caps := webrtc.RTPCodecCapability{
|
||||
MimeType: MimeType(track.Codec),
|
||||
ClockRate: track.Codec.ClockRate,
|
||||
@@ -123,6 +127,10 @@ func (c *Conn) addConsumerRecvTrack(track *streamer.Track) *streamer.Track {
|
||||
return nil
|
||||
}
|
||||
|
||||
if err = tr.SetMid(media.MID); err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
codecs := []webrtc.RTPCodecParameters{
|
||||
{RTPCodecCapability: caps, PayloadType: webrtc.PayloadType(track.Codec.PayloadType)},
|
||||
}
|
||||
|
||||
+18
-1
@@ -33,7 +33,8 @@ func (c *Conn) SetOffer(offer string) (err error) {
|
||||
}
|
||||
|
||||
func (c *Conn) GetAnswer() (answer string, err error) {
|
||||
if c.Mode == streamer.ModePassiveProducer {
|
||||
switch c.Mode {
|
||||
case streamer.ModePassiveProducer:
|
||||
// init all Sender(s) for passive producer or they will be nil
|
||||
// sender for passive producer is backchannel
|
||||
sd := &sdp.SessionDescription{}
|
||||
@@ -59,6 +60,22 @@ func (c *Conn) GetAnswer() (answer string, err error) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case streamer.ModePassiveConsumer:
|
||||
// fix sendrecv transeivers - set for sendonly codecs from recvonly
|
||||
for _, tr1 := range c.pc.GetTransceivers() {
|
||||
for _, tr2 := range c.pc.GetTransceivers() {
|
||||
if tr1 == tr2 {
|
||||
continue
|
||||
}
|
||||
if tr1.Mid() == tr2.Mid() && tr2.Direction() == webrtc.RTPTransceiverDirectionRecvonly {
|
||||
codecs := tr2.Receiver().GetParameters().Codecs
|
||||
if err = tr1.SetCodecPreferences(codecs); err != nil {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// we need to process remote offer after we create transeivers
|
||||
|
||||
Reference in New Issue
Block a user