视频大小流
功能介绍
当用户 A 开启大流时,会发送多个不同分辨率的视频码流到服务端。此时,不同的用户需要订阅 A 的视频流时,可以根据自己的需要或者服务端的策略来订阅到不同质量的视频流。
开启大小流
通过对视频 Track QNTrackInfo
的属性 multiStreamEnable
配置来开启/关闭视频的大小流功能。
开启大小流功能后,发送端可通过以下统计信息回调来获取发送的情况。
/*!
* @abstract 统计信息回调。
*
* @discussion 回调的时间间隔由 statisticInterval 参数决定,statisticInterval 默认为 0,即不回调统计信息。
*
* @see statisticInterval
*
* @since v2.0.0
*/
- (void)RTCEngine:(QNRTCEngine *)engine
didGetStatistic:(NSDictionary *)statistic
ofTrackId:(NSString *)trackId
userId:(NSString *)userId;
订阅大小流
当远端有用户发布视频大小流时,本地可通过以下回调中 tracks
的数组元素 QNTrackInfo
下的 subConfigurations
来获取大小流的信息。
/*!
* @abstract 远端用户发布音/视频的回调。
*
* @since v2.0.0
*/
- (void)RTCEngine:(QNRTCEngine *)engine didPublishTracks:(NSArray<QNTrackInfo *> *)tracks ofRemoteUserId:(NSString *)userId;
订阅指定的流
获取到大小流的信息后,通过调用如下代码来订阅视频 Track 指定的流。
for (QNTrackInfo *trackInfo in tracks) {
if (trackInfo.kind == QNTrackKindVideo) {
[tracksArray addObject:trackInfo];
NSArray *subConfigurations = trackInfo.subConfigurations;
if (subConfigurations.count != 0) {
for (QNTrackSubConfiguration *subConfig in subConfigurations) {
if (subConfig.profile == QNTrackSubProfileLow) {
// 指定订阅 QNTrackSubProfileLow
subConfig.chooseSub = YES;
} else{
subConfig.chooseSub = NO;
}
}
}
}
}
[self.engine subscribeTracks:tracks];
将对应指定 profile
在 QNTrackSubConfiguration
下的 chooseSub
配置为 YES,则代码需要订阅该 profile
的流。
切换订阅指定的流
成功订阅相应大小流 Track 后,有其他需求需要切换到另外质量的流时,可通过如下代码进行切换调整。
for (QNTrackInfo *trackInfo in tracksArray) {
if ([trackInfo.trackId isEqualToString:trackId]) {
updateTrack = trackInfo;
if (trackInfo.subConfigurations.count > 0) {
for (QNTrackSubConfiguration *subConfig in trackInfo.subConfigurations) {
// 这里的 subProfile 代表你要订阅的 profile
if (subConfig.profile == subProfile) {
subConfig.chooseSub = YES;
}else {
subConfig.chooseSub = NO;
}
}
}
[self.engine updateSubscribeTracks:@[trackInfo]];
}
}
调用 updateSubscribeTracks
切换订阅 profile
成功后,会触发以下代理回调
/*!
* @abstract 订阅远端用户 profile 发生改变的回调
*
* @since v2.5.0
*/
- (void)RTCEngine:(QNRTCEngine *)engine didSubscribeProfileChanged:(NSArray<QNTrackInfo *> *)tracks ofRemoteUserId:(NSString *)userId;
注意:切换订阅指定流是否成功,以上述回调为准。
注意事项
- 目前视频大小流功能,只支持发送单路视频 Track 的发送端,且固定是 3路流
- iOS 端开启大小流务必不可固定分辨率,即
setMaintainResolutionEnabled
必须为 NO,否则将无法正常开启大小流 - 开启大小流功能时,设置编码宽高最低为 1280 x 720
- 建议在网络环境良好的情况下开启大小流,能保证多流发送的质量