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

最新文章

  1. 模板类 error LNK2019: 无法解析的外部符号
  2. 安装node_modules文件遇到的问题:更改代理
  3. Android-----第三方 ImageLoader 的简单配置和使用
  4. Codeforces 543D. Road Improvement (树dp + 乘法逆元)
  5. 【转】终于知道为什么我的mysql总是卸载的不干净以及老是找不到my.ini文件
  6. NLog 安装使用
  7. MongoDB-启动的时候出现了问题
  8. Tea加密算法和XxTea加密算法
  9. POJ 1330 Nearest Common Ancestors(Tarjan离线LCA)
  10. MAC上安装EndNote破解版的链接文件 以及某些安装好后有可能替换执照文件的方法
  11. 极化码之tal-vardy算法(3)
  12. Linux学习笔记之Django项目部署(CentOS)
  13. springboot多模块开发以及整合dubbo\zookeeper进行服务管理
  14. Github最简单实用的Git命令指南
  15. 一个 图片 滚动 飞入的css特效
  16. afl入门学习
  17. C#中的String与string
  18. iOS Xcode制作模板类
  19. Java并发编程实战3章
  20. asp.net winform 界面传值

热门文章

  1. HDU4513 吉哥系列故事——完美队形II Manacher算法
  2. hdu 1043 Eight(双向bfs)
  3. I.MX6 MAC地址修改
  4. 并不对劲的bzoj5415:loj2718:uoj393:p4768:[NOI2018]归程
  5. 【CQ18阶梯赛第8场】题解
  6. UVA140 剪枝
  7. 后缀自动机SAM BZOJ 2806
  8. JS 之正则表达式
  9. 【旧文章搬运】PE重定位表学习手记
  10. 问题 3: 糖果数(candy)