在自己的工程中使用ijkplayer的功能
最近在做一个软解视频叠加硬解视频的方案,网上看了很多教程,始终不得要领.虽然ijkplayer提供了ijkplayer-example这个示例工程,但对于初入安卓的人来说,要将ijkplayer整合到自己的工程中也是颇为不易的.
这里要感谢giraffeplayer的作者,下面是github地址
https://github.com/tcking/GiraffePlayer
giraffe的作者已经将将example中的几个比较有有用的类给提取出来了,这个时候我们沿着前人的脚步继续走下去就行了,下面将下我的实现步骤:
1.import module
file->new->Import module
将giraffeplayer导入工程,编译出classes.jar (这里主要是要获取ijkplayer的class),也可以下载ijkplayer-android的代码,获取该jar包,路径:ijkplayer-android/android/ijkplayer/ijkplayer-java/build/intermediates/bundles/release/classes.jar
github路径:https://github.com/Bilibili/ijkplayer.git ijkplayer-android
导入的时候需要修改build.gradle,下面是我的build.gradle配置,根据app的build.gradle来配置的
compileSdkVersion 26
buildToolsVersion "26.0.2" defaultConfig {
minSdkVersion 23
targetSdkVersion 26
versionCode 1
versionName "1.0"
}
2.将编译出来的classes.jar放入我们的工程中,修改Android.mk
LOCAL_STATIC_JAVA_LIBRARIES := \
android-common \
android-support-v4 \
android-support-v13 \
glide_mtvplayer \
ijkplayer
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
glide_mtvplayer:lib/glide-3.7.0.jar \
ijkplayer:lib/ijkplayer.jar
我修改了名字,ijkplayer.jar就是我们上面说的classes.jar
3.将需要的功能类放入工程目录,这里我选择了如下的类放入我的工程
IjkVideoView.java IMediaController.java IRenderView.java MeasureHelper.java SurfaceRenderView.java TextureRenderView.java
都是从giraffeplayer中拷贝过来的,修改了IjkVideoView的294行
- ijkMediaPlayer.native_setLogLevel(GiraffePlayerActivity.Config.isDebug()?IjkMediaPlayer.IJK_LOG_DEBUG:IjkMediaPlayer.IJK_LOG_ERROR);
+ ijkMediaPlayer.native_setLogLevel(IjkMediaPlayer.IJK_LOG_DEBUG);
4.将so文件拷贝到/system/lib64/目录下面,使用PRODUCT_COPY_FILES(使用32位系统的需要注意路径是/system/lib)
#ijkplayer libraries
PRODUCT_COPY_FILES += \
$(DEVICE_SOURCES)/libraries/ffmpeg/libijkffmpeg.so:system/lib64/libijkffmpeg.so \
$(DEVICE_SOURCES)/libraries/ffmpeg/libijkplayer.so:system/lib64/libijkplayer.so \
$(DEVICE_SOURCES)/libraries/ffmpeg/libijksdl.so:system/lib64/libijksdl.so
5.在自己的工程中使用ijkplayer
首先,第一步就是xml中的布局,这个很简单,按照如下的方式来加就行了,路径要根据自己的IjkVideoView.java的路径来
<com.mstar.tv.tvplayer.ui.ijkVideo.IjkVideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/> 接下里就是要在代码中使用ijkplayer了,使用之间需要先加载下动态库
IjkMediaPlayer.loadLibrariesOnce(null);
然后获取控件,注册回调事件
videoView = (IjkVideoView)findViewById(R.id.video_view);
videoView.setOnCompletionListener(new IMediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(IMediaPlayer iMediaPlayer) {
/*play complete*/
Log.d(TAG, "video play finished.");
video_Index = (video_Index + 1) % 4;
videoView.setVideoURI(Uri.parse(videoPath[video_Index]));
videoView.start();
}
});
videoView.setOnErrorListener(new IMediaPlayer.OnErrorListener() {
@Override
public boolean onError(IMediaPlayer iMediaPlayer, int errorNo, int extra) {
Log.d(TAG, "ijkMedia: error occur, error no = " + errorNo);
return false;
}
});
设置播放的uri,最后播放
videoView.setVideoURI(Uri.parse(videoPath[video_Index]));
videoView.start();
至此一个最简答的视频播放的ijkplayer功能移植成功,ijkplayer还有很多功能的,有需要的小伙伴可以去研究下ijkplayer给的demo中的ijkplayer-example工程
在自己的工程中使用ijkplayer的功能的更多相关文章
- iOS中集成ijkplayer视频直播框架
ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijk ...
- 清除Android工程中没用到的资源
项目需求一改再改,UI一调再调,结果就是项目中一堆已经用不到但却没有清理的垃圾资源,不说工程大小问题,对新进入项目的人或看其他模块的代码的人来说,这些没清理的资源可能也可能会带来困扰,所以最好还是清理 ...
- unity导出工程导入到iOS原生工程中详细步骤
一直想抽空整理一下unity原生工程导入iOS原生工程中的详细步骤.做iOS+vuforia+unity开发这么长时间了.从最初的小小白到现在的小白.中间趟过了好多的坑.也有一些的小小收货.做一个喜欢 ...
- CEGUI0.8.4引入到自己工程中
首先要确定你的CEGUI已经完全编译好,若未进行这一步请参照http://www.cnblogs.com/wenguang1996/p/5027522.html 打开VS2012新建C++工程,然后添 ...
- 关于在工程中添加新文件时的LNK2019错误的一个解决办法
我这几天一直在研究Qt的串口程序,在读懂了官方给出的实例程序后我决定把其多线程的串口监视程序加入到我自己的工程中,便直接把问价复制到自己的工程下面,在Qt中加入到自己的工程中,但是总是出现LNK201 ...
- 用CMake设置Visual Studio工程中预处理器定义值
构建VS工程时预处理值是不可缺少的,如动态库的导出配置等.在通过CMake构建VS工程时,可以通过CMake命令进行定义,下面讲三种应用. 字符集:默认装填下VS工程是多字节字符集,如果需要使用Uni ...
- iOS开发--Swift 如何完成工程中Swift和OC的混编桥接(Cocoapods同样适用)
由于SDK现在大部分都是OC版本, 所以假如你是一名主要以Swift语言进行开发的开发者, 就要面临如何让OC和Swift兼容在一个工程中, 如果你没有进行过这样的操作, 会感觉异常的茫然, 不用担心 ...
- step6----->往工程中添加spring boot项目------->修改pom.xml使得我的project是基于spring boot的,而非直接基于spring framework
文章内容概述: spring项目组其实有多个projects,如spring IO platform用于管理external dependencies的版本,通过定义BOM(bill of mater ...
- web工程中URL地址的推荐写法
三.web工程中URL地址的推荐写法 使用c标签<c:url value="" /> 会自动添加项目名 -> value中的值 前面要加 “/” 在JavaWeb ...
随机推荐
- eclipse安装lombok和常用注解使用
1.下载lombok.jar lombok 的官方网址:http://projectlombok.org/ 2.运行lombok.jar: java -jar D:\eclipse-luna\l ...
- LoadRunner 技巧之 IP欺骗
IP欺骗也是也loadrunner自带的一个非常有用的功能. 需要使用ip欺骗的原因:1.当某个IP的访问过于频繁,或者访问量过大是,服务器会拒绝访问请求,这时候通过IP欺骗可以增加访问频率和访问量, ...
- .NET 的 WebSocket 开发包比较 【已翻译100%】--网址:http://www.oschina.net/translate/websocket-libraries-comparison-2
编者按 本文出现在第三方产品评论部分中.在这一部分的文章只提供给会员,不允许工具供应商用来以任何方式和形式来促销或宣传产品.请会员报告任何垃圾信息或广告. Web项目常常需要将数据尽可能快地推送给客户 ...
- oracle实例的内存(SGA和PGA)调整,优化数据库性能
一.名词解释 (1)SGA:SystemGlobal Area是OracleInstance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区. (2) ...
- Css之cursor 属性
url 需使用的自定义光标的 URL. 注释:请在此列表的末端始终定义一种普通的光标,以防没有由 URL 定义的可用光标. default 默认光标(通常是一个箭头) auto 默认.浏 ...
- mysql负载均衡方案
mysql负载均衡方案 一.直接连接 数据库的读写分离方案很多,这里介绍基于mysql数据库的读写分离方案. 比较常见的读写分离方案如下: 1 基于查询分离 最简单的分离方法是将读和写分发到主和从服务 ...
- sql 日历
/* Formatted on 2013/9/7 20:45:28 (QP5 v5.185.11230.41888) */ SELECT MIN (DECODE (TO_CHAR (DAYS, 'D' ...
- 卷积神经网络中的Winograd快速卷积算法
目录 写在前面 问题定义 一个例子 F(2, 3) 1D winograd 1D to 2D,F(2, 3) to F(2x2, 3x3) 卷积神经网络中的Winograd 总结 参考 博客:blog ...
- TP5之安全机制
防止sql注入 1.查询条件尽量使用数组方式,具体如下: $wheres = array(); $wheres['account'] = $account; $wheres['password'] = ...
- 解决sqlserver的sql脚本内存不足问题
1.Win+R输出cmd 2.sqlcmd -i E:\Work\xxxxx.sql -d xxxxx(数据库名称) -s 127.0.0.1