最近在做一个软解视频叠加硬解视频的方案,网上看了很多教程,始终不得要领.虽然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的功能的更多相关文章

  1. iOS中集成ijkplayer视频直播框架

    ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijk ...

  2. 清除Android工程中没用到的资源

    项目需求一改再改,UI一调再调,结果就是项目中一堆已经用不到但却没有清理的垃圾资源,不说工程大小问题,对新进入项目的人或看其他模块的代码的人来说,这些没清理的资源可能也可能会带来困扰,所以最好还是清理 ...

  3. unity导出工程导入到iOS原生工程中详细步骤

    一直想抽空整理一下unity原生工程导入iOS原生工程中的详细步骤.做iOS+vuforia+unity开发这么长时间了.从最初的小小白到现在的小白.中间趟过了好多的坑.也有一些的小小收货.做一个喜欢 ...

  4. CEGUI0.8.4引入到自己工程中

    首先要确定你的CEGUI已经完全编译好,若未进行这一步请参照http://www.cnblogs.com/wenguang1996/p/5027522.html 打开VS2012新建C++工程,然后添 ...

  5. 关于在工程中添加新文件时的LNK2019错误的一个解决办法

    我这几天一直在研究Qt的串口程序,在读懂了官方给出的实例程序后我决定把其多线程的串口监视程序加入到我自己的工程中,便直接把问价复制到自己的工程下面,在Qt中加入到自己的工程中,但是总是出现LNK201 ...

  6. 用CMake设置Visual Studio工程中预处理器定义值

    构建VS工程时预处理值是不可缺少的,如动态库的导出配置等.在通过CMake构建VS工程时,可以通过CMake命令进行定义,下面讲三种应用. 字符集:默认装填下VS工程是多字节字符集,如果需要使用Uni ...

  7. iOS开发--Swift 如何完成工程中Swift和OC的混编桥接(Cocoapods同样适用)

    由于SDK现在大部分都是OC版本, 所以假如你是一名主要以Swift语言进行开发的开发者, 就要面临如何让OC和Swift兼容在一个工程中, 如果你没有进行过这样的操作, 会感觉异常的茫然, 不用担心 ...

  8. step6----->往工程中添加spring boot项目------->修改pom.xml使得我的project是基于spring boot的,而非直接基于spring framework

    文章内容概述: spring项目组其实有多个projects,如spring IO platform用于管理external dependencies的版本,通过定义BOM(bill of mater ...

  9. web工程中URL地址的推荐写法

    三.web工程中URL地址的推荐写法 使用c标签<c:url value="" /> 会自动添加项目名 -> value中的值 前面要加 “/” 在JavaWeb ...

随机推荐

  1. 在U-Boot中添加自定义命令以实现自动下载程序【转】

    本文转载自:https://gaomf.cn/2016/06/26/%E5%9C%A8U-Boot%E4%B8%AD%E6%B7%BB%E5%8A%A0%E8%87%AA%E5%AE%9A%E4%B9 ...

  2. 解决virtualbox安装增强工具失败的问题

    virtualbox有个增强工具,安装之后用户体验是非常爽的.但是有些时候在安装增强工具会遇到一些小问题,无非是没有安装gcc,make之类的编译工具或是需要安装kernel*.而我遇到的问题在做了这 ...

  3. 分享windows自带计划任务Task schedule使用指南

    下面以“启动运行QQ程序,无限期每186秒一次”为例,演示如何使用计划任务功能. 今天IT外包 www.itwaibaow.com 就为大家分享如何使用win7"计划任务“(Task sch ...

  4. iOS bounds、frame之间的关系

    这几个都是在ios程序中,经常会注意到的一些小细节,能否真正了解这些,对写ios程序也有很大的好处. frame 是UIView中表示此view的一个矩形面积,包括了view在它的superview中 ...

  5. bzoj1017 [JSOI2008]魔兽地图DotR——DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1017 好难想的状态啊!f[i][j][k]表示i号物品有j个向上贡献,一共花了k钱的最大力量 ...

  6. ASP.NET Core:WebAppCoreReact

    ylbtech-ASP.NET Core:WebAppCoreReact 1.返回顶部 1. 2.   3.         4. 5. 6. 7. 2. wwwroot 返回顶部   3. Clie ...

  7. 865C

    二分+期望dp 好神奇啊...出题人太神了! 我们发现dp之间的关系不满足是一个dag,那么我们只能用高斯消元,但是由于这里是取最小值,需要取min,也不能用高斯消元,于是我们想出了一个奇妙的方法 我 ...

  8. ORA-01152: 文件 1 没有从过旧的备份中还原

    转自:http://blog.itpub.net/8520577/viewspace-1255794/ 做了一个全备 RMAN> show all; 使用目标数据库控制文件替代恢复目录db_un ...

  9. linux设备驱动第三篇:如何实现一个简单的字符设备驱动

    在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动.本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存 ...

  10. django上课笔记6-MVC,MTV架构-中间件-初识Form组件

    一.MVC,MTV架构 models(数据库,模型) views(html模板) controllers(业务逻辑处理) --> MVC models(数据库,模型) templates(htm ...