SDK集成

1. SDK说明

  • IVVideoSR Android SDK 用于Android设备上对视频进行超分辨率及画质增强处理

  • 本文基于Android Studio 2.3.1

2. 运行环境

  • Android系统要求:需要Android 5.0以上系统版本(API Level 21及以上)

  • 大部分手机都支持我们的算法(不过目前仍然存在部分手机不支持,如华为honor7,对于不支持的手机我们将显示原始视频)

  • 并且需要添加网络访问权限(用于授权和下载模型)

3. SDK引用

  • 在Android Libs中添加ivvideosr.aar,以及需要的ABI库到Libs目录中(核心库包含libIVVideoKernel.so以及libIVImageSR.so,当然我们也提供FFmpeg的部分支持,如果您需要使用的话)。

    image.png

  • 同时确保app内部的build.gradle 已经把libs目录添加到android标签中


sourceSets.main.jniLibs.srcDirs = ['./libs']
  • 添加libs目录到android的配置中

repositories
{
   flatDir{
         dirs 'libs'
       }
 }
  • 添加网络通信库okhttp

compile 'com.squareup.okhttp3:okhttp:3.8.1'
  • 添加了libs/ivvideosr.aar到compile files。

compile(name: 'ivvideosr', ext: 'aar')
  • 添加C++11支持

cmake {
      cppFlags "-std=c++11"
 }
  • 如下图所示

    image.png

4. SDK初始化

  • 在您的Application类中添加添加如下代码(记得在AndroidManifest.xml文件中使用该类):

    image.png

  • 首先import这几个您需要使用到的类。

    image.png

  • 进行IVManager的初始化,在IVManager类的initWithDevKey中传入您的ApplicationContext,以及官网开发者页面获取的DevKey。同时您需要在您的初始化类中实现IVLoadImageCallback接口,并把当前类的指针作为第三个参数传入initWithDevKey,方便函数进行回调。

    image.png

  • 实现IVLoadImageCallback接口,需要实现loadModel()方法。在该方法中,进行IVManager类的初始化,在loadIVModel方法中传入您获取的model name即可初始化完成,同一个app只能同时采用同一个model,不建议用户对同一个IVManager类进行两次初始化(关于模型的填写请参考:)。

    image.png

帝视科技目前有专门为Video提供的模型,ShortVideo,不过截止作者写这篇文档时,还没有作为通用模型公开。您可以发送邮件或者电话联系帝视科技,我们将为您分配所需要的模型。

电话:+86-591-87862050

邮箱:bd@imperial-vision.com

5. SDK进行超分

如果IVManager类您已经初始化完成了,您将可以对您的视频进行超分辨率重建。目前您接触到的Video SDK是定制的特别版,我们不提供视频编解码功能,我们只提供视频超分功能与图像渲染功能。

  • 首先您需要在您的layout xml文件的一个位置定义一个ivimagesr.IVImageView

    image.png

创建的过程中,它会自动初始化ivvideosr内核,不过计算参数的初始化需要用户手动进行(它需要您已经初始化了ivimagesr.IVImageView实例,同时IVManager.IVImage 也不为空)。

这是我们给出的初始化方法。需要注意的是ivimagesr.IVImageView采用单件模式,目前不支持(我们也不建议)用户超分多个视频。showView是ivimagesr.IVImageView的一个实例。

image.png

您需要添加“IVPlayerlib.h”以及“IVTexture.h”到jni层,在CMakeList.txt中把“接下来”需要实现的接口的so文件命名为player-lib(生成的so文件为libplayer-lib.so)

进行超分还需要剩下两个步骤:

1. 获取frameYUV,保存下来,想办法调用java层的以下两个方法,在我们的例子中,我们采用的是:

IVImageView.getIvImageView().renderer.updateVideo(); 

IVImageView.getIvImageView().requestRender();

2. 他们将会回调下面这个函数,所以实现这个函数:

Java_ivimagesr_oo000oo_processVideoCallBack(JNIEnv *env, jclass type)

在我们的例子中,您可以看到,目前我们提供了针对yuv420p图像进行超分的,第一步保存frameYUV,以及调用GLSurfaceViewShowPic(),它将调用GLSurfaceView的线程进行运行Java_ivimagesr_oo000oo_processVideoCallBack。以下是代码截图。

image.png

其中的IVPlayerInstance类,不需要您创建,直接获取即可。

playerInstance=IVPlayerLib::getIVPlayer();

添加超分代码:

image.png