共计 2964 个字符,预计需要花费 8 分钟才能阅读完成。
作为多媒体利用的开发者,你是否想为媒体播放器疾速开发翻新 AI 性能?例如:
- 在播放低画质视频过程中对其进行逐帧超分
- 让满屏飘飞的弹幕主动绕过画面的主体人物
HMS Core 6.0.0 凋谢的多媒体管线服务(AV Pipeline Kit),帮忙媒体利用开发者升高翻新性能的开发难度。通过定义插件的标准接口和数据流在插件之间的流转形式,开发者只须要依照标准接口实现插件开发,就能够迅速构建出新型的媒体场景。
多媒体管线服务(AV Pipeline Kit)定义了一套插件标准接口,且曾经内置了对插件的数据流治理、线程治理、内存治理、音讯治理等,开发者只须要实现插件的外围解决逻辑即可,无需关注线程同异步、流控、音视频同步等逻辑。目前已预置了 3 个可利用在播放场景的 Pipeline:视频播放、视频超分、声音事件检测,并提供 Java 接口供开发者应用,同时也反对开发者通过 C ++ 接口间接调用单个预置插件。若预置插件或预置 Pipeline 不满足应用要求,开发者能够自定义插件、自定义 Pipeline。
技术计划
视频超分
上面咱们详细描述内置的高性能视频超分插件,穿插在视频流的解码和显示流程之间,将低分辨率视频实时转换成高分辨率视频,改善视频清晰度,减少视频细节表现力,晋升用户观看体验。
开发筹备
1. 新建 Android Studio 工程,批改工程级 build.gradle 文件如下
在“allprojects > repositories”外面减少 Maven 仓地址。
allprojects {
repositories {google()
jcenter()
maven {url 'https://developer.huawei.com/repo/'}
}
}
2. 批改我的项目级 build.gradle 文件如下
targetSdkVersion 设为 28;并在 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'
}
3. 配置 manifest
批改 AndroidManifest.xml 文件,增加读取内部存储的权限。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
4. 同步工程
点击工具栏中的 gradle 同步图标,实现“build.gradle”文件的同步,将相干依赖下载到本地。
开发步骤
具体示例代码请参见 GitHub
1. 动静申请存储权限
String[] permissionLists = {Manifest.permission.READ_EXTERNAL_STORAGE};
int requestPermissionCode = 1;
for (String permission : permissionLists) {if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this, permissionLists, requestPermissionCode);
}
}
2. 初始化 AV Pipeline 框架
Context context = getApplicationContext();
boolean ret = AVPLoader.initFwk(context);
if(!ret) return;
3. 创立 MediaPlayer 实例
播放过程的管制由该实例来实现。
MediaPlayer mPlayer = MediaPlayer.create(MediaPlayer.PLAYER_TYPE_AV);
if (mPlayer == null) return;
4. 设置 graph 配置文件
AV Pipeline 框架依赖于该配置文件来编排各个插件。此外还须要将 MEDIA\_ENABLE\_CV 的值设置为 1,使能视频超分插件。
MediaMeta meta = new MediaMeta();
meta.setString(MediaMeta.MEDIA_GRAPH_PATH, getExternalFilesDir(null).getPath() + "/PlayerGraphCV.xml");
meta.setInt32(MediaMeta.MEDIA_ENABLE_CV, 1);
mPlayer.setParameter(meta);
5. 设置以下参数后调用 prepare 接口,启动 MediaPlayer 筹备工作。
若须要监听某些事件,通过 setOnPreparedListener、setOnErrorListener 等接口设置回调函数。(可选)
// 设置视频渲染的 surface
SurfaceView mSurfaceVideo = findViewById(R.id.surfaceViewup);
SurfaceHolder mVideoHolder = mSurfaceVideo.getHolder();
mVideoHolder.addCallback(new SurfaceHolder.Callback() {// 用户自定义回调函数内容,可参考 codelab_视频播放});
mPlayer.setVideoDisplay(mVideoHolder.getSurface());
// 设置待播放媒体文件的门路
mPlayer.setDataSource(mFilePath);
// 若须要监听某些事件,则还须要通过 setXXXListener 接口设置回调函数
// 例如须要监听 prepare 实现的事件,需进行如下设置
mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp, int param1, int param2, MediaParcel parcel) {// 用户自定义回调函数内容}
});
mPlayer.prepare();
6. 调用 start 开始播放
mPlayer.start();
7. 调用 stop 进行播放
mPlayer.stop();
8. 销毁播放器
mPlayer.reset();
mPlayer.release();
9. 其余注意事项
视频超分插件的束缚详见文档
拜访华为多媒体管线服务官网,理解更多相干内容
获取华为多媒体管线服务开发领导文档
华为多媒体管线服务开源仓库地址 :GitHub、Gitee
华为 HMS Core 官方论坛
解决集成问题请到Stack Overflow
点击右上角头像右方的关注,第一工夫理解 HMS Core 最新技术~