低分辨率刷视频看了个寂寞?华为HMS Core超分辨率功能助您一招提升用户体验

48 阅读1分钟

AV Pipeline框架支持在播放过程中进行视频的逐帧超分。而除视频播放Pipeline的插件外,还包含视频超分插件CVFilter。编排关系如上图所示。

话不多说,我们来实战:


1 开发准备

1.1 新建Android Studio工程,修改工程级build.gradle文件,在“allprojects > repositories”里面增加华为的Maven仓地址。

allprojects {

repositories {

google()

jcenter()

maven {url 'developer.huawei.com/repo/'}

}

}

1.2 打开项目中应用级的“build.gradle”文件。在dependencies中添加编译依赖。

dependencies {

...

implementation 'com.huawei.hms:avpipelinesdk:6.0.0.302'

implementation 'com.huawei.hms:avpipeline-aidl:6.0.0.302'

implementation 'com.huawei.hms:avpipeline-fallback-base:6.0.0.302'

implementation 'com.huawei.hms:avpipeline-fallback-cvfoundry:6.0.0.302'

}

1.3 在完成以上的配置后,点击工具栏中的gradle同步图标,完成“build.gradle”文件的

同步,将相关依赖下载到本地。


2 开发步骤

2.1 动态申请存储权限

private void handlePermission() {

String[] permissionLists = {

Manifest.permission.READ_EXTERNAL_STORAGE,

Manifest.permission.ACCESS_NETWORK_STATE

};

int requestPermissionCode = 1;

for (String permission : permissionLists) {

if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(this, permissionLists, requestPermissionCode);

}

}

}

2.2 初始化AV Pipeline框架。

private void initFwk() {

if (AVPLoader.isInit()) {

Log.d(TAG, "avp framework already inited");

return;

}

boolean ret = AVPLoader.initFwk(getApplicationContext());

if (ret) {

makeToastAndRecordLog(Log.INFO, "avp framework load succ");

} else {

makeToastAndRecordLog(Log.ERROR, "avp framework load failed");

}

}

2.3 创建MediaPlayer实例。播放过程的控制由该实例来完成。

//创建MediaPlayer实例

mPlayer = MediaPlayer.create(MediaPlayer.PLAYER_TYPE_AV);

2.4 设置graph配置文件。AV Pipeline框架依赖于该配置文件来编排各个插件。此外还需要将MEDIA_ENABLE_CV的值设置为1,激活视频超分插件。

protected void setGraph() {

String path = getExternalFilesDir(null).getPath() + "/PlayerGraphCV.xml";

MediaMeta meta = new MediaMeta();

meta.setString(MediaMeta.MEDIA_GRAPH_PATH, path);

meta.setInt32(MediaMeta.MEDIA_ENABLE_CV, 1);

mPlayer.setParameter(meta);

}

2.5 以下为视频超分Pipeline的graph配置文件PlayerGraphCV.xml。

2.6 设置以下参数后调用prepare接口,启动MediaPlayer准备工作。

//创建MediaPlayer实例

mPlayer = MediaPlayer.create(MediaPlayer.PLAYER_TYPE_AV);

if (mPlayer == null) {

return;

}

//设置graph配置文件

setGraph();

if (getPlayerType() == MediaPlayer.PLAYER_TYPE_AV) {

// 设置视频渲染的surface

SurfaceView mSurfaceVideo = findViewById(R.id.surfaceViewup);

SurfaceHolder mVideoHolder = mSurfaceVideo.getHolder();

int ret = mPlayer.setVideoDisplay(mVideoHolder.getSurface());

if (ret != 0) {

makeToastAndRecordLog(Log.ERROR, "setVideoDisplay failed, ret=" + ret);

return;

}

}

// 设置待播放媒体文件的路径

int ret = mPlayer.setDataSource(mFilePath);

if (ret != 0) {

makeToastAndRecordLog(Log.ERROR, "setDataSource failed, ret=" + ret);