mirror of
https://github.com/AlexxIT/go2rtc.git
synced 2025-09-27 04:36:12 +08:00
Adds ExchangeSDP function to webrtc module
This commit is contained in:
@@ -255,6 +255,55 @@ func offerHandler(ctx *api.Context, msg *streamer.Message) {
|
|||||||
ctx.Consumer = conn
|
ctx.Consumer = conn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExchangeSDP(
|
||||||
|
stream *streams.Stream, offer string, userAgent string,
|
||||||
|
) (answer string, err error) {
|
||||||
|
// create new webrtc instance
|
||||||
|
conn := new(webrtc.Conn)
|
||||||
|
conn.Conn, err = NewPConn()
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Err(err).Msg("[webrtc] new conn")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
conn.UserAgent = userAgent
|
||||||
|
conn.Listen(func(msg interface{}) {
|
||||||
|
switch msg := msg.(type) {
|
||||||
|
case streamer.EventType:
|
||||||
|
if msg == streamer.StateNull {
|
||||||
|
stream.RemoveConsumer(conn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 1. SetOffer, so we can get remote client codecs
|
||||||
|
log.Trace().Msgf("[webrtc] offer:\n%s", offer)
|
||||||
|
|
||||||
|
if err = conn.SetOffer(offer); err != nil {
|
||||||
|
log.Warn().Err(err).Msg("[api.webrtc] set offer")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. AddConsumer, so we get new tracks
|
||||||
|
if err = stream.AddConsumer(conn); err != nil {
|
||||||
|
log.Warn().Err(err).Msg("[api.webrtc] add consumer")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
conn.Init()
|
||||||
|
|
||||||
|
// exchange sdp without waiting all candidates
|
||||||
|
//answer, err := conn.ExchangeSDP(offer, false)
|
||||||
|
answer, err = conn.GetCompleteAnswer()
|
||||||
|
log.Trace().Msgf("[webrtc] answer\n%s", answer)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Err(err).Msg("[webrtc] get answer")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func candidateHandler(ctx *api.Context, msg *streamer.Message) {
|
func candidateHandler(ctx *api.Context, msg *streamer.Message) {
|
||||||
if ctx.Consumer == nil {
|
if ctx.Consumer == nil {
|
||||||
return
|
return
|
||||||
|
@@ -186,6 +186,15 @@ func (c *Conn) GetAnswer() (answer string, err error) {
|
|||||||
return sdAnswer.SDP, nil
|
return sdAnswer.SDP, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Conn) GetCompleteAnswer() (answer string, err error) {
|
||||||
|
if _, err = c.GetAnswer(); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
<-webrtc.GatheringCompletePromise(c.Conn)
|
||||||
|
return c.Conn.LocalDescription().SDP, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Conn) remote() string {
|
func (c *Conn) remote() string {
|
||||||
for _, trans := range c.Conn.GetTransceivers() {
|
for _, trans := range c.Conn.GetTransceivers() {
|
||||||
pair, _ := trans.Receiver().Transport().ICETransport().GetSelectedCandidatePair()
|
pair, _ := trans.Receiver().Transport().ICETransport().GetSelectedCandidatePair()
|
||||||
|
Reference in New Issue
Block a user