媒体应用视频超分AI神器!360P视频一键转换HD
作为多媒体应用的开发者,你是否想为媒体播放器快速开发创新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最新技术~
媒体应用视频超分AI神器!360P视频一键转换HD的更多相关文章
- 超强视频超分AI算法,从此只看高清视频
最近发现一个特别强的视频超分算法----BasicVSR,在真实世界数据集中,实现了前所未有的视觉重建效果,最近它还拿下了超分比赛NTIRE 2021三冠一亚的优异成绩,登上了CVPR 2022. 视 ...
- 2018亚太CDN峰会开幕, 阿里云王海华解读云+端+AI的短视频最佳实践
4月11-12日,2018亚太CDN峰会在北京隆重召开,在11日下午的短视频论坛中,阿里云高级技术专家王海华进行了<短视频最佳实践:云+端+AI>的主题演讲,分享了短视频的生命周期关键点和 ...
- android实现超酷的腾讯视频首页和垂直水平网格瀑布流一揽子效果
代码地址如下:http://www.demodashi.com/demo/13381.html 先来一波demo截图 实现ListView.GridView.瀑布流 1.导入RecyclerView的 ...
- 视频云肖长杰:视频AI科技助力短视频生态
人工智能技术是当今炙手可热的技术领域,它在制造.家居.零售.交通.安防等行业的应用已经是大势所趋.在本月云栖Techday音视频技术沙龙中,阿里云视频云产品专家肖长杰为我们分享了一些AI技术在视频中应 ...
- 面向视频的全新AI架构 —— 阿里云智能视觉技术全解
我们都知道,AI技术正在以可见的速度被应用于各行各业,然而绝大部分业务场景想应用AI技术,都需要算法工程师根据自身业务的标注数据,来进行单独训练,才能打磨出合适的AI模型.如此一来,如何以最低的门槛和 ...
- Python 带你一键生成朋友圈超火的九宫格短视频
1. 场景 如果你经常刷抖音和微信朋友圈,一定发现了最近九宫格短视频很火! 从朋友圈九宫格图片,到九宫格视频,相比传统的图片视频,前者似乎更有个性和逼格 除了传统的剪辑软件可以实现,是否有其他更加快 ...
- 超简单集成HMS ML Kit文字超分能力,一键提升文本分辨率
前言 大家有没有遇到过这种情况,在浏览微博或者公众号时看到一段有趣的文字,于是截图发到朋友圈想和好友分享.但是在发布图片时,软件会对图片强制进行压缩,导致图片分辨率下降,文字变得模糊难以阅读.那么有没 ...
- ACNet:用于图像超分的非对称卷积网络
编辑:Happy 首发:AIWalker Paper:https://arxiv.org/abs/2103.13634 Code:https://github.com/hellloxiaotian/A ...
- 慢镜头变焦:视频超分辨率:CVPR2020论文解析
慢镜头变焦:视频超分辨率:CVPR2020论文解析 Zooming Slow-Mo: Fast and Accurate One-Stage Space-Time Video Super-Resol ...
随机推荐
- Linux命令大全之关机重启命令
1.shutdown [选项] 时间 -r(reboot)重启 -h(halt)关闭 -c(cancel)取消 注:shutdown -h 时间 &(加个&符号再按回车不影响其它操 ...
- 一个排序引发的BUG
你好呀,我是why. 前两天在 Git 上闲逛的时候又不知不觉逛到 Dubbo 那里去了. 看了一下最近一个月的数据,社区活跃度还是很高的: 然后看了一下最新的 issue,大家提问都很积极. 其中看 ...
- js笔记15
DOM2动态创建节点 1.生成节点的方法 document.createElement("div") 2.插入节点的方法 父元素.appendChild(新节点) 在父节点的子节点 ...
- 痞子衡嵌入式:以i.MXRT1xxx的GPIO模块为例谈谈中断处理函数(IRQHandler)的标准流程
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是以i.MXRT的GPIO模块为例谈谈中断处理函数(IRQHandler)的标准流程. 在痞子衡旧文 <串口(UART)自动波特率识 ...
- 11、gitlab和Jenkins整合(1)
1.在jenkins上安装git: 因为jenkins需要在gitlab上拉取代码: 具体的git安装,参考"4.git和gitlab的配置--4.2.git编译安装:": 2.在 ...
- 『无为则无心』Python序列 — 23、Python序列的公共API
目录 1.运算符 @1.+加号 @2.*乘号 @3.in或not in 2.公共方法 @1.len()方法 @2.del和del() @3.max()方法 @4.min()方法 @5.range() ...
- web自动化之windows页面切换
一.为什么切换windows页面 在页面操作过程中,存在点击某个元素之后会重新打开一个windows页面,如果不切换至新页面的话,无法在新页面中进行操作,程序会出现报错 二.如何切换 1.获取当前所有 ...
- 1.5Java、万维网以及其他
要点提示:Java是一种功能强大和多用途的编程语言,可用于开发运行在移动设备.台式计算机以及服务器端的软件.
- Mysql 主键的操作
主键:primary key ,主要的键.一张表只能有一个字段可以使用对应的键,用来唯一的约束字段里面的数据,数据不能重复,这种键称之为主键,一张表只能最多有一个主键. 一.增加主键 方法一:在 ...
- 64. Minimum Path Sum 动态规划
description: Given a m x n grid filled with non-negative numbers, find a path from top left to botto ...