在自己的工程中使用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工程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM