Skip to content

Latest commit

 

History

History
242 lines (178 loc) · 12.1 KB

Android 接入指南.md

File metadata and controls

242 lines (178 loc) · 12.1 KB

1 快速开始

1.1 SDK授权申请

1.1.1 授权所需信息

请联系您的腾讯云商务开通服务。您需要提供将要集成SDK的App的这些信息:腾讯云账号APPID、App签名证书信息(签名证书的序列号、发布者、所有者)、App包名。

APPID可以在您的腾讯云【账号中心】->【账号信息】->【基本信息】中查看。 App签名证书信息可以使用keytool命令查看,例如 keytool -list -v -keystore test.keystore

cert.png

除此之外,您还需要告知接入的SDK版本。SDK版本分为标准版与专业版:

  • 标准版:提供标准版超分辨率功能,实现快速的超分辨率处理速度,适用于高实时性要求的场景。在这种模式下,可以实现显著的图像质量改善。
  • 专业版:提供的功能包括标准版超分辨率、专业版超分辨率、专业版图像增强。专业版超分辨率和图像增强适用于高质量要求的场景,但对设备性能有一定要求,建议在中高端智能手机上使用。

提供的信息

信息
APPID 12345678
包名 com.tencent.mps.srplayer
序列号 17ccecf2
所有者 test
发布者 test
SDK版本 标准版/专业版

授权方案分为授权申请和授权验证两个过程,其中授权申请在授权有效期内,只会进行一次。授权服务开通后,您可以在初始化TSRSDK时使用在线方式进行鉴权,APP需要有访问网络权限。授权服务具有有效期限,当授权过期失效后需要重新获取授权。

1.1.2 开通MPS控制台

为了服务能够正常授权,您还需要在腾讯云官网开通【媒体处理(MPS)控制台】。开通链接:https://console.cloud.tencent.com/mps

1.2 Demo工程编译运行

下载Demo工程的源码

将前面“SDK授权申请”步骤获取的SDK和授权文件,配置到Demo工程中。操作如下:

  1. 将SDK放在工程的./SRPlayer/app/libs文件夹下。

  2. 在MainActivity.java下配置初始化参数,在校验初始化需要腾讯云APPID。

    verification-params.png

  3. 对APK进行签名

  • 在Android Studio中,找到【File】-> 【Project Structure】 -> 【Modules】-> 【Signing Configs】中配置您的签名证书。
  • 或者您可以在【Build】-> 【Generate Signed Bundle / APK】使用证书生成签名的APK
  • 无论您使用哪种方式,请确保配置的签名证书与提供给我们的信息一致。
  1. 运行demo

1.3 Demo App体验

以下是Demo工程编译好的App安装包,可以直接进行下载安装体验。

2 SDK 接入指南

2.1 App工程添加权限

 <uses-permission android:name="android.permission.INTERNET"/>

 //如果 Android targetSdkVersion 大于等于 31,需要添加以下标签,否则专业版功能无法使用
 <application>
 <uses-native-library android:name="libOpenCL.so" android:required="false"/>
 </application>

2.2 程序流程

2.2.1 TSRSdk

TSRSdk包括init和deInit两个方法。init方法用于初始化SDK,deInit方法用于释放资源。

  1. 在线鉴权初始化TSRSdk,您需要传入APPID和AUTH_ID进行在线鉴权,还需要传入TSRSdk.TSRSdkLicenseVerifyResultCallback用于获取在线鉴权的结果。除此之外,还需要传入一个TSRLogger,用于获取SDK的日志。下面是示例代码:
    TSRSdkLicenseVerifyResultCallback callback = new TSRSdkLicenseVerifyResultCallback() {
    public void onTSRSdkLicenseVerifyResult(TSRSdkLicenseStatus status) {
        if (status == TSRSdkLicenseStatus.AVAILABLE) {
           // Creating TSRPass for super-resolution rendering
        } else {
           // Do something when the verification of sdk's license failed.
        }
    }
  };
  TSRSdk.getInstance().init(appId, authId, callback, logger);
  1. 当您已经不需要使用TSRSdk时,需要调用TSRSdk的deInit方法,释放资源。注意:在调用TSRSdk的deInit方法前,确保所有TSRPass已经释放资源,否则会有意想不到的问题。
  // If you have created TSRPass, you should release it before release TSRSdk.
  tsrPass.deInit();
  // Release resources when the TSRSdk object is no longer needed.
  TSRSdk.getInstance().deInit();

2.2.2 TSRPass

TSRPass 是用于进行超分辨率渲染的类,在创建 TSRPass 时,您需要传入 TSRAlgorithmType 设置超分的算法类型。

注意:TSRPass 不是线程安全的,必须在同一个线程中调用 TSRPass 的方法。

在 TSRAlgorithmType 枚举中,有 STANDARD、PROFESSIONAL_HIGH_QUALITY 和 PROFESSIONAL_FAST 三个算法运行模式:

  1. STANDARD(标准)模式:提供快速的超分辨率处理速度,适用于高实时性要求的场景。在这种模式下,可以实现显著的图像质量改善。
  2. PROFESSIONAL_HIGH_QUALITY(专业版-高质量)模式:确保了高图像质量,同时需要更高的设备性能。它适合于有高图像质量要求的场景,并推荐在中高端智能手机上使用。
  3. PROFESSIONAL_FAST(专业版-快速)模式:在牺牲一些图像质量的同时,确保了更快的处理速度。它适合于有高实时性要求的场景,并推荐在中档智能手机上使用。

它包括了 init, reInit, renderdeInit 方法。在使用 TSRPass 前,您需要调用 init 方法进行初始化。如果需要在不创建新的 TSRPass 实例的情况下更新输入图像的尺寸或缩放比例,可以使用 reInit 方法。在使用结束后,您需要调用 deInit 方法释放资源。

以下是标准版超分代码示例:

// Create a TSRPass object using the constructor.
TSRPass tsrPass = new TSRPass(TSRPass.TSRAlgorithmType.STANDARD);

// The code below must be executed in the same glThread.
//----------------------GL Thread---------------------//

// Initialize TSRPass and set the input image width, height, and srRatio.
TSRPass.TSRInitStatusCode initStatus = tsrPass.init(inputWidth, inputHeight, srRatio);

if (initStatus == TSRPass.TSRInitStatusCode.SUCCESS) {
   // Optional: Set the brightness, saturation, contrast and sharpness levels.
   tsrPass.setParameters(52, 55, 60, 0);

   // Perform super-resolution rendering and get the enhanced texture ID.
   int outputTextureId = tsrPass.render(inputTextureId);

   // Reinitialize if there are changes in image dimensions or srRatio.
   TSRPass.TSRInitStatusCode reInitStatus = tsrPass.reInit(newInputWidth, newInputHeight, newSrRatio);
   if (reInitStatus == TSRPass.TSRInitStatusCode.SUCCESS) {
      outputTextureId = tsrPass.render(inputTextureId);
   } else {
      // Handle reinitialization failure
   }

   // Release resources when no longer needed.
   tsrPass.deInit();
} else {
   // Handle initialization failure
}

//----------------------GL Thread---------------------//

以下是专业版超分代码示例:

// Create a TSRPass object with the desired algorithm type.
TSRPass tsrPass = new TSRPass(TSRPass.TSRAlgorithmType.PROFESSIONAL_HIGH_QUALITY);

// Before initializing the TSRPass, configure the maximum input resolution for super-resolution processing.
// This configuration step is crucial as it helps to allocate memory and optimize performance.
// Here, we set the maximum resolution to 1920x1920 pixels.
TSRPass.TSRInitStatusCode configStatus = tsrPass.configureProSRMaxInputResolution(1920, 1920);

// The code below must be executed in the same glThread.
//----------------------GL Thread---------------------//

// Initialize TSRPass with the specified parameters.
TSRPass.TSRInitStatusCode initStatus = tsrPass.init(inputWidth, inputHeight, srRatio);

