Add media list option to webrtc create function

This commit is contained in:
Alexey Khit
2023-03-01 18:01:11 +03:00
parent df0ab77791
commit c70c3a58f1
2 changed files with 28 additions and 11 deletions
+12 -2
View File
@@ -60,8 +60,13 @@ func asyncClient(url string) (streamer.Producer, error) {
} }
}) })
medias := []*streamer.Media{
{Kind: streamer.KindVideo, Direction: streamer.DirectionRecvonly},
{Kind: streamer.KindAudio, Direction: streamer.DirectionRecvonly},
}
// 3. Create offer // 3. Create offer
offer, err := prod.CreateOffer() offer, err := prod.CreateOffer(medias)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -123,8 +128,13 @@ func syncClient(url string) (streamer.Producer, error) {
prod := webrtc.NewConn(pc) prod := webrtc.NewConn(pc)
medias := []*streamer.Media{
{Kind: streamer.KindVideo, Direction: streamer.DirectionRecvonly},
{Kind: streamer.KindAudio, Direction: streamer.DirectionRecvonly},
}
// 3. Create offer // 3. Create offer
offer, err := prod.CreateCompleteOffer() offer, err := prod.CreateCompleteOffer(medias)
if err != nil { if err != nil {
return nil, err return nil, err
} }
+16 -9
View File
@@ -6,10 +6,16 @@ import (
"github.com/pion/webrtc/v3" "github.com/pion/webrtc/v3"
) )
func (c *Conn) CreateOffer() (string, error) { func (c *Conn) CreateOffer(medias []*streamer.Media) (string, error) {
init := webrtc.RTPTransceiverInit{Direction: webrtc.RTPTransceiverDirectionRecvonly} for _, media := range medias {
_, _ = c.pc.AddTransceiverFromKind(webrtc.RTPCodecTypeVideo, init) if _, err := c.pc.AddTransceiverFromKind(
_, _ = c.pc.AddTransceiverFromKind(webrtc.RTPCodecTypeAudio, init) webrtc.NewRTPCodecType(media.Kind), webrtc.RTPTransceiverInit{
Direction: webrtc.NewRTPTransceiverDirection(media.Direction),
},
); err != nil {
return "", err
}
}
desc, err := c.pc.CreateOffer(nil) desc, err := c.pc.CreateOffer(nil)
if err != nil { if err != nil {
@@ -20,11 +26,11 @@ func (c *Conn) CreateOffer() (string, error) {
return "", err return "", err
} }
return desc.SDP, nil return c.pc.LocalDescription().SDP, nil
} }
func (c *Conn) CreateCompleteOffer() (string, error) { func (c *Conn) CreateCompleteOffer(medias []*streamer.Media) (string, error) {
if _, err := c.CreateOffer(); err != nil { if _, err := c.CreateOffer(medias); err != nil {
return "", err return "", err
} }
@@ -47,13 +53,14 @@ func (c *Conn) SetAnswer(answer string) (err error) {
// sort medias, so video will always be before audio // sort medias, so video will always be before audio
// and ignore application media from Hass default lovelace card // and ignore application media from Hass default lovelace card
// ignore media without direction (inactive media)
for _, media := range medias { for _, media := range medias {
if media.Kind == streamer.KindVideo { if media.Kind == streamer.KindVideo && media.Direction != "" {
c.medias = append(c.medias, media) c.medias = append(c.medias, media)
} }
} }
for _, media := range medias { for _, media := range medias {
if media.Kind == streamer.KindAudio { if media.Kind == streamer.KindAudio && media.Direction != "" {
c.medias = append(c.medias, media) c.medias = append(c.medias, media)
} }
} }