端上超分功能接入
更新时间:2024-03-28
接入准备
- 接入端上超分功能,需要使用播放器SDK高级版(也可以单独接入端上超分SDK),并申请高级版License。
- 在frameworks目录下有BDCloudSrKit.framewok和opencv2.framework,将它们导入到你的项目中,并设置到Xcode的Link Binary With Libraries选项中
功能介绍
在高级版SDK中,提供了端上超分能力,利用端侧推理能力,实现对低分辨率画面的清晰度提升、噪声和块效应去除,适用于视频播放场景和RTC通话场景。该能力由BDCloudSrKit和opencv2组件提供,请确保相关组件已集成到你的APP中。
SDK能力如下表所示
能力 | 说明 |
---|---|
支持的超分倍数 | 固定2倍 |
支持的输入分辨率 | 不限制输入分辨率 |
支持的输入-输出格式 | CVPixelBuffer -> CVPixelBuffer,支持YUV420P和NV12像素格式 |
模型策略 | SDK可以根据目标分辨率&帧率和设备性能自动选择合适的模型,保证实时处理帧率。如果设备性能太差或输入分辨率太大,无法达到实时帧率,SDK也可以给出预期的处理帧率,接入方可以自由决定是否应用超分 |
Demo体验
快速开始
- 初始化
BDCloudSrRender *srKit
// 初始化,需要传入您申请的高级版证书LicenseID,ID可以在百度云控制台查看
srKit = [[BDCloudSrRender alloc] initWithLicenseId:LICENSE_ID];
- 设置目标帧率和模型选择策略
[_srKit setTargetFps:fps AndStategy:SrModelStrategy::STRATEGY_SPEED_FIRST];
- 对输入CVPixelBuffer进行处理,处理结果保存到输出CVPixelBuffer中,调用一次,处理一帧
[_srKit processInput:inBuffer ofFormat:SrInputPixelFormat::FMT_NV12 withOutput:outBuffer];
- 释放
// 销毁,如果要重新使用,则需要重新init
[_srKit destroy];
最佳实践
在调用processInput之前,可以依据输入分辨率和帧率获取SDK的预期超分处理帧率,可以根据预期结果,再决定是否应用超分,避免设备性能不足或输入分辨率过高导致的渲染卡顿,示例代码如下
float expectedFps = [_srkit probeExpectedFpsForWidth:frame.width Height:frame.height TargetFps:_srTargetFps];
if (expectedFps > 0 && expectedFps < _srTargetFps) {
return;
} else {
[_srKit processInput:inBuffer ofFormat:SrInputPixelFormat::FMT_NV12 withOutput:outBuffer];
}
接口说明
BDCloudSrRender
通知 | 说明 |
---|---|
BDCloudSREngineInitedNotification | 超分内核初始化完成通知 |
BDCloudSRProcessedFrameUpdateNotification | 超分单帧处理完成通知,包含以下keyBDCloudSRProcessedFrameWidthKey:超分后的宽度BDCloudSRProcessedFrameHeightKey:超分后的高度BDCloudSRProcessedFrameCostTimeKey:单帧处理耗时,单位毫秒 |
接口名 | 说明 |
---|---|
- (instancetype)initWithLicenseId:(NSString*)licenseID | 初始化 licenseID:通过百度智能云控制台申请的licenseID |
- (void)destroy | 销毁 |
- (void)setTargetFps:(float)fps AndStategy:(SrModelStrategy)strategy | 设置目标帧率和模型选择策略,SDK会依据输入分辨率和目标帧率,自动选择最合适的模型。可选的模型策略包括SrModelStrategy::STRATEGY_SPEED_FIRST 速度优先SrModelStrategy::STRATEGY_QUALITY_FIRST 质量优先 |
- (BOOL)processInput:(CVPixelBufferRef)inputBuffer ofFormat:(SrInputPixelFormat)fmt withOutput:(CVPixelBufferRef)outBuffer | 超分处理fmt:输入像素格式,可选值包括SrInputPixelFormat::FMT_NV12,对应kCVPixelFormatType_420YpCbCr8BiPlanarFullRange或kCVPixelFormatType_420YpCbCr8BiPlanarVideoRangeSrInputPixelFormat::FMT_YUV420P,对应kCVPixelFormatType_420YpCbCr8Planar或kCVPixelFormatType_420YpCbCr8PlanarFullRange返回YES代表超分处理成功,返回NO代表超分处理未成功,此时SDK没有向outBuffer写入任何数据。在调用processInput方法后超分内核才会初始化并抛出BDCloudSREngineInitedNotification消息。 |
- (float)probeExpectedFpsForWidth:(int)width Height:(int)height TargetFps:(float)fps Strategy:(SrModelStrategy)strategy; | 获取模型在指定分辨率、目标帧率、模型策略下的预估实际帧率,接入方可以根据预估结果决定是否开启超分。如果在当前设备上超分内核从来没有初始化过(收到BDCloudSREngineInitedNotification通知),那么无法获得全局设备算力情况,返回值为0。 |