if (initStatus == TSRPass.TSRInitStatusCode.SUCCESS) {
   // Perform super-resolution rendering and get the enhanced texture ID.
   int outputTextureId = tsrPass.render(inputTextureId);

   // Reinitialize if there are changes in image dimensions or srRatio.
   TSRPass.TSRInitStatusCode reInitStatus = tsrPass.reInit(newInputWidth, newInputHeight, newSrRatio);
   if (reInitStatus == TSRPass.TSRInitStatusCode.SUCCESS) {
      outputTextureId = tsrPass.render(inputTextureId);
   } else {
      // Handle reinitialization failure
   }

   // Release resources when no longer needed.
   tsrPass.deInit();
} else {
   // Handle initialization failure
}

//----------------------GL Thread---------------------//

2.2.3 TIEPass

TIEPass 是用于进行图像增强渲染的类,只在专业版SDK可用。在创建 TIEPass 时,您需要传入 TIEAlgorithmType 设置图像增强的算法类型。它包括 init, reInit, renderdeInit 方法。在使用 TIEPass 前,您需要调用 init 方法进行初始化。如果需要在不创建新的 TIEPass 实例的情况下更新输入图像的尺寸,可以使用 reInit 方法。在使用结束后,您需要调用 deInit 方法释放资源。

在 TIEAlgorithmType 枚举中,有以下两个算法运行模式:

  1. PROFESSIONAL_HIGH_QUALITY(专业版-高质量)模式:确保了高图像质量,同时需要更高的设备性能。它适合于有高图像质量要求的场景,并推荐在中高端智能手机上使用。
  2. PROFESSIONAL_FAST(专业版-快速)模式:在牺牲一些图像质量的同时,确保了更快的处理速度。它适合于有高实时性要求的场景,并推荐在中档智能手机上使用。

注意:TIEPass 不是线程安全的,必须在同一个线程中调用 TIEPass 的方法。

以下是代码示例:

// Create a TIEPass object using the constructor.
TIEPass tiePass = new TIEPass(TIEPass.TIEAlgorithmType.PROFESSIONAL_HIGH_QUALITY);

// Alternatively, create a TIEPass object with the professional fast rendering type.
// TIEPass tiePass = new TIEPass(TIEPass.TIEAlgorithmType.PROFESSIONAL_FAST);

// Before initializing the TIEPass, configure the maximum input resolution for super-resolution processing.
// This configuration step is crucial as it helps to allocate memory and optimize performance.
// Here, we set the maximum resolution to 1920x1920 pixels.
TIEInitStatusCode configStatus = tiePass.configureProIEMaxInputResolution(1920, 1920);


// The code below must be executed in the same glThread.
//----------------------GL Thread---------------------//

// Initialize TIEPass and set the input image width and height.
TIEPass.TIEInitStatusCode initStatus = tiePass.init(inputWidth, inputHeight);

if (initStatus == TIEPass.TIEInitStatusCode.SUCCESS) {
   // If the type of inputTexture is TextureOES, you must transform it to Texture2D.
   // Conversion code can be written according to actual requirements.
   
   // Perform image enhancement rendering on the input OpenGL texture and get the enhanced texture ID.
   int outputTextureId = tiePass.render(inputTextureId);
   
   // Reinitialize with new dimensions if needed.
   TIEPass.TIEInitStatusCode reInitStatus = tiePass.reInit(newInputWidth, newInputHeight);
   if (reInitStatus == TSRPass.TSRInitStatusCode.SUCCESS) {
      outputTextureId = tiePass.render(inputTextureId);
   } else {
      // Handle reinitialization failure
   }

   // Release resources when the TIEPass object is no longer needed.
   tiePass.deInit();
} else {
   // Handle initialization failure
}

//----------------------GL Thread---------------------//

2.2.4 TSRLogger

TSRLogger用于接收SDK内部的日志,请将这些日志写到文件,以便定位外网问题。

3 SDK API描述

您可以点击连接查看TSRSDK的API文档,内含接口注释与调用示例。

TSRSDK ANDROID API文档