mirror of
https://github.com/livekit/livekit.git
synced 2026-05-14 22:45:20 +00:00
Return default layer for invalid rid + track info combination. (#3778)
This commit is contained in:
@@ -363,7 +363,43 @@ func GetSpatialLayerForRid(rid string, ti *livekit.TrackInfo) int32 {
|
||||
}
|
||||
}
|
||||
|
||||
return InvalidLayerSpatial
|
||||
// SIMULCAST-CODEC-TODO - ideally should return invalid, but there are
|
||||
// VP9 publish using rid = f, if there are only two layers
|
||||
// in TrackInfo, that will be q;h and f will become invalid.
|
||||
//
|
||||
// Actually, there should be no rids for VP9 in SDP and hence
|
||||
// the above check should take effect. However, as simulcast
|
||||
// codec does not update SDP, the default rids are use when
|
||||
// vp9 (primary codec) is published and that bypasses the above
|
||||
// check.
|
||||
//
|
||||
// The full proper sequence would be
|
||||
// 1. For primary codec using SVC, there will be no rids.
|
||||
// The above check should take effect and it should
|
||||
// return 0 even if some publisher uses a rid like `f`.
|
||||
// 2. When secondary codec is published, update rids in the
|
||||
// codec section in `TrackInfo`. This is a bit tricky
|
||||
// for a couple of cases
|
||||
// a. Browsers like Firefox use a different CID everytime.
|
||||
// So, it cannot be matched between `AddTrack` and SDP.
|
||||
// One option is to look for a published track with
|
||||
// back up codec and apply it there. But, that becomes
|
||||
// a challenge if there are multiple published tracks
|
||||
// with pending back up codec.
|
||||
// b. The back up codec publish SDP will have the full
|
||||
// codec list. It should be okay to assume that the
|
||||
// codec that will be published is the back up codec,
|
||||
// but just something to be aware of..
|
||||
// 3. Use this function with proper mime so that proper
|
||||
// codec section can be looked up in `TrackInfo`.
|
||||
// return InvalidLayerSpatial
|
||||
logger.Infow(
|
||||
"invalid layer for rid, returning default",
|
||||
"trackID", ti.Sid,
|
||||
"rid", rid,
|
||||
"trackInfo", logger.Proto(ti),
|
||||
)
|
||||
return 0
|
||||
}
|
||||
|
||||
func GetSpatialLayerForVideoQuality(quality livekit.VideoQuality, ti *livekit.TrackInfo) int32 {
|
||||
|
||||
@@ -460,9 +460,13 @@ func TestGetSpatialLayerForRid(t *testing.T) {
|
||||
"no layers",
|
||||
&livekit.TrackInfo{},
|
||||
map[string]int32{
|
||||
QuarterResolution: InvalidLayerSpatial,
|
||||
HalfResolution: InvalidLayerSpatial,
|
||||
FullResolution: InvalidLayerSpatial,
|
||||
// SIMULCAST-CODEC-TODO
|
||||
// QuarterResolution: InvalidLayerSpatial,
|
||||
// HalfResolution: InvalidLayerSpatial,
|
||||
// FullResolution: InvalidLayerSpatial,
|
||||
QuarterResolution: 0,
|
||||
HalfResolution: 0,
|
||||
FullResolution: 0,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -496,7 +500,9 @@ func TestGetSpatialLayerForRid(t *testing.T) {
|
||||
map[string]int32{
|
||||
QuarterResolution: 0,
|
||||
HalfResolution: 1,
|
||||
FullResolution: InvalidLayerSpatial,
|
||||
// SIMULCAST-CODEC-TODO
|
||||
// FullResolution: InvalidLayerSpatial,
|
||||
FullResolution: 0,
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user