在自己的工程中使用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 ...
随机推荐
- POJ3258 River Hopscotch —— 二分
题目链接:http://poj.org/problem?id=3258 River Hopscotch Time Limit: 2000MS Memory Limit: 65536K Total ...
- Redis持久化(RDB和AOF)
什么是Redis持久化 什么是Redis持久化,就是将内存数据保存到硬盘. Redis 持久化存储 (AOF 与 RDB 两种模式) RDB持久化 RDB 是以二进制文件,是在某个时间 点将数据写入一 ...
- springboot在eclipse实现热部署
eclipse使用spring-tool-suite插件创建springboot项目,项目创建完成后. 选中项目,右键 Spring Tools --> Add Boot Devtools 点 ...
- Java中的ArrayList
ArrayList是所谓的动态数组.用一个小例子: import java.util.ArrayList; import java.util.Iterator; import java.util.Li ...
- 【旧文章搬运】《从PEB获取内存中模块列表》的补充
原文发表于百度空间,2008-7-26========================================================================== 继续研究PE ...
- MSG结构体
typedef struct tagMSG { // msg HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; PO ...
- ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 11. Views 上
通常会使用外层模板的view,当做公共的模块 通常叫做_Layout.cshtml views下新建Shared文件夹 主要关注RenderBody,这里会具体渲染Action返回的内容View la ...
- NYOJ4——ASCII码排序
ASCII码排序 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述:输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符. 输入:第一行输入一 ...
- bzoj 2064: 分裂【状压dp】
参考:https://www.cnblogs.com/liu-runda/p/6019426.html 有点神奇 大概就是显然最直观的转移是全部合起来再一个一个拆,是n+m次,然后设f[i][j]为分 ...
- 黑客攻防技术宝典web实战篇:攻击会话管理习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 登录一个应用程序后,服务器建立以下 cookie:Set-cookie: sessid=a ...