超分辨率(简称超分)功能可以在拉流端,对拉取到的视频流画面的宽和高的像素进行倍增。例如:拉流端拉取到的原始画面分辨率为 640p x 360p,对画面进行超分处理后分辨率将提升为 1280p x 720p。
超分前 | 超分后 |
---|---|
超分前 | 超分后 |
---|---|
由于同一台设备同时只能对 1 条流开启超分功能,因此超分功能仅适用于在只有单流或者有 1 路焦点流的场景。
请参考 下载示例源码 获取源码。
相关源码请查看 “/ZegoExpressExample/Others/SuperResolution” 目录下的文件。
开启超分功能会额外消耗系统资源,为了保证用户体验,目前仅支持对一路拉流画面开启超分,且该条流的原始分辨率不建议超过 640p × 360p。
在使用超分功能之前,请确保:
初始化和登录房间的具体流程,请参考实现视频通话文档中的 “3.1 创建引擎”及“3.2 登录房间”。
开启超分功能后,可通过 onPlayerVideoSuperResolutionUpdate 确认超分功能是否成功开启。
超分功能状态定义如下:
枚举值 | 说明 |
---|---|
ZegoSuperResolutionStateOff | 超分功能关闭。 |
ZegoSuperResolutionStateOn | 超分功能开启。 |
通过 onPlayerVideoSizeChanged 可获取超分功能开启后的拉流视频分辨率。
// 拉流视频分辨率发生变化的通知
-(void)onPlayerVideoSizeChanged:(CGSize)size streamID:(NSString *)streamID {
}
// 超分状态发生变化的通知
-(void)onPlayerVideoSuperResolutionUpdate:(NSString *)streamID state:(ZegoSuperResolutionState)state errorCode:(int)errorCode {
NSString *state_str;
if(state == ZegoSuperResolutionStateOn)
{
// 超分已开启
}
else
{
// 超分已关闭
if(errorCode == 0){
// 正常关闭
}
else if(errorCode == 1004004){
// 该设备不支持超分
}
else if(errorCode == 1004005){
// 超分流数量超过限制,仅支持一条流超分
}
else if(errorCode == 1004006){
// 超分原始分辨率超过限制
}
else if(errorCode == 1004007){
// 超分设备性能不足
}
else if(errorCode == 1004008){
// 超分未初始化,请先初始化超分
}
}
}
在使用视频超分功能前,需要调用 initVideoSuperResolution 接口初始化视频超分。
初始化超分为耗时操作,在 SDK 生命周期执行一次即可,不建议频繁初始化、反初始化视频超分。
[[ZegoExpressEngine sharedEngine]initVideoSuperResolution];
开发者可以选择在拉流前或者拉流中开启视频超分功能,以在拉流前对流 “STREAM_ID” 开启超分功能为例:
[[ZegoExpressEngine sharedEngine]enableVideoSuperResolution:@"STREAM_ID" enable:YES];
开启超分功能后,需要监听回调 onPlayerVideoSuperResolutionUpdate ,以确认此次超分功能是否开启成功。
为了便于管理超分状态,建议在收到超分状态回调后,再开启下一次超分功能。
调用 startPlayingStream,传入 “STREAM_ID” 拉取远端用户的音视频流。
ZegoCanvas *playCanvas = [ZegoCanvas canvasWithView:playView];
[[ZegoExpressEngine sharedEngine]startPlayingStream:@"STREAM_ID" canvas:playCanvas];
当不需要超分功能或者开启超分功能过程中发生错误(性能不足或原始视频分辨率超过限制)时,可关闭超分功能以释放系统资源。
[[ZegoExpressEngine sharedEngine]enableVideoSuperResolution:@"STREAM_ID" enable:NO];
停止拉流后,SDK 会自动关闭超分功能并释放占用的系统资源。
[[ZegoExpressEngine sharedEngine]stopPlayingStream:@"STREAM_ID"];
当不需要视频超分功能时,可以调用 uninitVideoSuperResolution 接口反初始化视频超分,以节省内存。
[[ZegoExpressEngine sharedEngine]uninitVideoSuperResolution];
联系我们
文档反馈