Skip to content
This repository has been archived by the owner on Dec 2, 2023. It is now read-only.

Commit

Permalink
Merge branch 'master' of https://github.com/pion/ion
Browse files Browse the repository at this point in the history
  • Loading branch information
kangshaojun committed Mar 30, 2020
2 parents 1539e8c + 8b15512 commit 7da9d01
Show file tree
Hide file tree
Showing 12 changed files with 94 additions and 32 deletions.
8 changes: 4 additions & 4 deletions go.mod
Expand Up @@ -18,10 +18,10 @@ require (
github.com/nats-io/nats-server/v2 v2.1.4 // indirect
github.com/notedit/sdp v0.0.2
github.com/pion/rtcp v1.2.1
github.com/pion/rtp v1.3.2
github.com/pion/rtp v1.4.0
github.com/pion/stun v0.3.3
github.com/pion/transport v0.8.10
github.com/pion/webrtc/v2 v2.2.2
github.com/pion/transport v0.10.0
github.com/pion/webrtc/v2 v2.2.5-0.20200329193949-862d30743ef3
github.com/rs/zerolog v1.17.2
github.com/shirou/gopsutil v2.20.1+incompatible
github.com/spf13/viper v1.6.2
Expand All @@ -31,6 +31,6 @@ require (
github.com/xtaci/kcp-go v5.4.20+incompatible
github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 // indirect
go.etcd.io/etcd v3.3.18+incompatible
golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d
golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d
sigs.k8s.io/yaml v1.2.0 // indirect
)
23 changes: 23 additions & 0 deletions go.sum
Expand Up @@ -155,10 +155,16 @@ github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pion/datachannel v1.4.15 h1:DrizUL97f9evDyoskyMLrFFFmOWCfXFGiGSbxmQyYt4=
github.com/pion/datachannel v1.4.15/go.mod h1:yixWvOWPime7vRVuihP1GzZPBELQkO/ZM1mrBc2BNM8=
github.com/pion/datachannel v1.4.16 h1:dvuDC0IBMUDQvwO+gRu0Dv+W5j7rrgNpCmtheb6iYnc=
github.com/pion/datachannel v1.4.16/go.mod h1:gRGhxZv7X2/30Qxes4WEXtimKBXcwj/3WsDtBlHnvJY=
github.com/pion/dtls/v2 v2.0.0-rc.7 h1:LDAIQDt1pcuAIJs7Q2EZ3PSl8MseCFA2nCW0YYSYCx0=
github.com/pion/dtls/v2 v2.0.0-rc.7/go.mod h1:U199DvHpRBN0muE9+tVN4TMy1jvEhZIZ63lk4xkvVSk=
github.com/pion/dtls/v2 v2.0.0-rc.9 h1:wPb0JKmYoleAM2o8vQSPaUM+geJq7l0AdeUlPsg19ec=
github.com/pion/dtls/v2 v2.0.0-rc.9/go.mod h1:6eFkFvpo0T+odQ+39HFEtOO7LX5cUlFqXdSo4ucZtGg=
github.com/pion/ice v0.7.9 h1:RKol/0RFu3TIE8ZLIFV1A1e/QW22B6BZKvSG9sfawEM=
github.com/pion/ice v0.7.9/go.mod h1:8BCwuq/EqAKhtUb8CIw2fWjVLotWOu13XJY09H3RVxA=
github.com/pion/ice v0.7.10 h1:ydViRi+ZqvCzbJYNLuQoOqOJflSPVIGVC3NL6PDecm8=
github.com/pion/ice v0.7.10/go.mod h1:YufCtyMmPeZXGTuARCracYfe0mb3EXbcRUS+vHJB5Cs=
github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY=
github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms=
github.com/pion/mdns v0.0.4 h1:O4vvVqr4DGX63vzmO6Fw9vpy3lfztVWHGCQfyw0ZLSY=
Expand All @@ -170,21 +176,33 @@ github.com/pion/rtcp v1.2.1/go.mod h1:a5dj2d6BKIKHl43EnAOIrCczcjESrtPuMgfmL6/K6Q
github.com/pion/rtp v1.3.0/go.mod h1:q9wPnA96pu2urCcW/sK/RiDn597bhGoAQQ+y2fDwHuY=
github.com/pion/rtp v1.3.2 h1:Yfzf1mU4Zmg7XWHitzYe2i+l+c68iO+wshzIUW44p1c=
github.com/pion/rtp v1.3.2/go.mod h1:q9wPnA96pu2urCcW/sK/RiDn597bhGoAQQ+y2fDwHuY=
github.com/pion/rtp v1.4.0 h1:EkeHEXKuJhZoRUxtL2Ie80vVg9gBH+poT9UoL8M14nw=
github.com/pion/rtp v1.4.0/go.mod h1:/l4cvcKd0D3u9JLs2xSVI95YkfXW87a3br3nqmVtSlE=
github.com/pion/sctp v1.7.5 h1:ognJDlxP7dN2xMUEHEea5pqjdD78o5UAMcLoP1JIp1g=
github.com/pion/sctp v1.7.5/go.mod h1:ichkYQ5tlgCQwEwvgfdcAolqx1nHbYCxo4D7zK/K0X8=
github.com/pion/sctp v1.7.6 h1:8qZTdJtbKfAns/Hv5L0PAj8FyXcsKhMH1pKUCGisQg4=
github.com/pion/sctp v1.7.6/go.mod h1:ichkYQ5tlgCQwEwvgfdcAolqx1nHbYCxo4D7zK/K0X8=
github.com/pion/sdp/v2 v2.3.4 h1:+f3F5Xl7ynVhc9Il8Dc7BFroYJWG3PMbfWtwFlVI+kg=
github.com/pion/sdp/v2 v2.3.4/go.mod h1:jccXVYW0fuK6ds2pwKr89SVBDYlCjhgMI6nucl5R5rA=
github.com/pion/sdp/v2 v2.3.5 h1:DtS9Z9R+E3/mn2jt+RQKBnneK1g+p3PT25+TkQHodfU=
github.com/pion/sdp/v2 v2.3.5/go.mod h1:+ZZf35r1+zbaWYiZLfPutWfx58DAWcGb2QsS3D/s9M8=
github.com/pion/srtp v1.2.7 h1:UYyLs5MXwbFtXWduBA5+RUWhaEBX7GmetXDZSKP+uPM=
github.com/pion/srtp v1.2.7/go.mod h1:KIgLSadhg/ioogO/LqIkRjZrwuJo0c9RvKIaGQj4Yew=
github.com/pion/srtp v1.3.1 h1:WNDLN41ST0P6cXRpzx97JJW//vChAEo1+Etdqo+UMnM=
github.com/pion/srtp v1.3.1/go.mod h1:nxEytDDGTN+eNKJ1l5gzOCWQFuksgijorsSlgEjc40Y=
github.com/pion/stun v0.3.3 h1:brYuPl9bN9w/VM7OdNzRSLoqsnwlyNvD9MVeJrHjDQw=
github.com/pion/stun v0.3.3/go.mod h1:xrCld6XM+6GWDZdvjPlLMsTU21rNxnO6UO8XsAvHr/M=
github.com/pion/transport v0.6.0/go.mod h1:iWZ07doqOosSLMhZ+FXUTq+TamDoXSllxpbGcfkCmbE=
github.com/pion/transport v0.8.10 h1:lTiobMEw2PG6BH/mgIVqTV2mBp/mPT+IJLaN8ZxgdHk=
github.com/pion/transport v0.8.10/go.mod h1:tBmha/UCjpum5hqTWhfAEs3CO4/tHSg0MYRhSzR+CZ8=
github.com/pion/transport v0.10.0 h1:9M12BSneJm6ggGhJyWpDveFOstJsTiQjkLf4M44rm80=
github.com/pion/transport v0.10.0/go.mod h1:BnHnUipd0rZQyTVB2SBGojFHT9CBt5C5TcsJSQGkvSE=
github.com/pion/turn/v2 v2.0.3 h1:SJUUIbcPoehlyZgMyIUbBBDhI03sBx32x3JuSIBKBWA=
github.com/pion/turn/v2 v2.0.3/go.mod h1:kl1hmT3NxcLynpXVnwJgObL8C9NaCyPTeqI2DcCpSZs=
github.com/pion/webrtc/v2 v2.2.2 h1:ace9itTe8YND8m3lv5ndQurfk/DsChj+4pBzVJeBA04=
github.com/pion/webrtc/v2 v2.2.2/go.mod h1:oftEPcdfIvZVC1J0VP1OpyVCwB9tDkRXSYAszkL/2k4=
github.com/pion/webrtc/v2 v2.2.5-0.20200329193949-862d30743ef3 h1:MUeB0gnK21AvVYQNw6ia6mEclN1g0mUXOi4IRWj4E/E=
github.com/pion/webrtc/v2 v2.2.5-0.20200329193949-862d30743ef3/go.mod h1:cpH+V4srmAK1YmpgF/BOoCd11peOpeVkJhLcaxUEcwQ=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
Expand Down Expand Up @@ -275,6 +293,8 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d h1:9FCpayM9Egr1baVnV1SX0H87m+XB0B8S0hAMi99X/3U=
golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d h1:1ZiEyfaQIg3Qh0EoqpwAakHVhecoE5wlSg5GjnafJGw=
golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
Expand All @@ -289,6 +309,9 @@ golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
Expand Down
3 changes: 2 additions & 1 deletion pkg/discovery/node.go
Expand Up @@ -139,7 +139,8 @@ func (sw *ServiceWatcher) WatchServiceNode(serviceName string, callback ServiceW
for {
nodes, err := sw.reg.GetServiceNodes(serviceName)
if err != nil {
log.Panicf("%v", err)
log.Warnf("sw.reg.GetServiceNodes err=%v", err)
continue
}
log.Debugf("Nodes: => %v", nodes)

Expand Down
3 changes: 2 additions & 1 deletion pkg/node/biz/client.go
Expand Up @@ -145,6 +145,7 @@ func join(peer *signal.Peer, msg map[string]interface{}) (map[string]interface{}
mid := pub.(map[string]interface{})["mid"].(string)
uid := pub.(map[string]interface{})["uid"].(string)
rid := result["rid"].(string)
tracks := pub.(map[string]interface{})["tracks"].(map[string]interface{})

var infoObj map[string]interface{}
err := json.Unmarshal([]byte(info), &infoObj)
Expand All @@ -154,7 +155,7 @@ func join(peer *signal.Peer, msg map[string]interface{}) (map[string]interface{}
log.Infof("IslbGetPubs: mid=%v info=%v", mid, infoObj)
// peer <= range pubs(mid)
if mid != "" {
peer.Notify(proto.ClientOnStreamAdd, util.Map("rid", rid, "uid", uid, "mid", mid, "info", infoObj))
peer.Notify(proto.ClientOnStreamAdd, util.Map("rid", rid, "uid", uid, "mid", mid, "info", infoObj, "tracks", tracks))
}
}
},
Expand Down
19 changes: 17 additions & 2 deletions pkg/node/islb/internal.go
Expand Up @@ -160,6 +160,8 @@ func streamAdd(data map[string]interface{}) (map[string]interface{}, *nprotoo.Er
Type: tmp["type"].(string),
Ssrc: int(tmp["ssrc"].(float64)),
Payload: int(tmp["pt"].(float64)),
Codec: tmp["codec"].(string),
Fmtp: tmp["fmtp"].(string),
})
}
field, value, err := proto.MarshalTrackField(msid, infos)
Expand All @@ -176,7 +178,7 @@ func streamAdd(data map[string]interface{}) (map[string]interface{}, *nprotoo.Er

// dc1/room1/user/info/${uid} info {"name": "Guest"}
fields := redis.HGetAll(proto.BuildUserInfoKey(dc, rid, uid))
msg := util.Map("rid", rid, "uid", uid, "mid", mid, "info", fields["info"])
msg := util.Map("rid", rid, "uid", uid, "mid", mid, "info", fields["info"], "tracks", tracks)
log.Infof("Broadcast: [stream-add] => %v", msg)
broadcaster.Say(proto.IslbOnStreamAdd, msg)

Expand Down Expand Up @@ -222,7 +224,20 @@ func getPubs(data map[string]interface{}) (map[string]interface{}, *nprotoo.Erro
log.Errorf("%v", err)
}
fields := redis.HGetAll(proto.BuildUserInfoKey(info.DC, info.RID, info.UID))
pub := util.Map("rid", rid, "uid", uid, "mid", info.MID, "info", fields["info"])
trackFields := redis.HGetAll(path)

tracks := make(map[string][]proto.TrackInfo)
for key, value := range trackFields {
if strings.HasPrefix(key, "track/") {
msid, infos, err := proto.UnmarshalTrackField(key, value)
if err != nil {
log.Errorf("%v", err)
}
log.Debugf("msid => %s, tracks => %v\n", msid, infos)
tracks[msid] = *infos
}
}
pub := util.Map("rid", rid, "uid", uid, "mid", info.MID, "info", fields["info"], "tracks", tracks)
pubs = append(pubs, pub)
}

Expand Down
12 changes: 8 additions & 4 deletions pkg/node/sfu/internal.go
Expand Up @@ -103,25 +103,27 @@ func publish(msg map[string]interface{}) (map[string]interface{}, *nprotoo.Error
for _, stream := range sdpObj.GetStreams() {
for id, track := range stream.GetTracks() {
pt := int(0)
codecType := ""
media := sdpObj.GetMedia(track.GetMedia())
codecs := media.GetCodecs()

for payload, codec := range codecs {
if track.GetMedia() == "audio" {
if strings.ToUpper(codec.GetCodec()) == webrtc.Opus {
codecType = strings.ToUpper(codec.GetCodec())
if strings.ToUpper(codec.GetCodec()) == strings.ToUpper(webrtc.Opus) {
pt = payload
break
}
} else if track.GetMedia() == "video" {
codecType := strings.ToUpper(codec.GetCodec())
codecType = strings.ToUpper(codec.GetCodec())
if codecType == webrtc.H264 || codecType == webrtc.VP8 || codecType == webrtc.VP9 {
pt = payload
break
}
}
}
var infos []proto.TrackInfo
infos = append(infos, proto.TrackInfo{Ssrc: int(track.GetSSRCS()[0]), Payload: pt, Type: track.GetMedia(), ID: id})
infos = append(infos, proto.TrackInfo{Ssrc: int(track.GetSSRCS()[0]), Payload: pt, Type: track.GetMedia(), ID: id, Codec: codecType})
tracks[stream.GetID()+" "+id] = infos
}
}
Expand Down Expand Up @@ -193,6 +195,8 @@ func subscribe(msg map[string]interface{}) (map[string]interface{}, *nprotoo.Err
Type: info["type"].(string),
Ssrc: int(info["ssrc"].(float64)),
Payload: int(info["pt"].(float64)),
Codec: info["codec"].(string),
Fmtp: info["fmtp"].(string),
}
ssrcPT[uint32(trackInfo.Ssrc)] = uint8(trackInfo.Payload)
tracks[msid] = trackInfo
Expand All @@ -206,7 +210,7 @@ func subscribe(msg map[string]interface{}) (map[string]interface{}, *nprotoo.Err
// streamID trackID
streamID := strings.Split(msid, " ")[0]
trackID := track.ID
log.Infof("AddTrack: ssrc:%d, pt:%d, streamID %s, trackID %s", ssrc, pt, streamID, trackID)
log.Infof("AddTrack: codec:%s, ssrc:%d, pt:%d, streamID %s, trackID %s", track.Codec, ssrc, pt, streamID, trackID)
_, err := sub.AddTrack(ssrc, pt, streamID, track.ID)
if err != nil {
log.Errorf("err=%v", err)
Expand Down
2 changes: 2 additions & 0 deletions pkg/proto/proto.go
Expand Up @@ -142,6 +142,8 @@ type TrackInfo struct {
Ssrc int `json:"ssrc"`
Payload int `json:"pt"`
Type string `json:"type"`
Codec string `json:"codec"`
Fmtp string `json:"fmtp"`
}

func MarshalTrackField(id string, infos []TrackInfo) (string, string, error) {
Expand Down
14 changes: 6 additions & 8 deletions pkg/rtc/transport/webrtctransport.go
Expand Up @@ -3,7 +3,6 @@ package transport
import (
"errors"
"io"
"time"

"sync"

Expand All @@ -15,6 +14,7 @@ import (

const (
maxChanSize = 100
IOSH264Fmtp = "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f"
)

var (
Expand Down Expand Up @@ -107,17 +107,17 @@ func (w *WebRTCTransport) init(options map[string]interface{}) error {

if publish {
if codec == webrtc.H264 {
w.mediaEngine.RegisterCodec(webrtc.NewRTPH264CodecExt(webrtc.DefaultPayloadTypeH264, 90000, rtcpfb))
w.mediaEngine.RegisterCodec(webrtc.NewRTPH264CodecExt(webrtc.DefaultPayloadTypeH264, 90000, rtcpfb, IOSH264Fmtp))
} else if codec == webrtc.VP8 {
w.mediaEngine.RegisterCodec(webrtc.NewRTPVP8CodecExt(webrtc.DefaultPayloadTypeVP8, 90000, rtcpfb))
w.mediaEngine.RegisterCodec(webrtc.NewRTPVP8CodecExt(webrtc.DefaultPayloadTypeVP8, 90000, rtcpfb, ""))
} else if codec == webrtc.VP9 {
w.mediaEngine.RegisterCodec(webrtc.NewRTPVP9Codec(webrtc.DefaultPayloadTypeVP9, 90000))
} else {
w.mediaEngine.RegisterCodec(webrtc.NewRTPH264CodecExt(webrtc.DefaultPayloadTypeH264, 90000, rtcpfb))
w.mediaEngine.RegisterCodec(webrtc.NewRTPH264CodecExt(webrtc.DefaultPayloadTypeH264, 90000, rtcpfb, IOSH264Fmtp))
}
} else {
w.mediaEngine.RegisterCodec(webrtc.NewRTPH264CodecExt(webrtc.DefaultPayloadTypeH264, 90000, rtcpfb))
w.mediaEngine.RegisterCodec(webrtc.NewRTPVP8CodecExt(webrtc.DefaultPayloadTypeVP8, 90000, rtcpfb))
w.mediaEngine.RegisterCodec(webrtc.NewRTPH264CodecExt(webrtc.DefaultPayloadTypeH264, 90000, rtcpfb, IOSH264Fmtp))
w.mediaEngine.RegisterCodec(webrtc.NewRTPVP8CodecExt(webrtc.DefaultPayloadTypeVP8, 90000, rtcpfb, ""))
w.mediaEngine.RegisterCodec(webrtc.NewRTPVP9Codec(webrtc.DefaultPayloadTypeVP9, 90000))
}

Expand Down Expand Up @@ -181,8 +181,6 @@ func NewWebRTCTransport(id string, options map[string]interface{}) *WebRTCTransp
log.Infof("w.pc.OnICECandidate remoteSDP == nil c=%v", c)
} else {
log.Infof("w.pc.OnICECandidate remoteSDP != nil c=%v", c)
//fix pc ERROR: 2020/03/09 23:38:13 Incoming unhandled RTP ssrc(2693032141)
time.Sleep(time.Millisecond * 100)
w.candidateCh <- c
}
})
Expand Down
2 changes: 1 addition & 1 deletion scripts/etcdStop.sh
Expand Up @@ -3,7 +3,7 @@ APP_DIR=$(cd `dirname $0`/../;pwd)
OS_TYPE=""
. $APP_DIR/scripts/common

if [[ "$OS" =~ "Darwin" ]];then
if [[ "$OS_TYPE" =~ "Darwin" ]];then
brew services stop etcd
else
sudo systemctl stop etcd
Expand Down
2 changes: 1 addition & 1 deletion scripts/natsStop.sh
Expand Up @@ -30,7 +30,7 @@ do
done

if [[ "$OS_TYPE" =~ "Darwin" ]];then
brew services start nats-server
brew services stop nats-server
else
echo "stop process..."
PID=`cat $PID_FILE`
Expand Down
5 changes: 2 additions & 3 deletions sdk/flutter/example/lib/page/meeting_page.dart
Expand Up @@ -46,10 +46,9 @@ class _MeetingPageState extends State<MeetingPage> {
this._showSnackBar(":::Peer [$id] leave:::");
});

client.on('stream-add', (rid, mid, info) async {
client.on('stream-add', (rid, mid, info, tracks) async {
var bandwidth = prefs.getString('bandwidth') ?? '512';
var codec = prefs.getString('codec') ?? 'vp8';
var stream = await client.subscribe(rid, mid, codec, bandwidth);
var stream = await client.subscribe(rid, mid, tracks, bandwidth);
var adapter = VideoRendererAdapter(stream.mid, stream, false, mid);
await adapter.setupSrcObject();
this.setState(() {
Expand Down
33 changes: 26 additions & 7 deletions sdk/flutter/lib/src/client.dart
Expand Up @@ -177,9 +177,27 @@ class Client extends EventEmitter {
}

Future<Stream> subscribe(rid, mid,
[String codec = 'vp8', String bandwidth = '512']) async {
logger.debug('subscribe rid => $rid, mid => $mid');
tracks, [String bandwidth = '512']) async {
logger.debug('subscribe rid => $rid, mid => $mid, tracks => ${tracks.toString()}');
Completer completer = new Completer<Stream>();
var codec = "";
tracks.forEach((trackID,trackInfoArr) async {
logger.debug('trackInfoArr=$trackInfoArr');

for(var i=0; i<trackInfoArr.length; i++){
var trackInfo=trackInfoArr[i];
logger.debug('trackInfo=$trackInfo');
var type = trackInfo['type'];
logger.debug('type=$type');
if (type == "video") {
codec = trackInfo['codec'];
logger.debug('codec=$codec');
}
}
}
);


var options = {
'codec': codec,
'bandwidth': bandwidth,
Expand Down Expand Up @@ -225,7 +243,7 @@ class Client extends EventEmitter {
},
'optional': [],
});
var desc = this._payloadModify(offer, options['codec'], false);
var desc = this._payloadModify(offer, codec, false);
await pc.setLocalDescription(desc);
this._pcs[mid] = pc;
} catch (error) {
Expand Down Expand Up @@ -297,7 +315,7 @@ class Client extends EventEmitter {
payload = DefaultPayloadTypeVP9;
codeName = "VP9";
} else if (codec.toLowerCase() == 'h264') {
payload = 96;
payload = 102;
codeName = "H264";
} else {
return desc;
Expand All @@ -323,7 +341,7 @@ class Client extends EventEmitter {
fmtp.add({
"payload": payload,
"config":
"level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f"
"level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f"
});
}

Expand Down Expand Up @@ -467,9 +485,10 @@ class Client extends EventEmitter {
var rid = data['rid'];
var mid = data['mid'];
var info = data['info'];
var tracks = data['tracks'];
logger.debug(
'stream-add peer rid => $mid, uid => $mid, info => ${info.toString()}');
this.emit('stream-add', rid, mid, info);
'stream-add peer rid => $rid, mid => $mid, info => ${info.toString()}, tracks => $tracks');
this.emit('stream-add', rid, mid, info, tracks);
break;
}
case 'stream-remove':
Expand Down

0 comments on commit 7da9d01

Please sign in to comment.