视频大小流
功能介绍
当用户 A 开启大流时,会发送多个不同分辨率的视频码流到服务端;此时,不同的用户需要订阅 A 的视频流时可以根据自己的需要或者服务端的策略来订阅到不同质量的视频流。
开启大小流
在实例化全局房间 Session 对象时,会传入一个配置对象 QNRTCConfig,该对象中可以传入布尔值元素 simulcast
来配置开启大小流。
const myRoom = new QNRTC.TrackModeSession({ simulcast: true });
开启大小流功能后,发送端在 Track
对象的 getStats()
方法中可以获取大小流的统计信息。
订阅大小流
订阅时指定特定流
在订阅某个 Track 之前,订阅方可以通过 Track
对象的 TrackInfo
对象信息来查看要订阅的 Track 是否支持大小流。
TrackInfo
对象新增了一个元素 profiles
元素用来表示该 Track 是否支持大小流。
profiles
元素值的格式如下:
profiles?: Profile[];
export type Profile = 'high' | 'medium' | 'low';
目前情况下,如果该 Track 支持大小流,则 profiles
为 ['high', 'medium', 'low']
,对应于从高到低的视频质量。如果不支持,则值为 []
。
在查看该元素值,确认该 Track 支持大小流之后,就在全局房间对象的 subscribe
方法中指定要订阅的 profile
。
// 房间当前的 TrackInfo 列表
const currentTrackInfoList = myRoom.trackInfoList;
// 找到的第一个 video Track
const firstVideoTrackInfo = currentTrackInfoList.find(trackInfo => trackInfo.kind === "video");
// 查看是否支持大小流
console.log(firstVideoTrackInfo.profiles);
// 如果支持 high 则订阅 high
if (firstVideoTrackInfo.profiles.includes("high")) {
await myRoom.subscribe([firstVideoTrackInfo.trackId], false, { firstVideoTrackInfo.trackId: "high" });
} else {
await myRoom.subscribe([firstVideoTrackInfo.trackId]);
}
订阅后切换特定流
当订阅了某个 Track 之后,可以调用全局房间对象的 setProfile
来切换某个 Track 的 Profile
。
public setProfile(trackId: string, profile: Profile): void
如果切换成功,则可以通过监听回调拿到通知。
myRoom.on("on-sub-profile-changed", data => {
console.log(data);
});
/* 一个样例返回值:
{"trackid":"x9DG2Hvx3dyWLN9e","profile":"low"}
*/
注意事项
- 开启大小流功能设置编码宽高最低为 1280 x 720
- 目前仅支持在发送端发布单路视频 track 的场景下,使用大小流功能
- 对于开启大小流的用户,建议保证有良好的网络环境,保证多流发送质量