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的部分支持,如果您需要使用的话)。
同时确保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" }
如下图所示
4. SDK初始化
在您的Application类中添加添加如下代码(记得在AndroidManifest.xml文件中使用该类):
首先import这几个您需要使用到的类。
进行IVManager的初始化,在IVManager类的initWithDevKey中传入您的ApplicationContext,以及官网开发者页面获取的DevKey。同时您需要在您的初始化类中实现IVLoadImageCallback接口,并把当前类的指针作为第三个参数传入initWithDevKey,方便函数进行回调。
实现IVLoadImageCallback接口,需要实现loadModel()方法。在该方法中,进行IVManager类的初始化,在loadIVModel方法中传入您获取的model name即可初始化完成,同一个app只能同时采用同一个model,不建议用户对同一个IVManager类进行两次初始化(关于模型的填写请参考:)。
帝视科技目前有专门为Video提供的模型,ShortVideo,不过截止作者写这篇文档时,还没有作为通用模型公开。您可以发送邮件或者电话联系帝视科技,我们将为您分配所需要的模型。
电话:+86-591-87862050
邮箱:bd@imperial-vision.com
5. SDK进行超分
如果IVManager类您已经初始化完成了,您将可以对您的视频进行超分辨率重建。目前您接触到的Video SDK是定制的特别版,我们不提供视频编解码功能,我们只提供视频超分功能与图像渲染功能。
首先您需要在您的layout xml文件的一个位置定义一个ivimagesr.IVImageView
创建的过程中,它会自动初始化ivvideosr内核,不过计算参数的初始化需要用户手动进行(它需要您已经初始化了ivimagesr.IVImageView实例,同时IVManager.IVImage 也不为空)。
这是我们给出的初始化方法。需要注意的是ivimagesr.IVImageView采用单件模式,目前不支持(我们也不建议)用户超分多个视频。showView是ivimagesr.IVImageView的一个实例。
您需要添加“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。以下是代码截图。
其中的IVPlayerInstance类,不需要您创建,直接获取即可。
playerInstance=IVPlayerLib::getIVPlayer();
添加超分代码: