已有的AndroidStudio项目导入Ijkplayer

初衷

Hi,i'm Rover Van.在Android的开发当中呢,如果需要音视频的开源播放器,有两个大家一定是会知道的,Vitamio和Ijkplayer。本博文是我在已有的AndroidStudio项目后(实际是开发到一半,Demo是新建的Project,模拟导入过程),导入Ijkplayer的实践

方法一

先电梯直达Ijkplayer-Github,看README.md的最上方是最近更新的compile依赖


在Build.gradle(app)的依赖里添加这个可以直接导入Ijkplayer,这是比较方便快捷的方法。
需要注意的是,如果是想要支持不同架构的手机,除了上面两个require选项外,下面的optional的依赖也要加上。
如果你采用这种方法导入了Ijkplaer,那么千万不要采用法二了,不然就会报"Gradle: Error: more than one library with package name 'tv.danmaku.ijk.media'"的错误了。

方法二

Clone&编译

这个算是之前导入Ijkplayer的传统方法了,首先是按照README.md下Android那块的来进行操作,


当然,到这步之前,你还得配置好系统的编译环境,如果你是MacOS或者Linux还算简单,如果是windows的话稍微麻烦点,关于这块的配置方法出门右转Google
当你做好以下这几步后,即编译完成后,也得到了so文件。

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -B latest k0.6.0

./init-android.sh

cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

cd ..
./compile-ijk.sh all

到此为止你会得到一个叫 /yourdownloadpath/ijkplayer-android 的文件夹,并且其子目录已经有了编译好的ijkplayer-java文件与带有so文件的各个架构的文件夹,一定要确保你的so 文件有编译完成,不然后面的操作都是感动自己。
接下来按官方的说法是

# Android Studio:
#     Open an existing Android Studio project
#     Select android/ijkplayer/ and import
#
#     define ext block in your root build.gradle
#     ext {
#       compileSdkVersion = 23       // depending on your sdk version
#       buildToolsVersion = "23.0.0" // depending on your build tools version
#
#       targetSdkVersion = 23        // depending on your sdk version
#     }

按照这个做法,那么我们得到是一个以ijkplayer-example为主包的工程文件


这显然不是我们想要的,在实际开发中,我们更多是已经有一个工程,然后想要将ijkplayer导入进去,总不能在example里面再写一遍吧。接下来我们就来模拟这个过程

新建项目模拟已有项目

新建一个工程文件,带有一个Empty Activity,做以下两步准备
1.布局文件 添加IjkVideoView.

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#0099cc">

        <tv.danmaku.ijk.media.player.widget.IjkVideoView
            android:id="@+id/video_view"
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:layout_gravity="center">
        </tv.danmaku.ijk.media.player.widget.IjkVideoView>

    </FrameLayout>

</LinearLayout>

2.Activity

public class MainActivity extends AppCompatActivity {

IjkVideoView mVideoView;
private Uri mVideoUri;
private String VideoPath = "http://www.modrails.com/videos/passenger_nginx.mov" ;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    IjkMediaPlayer.loadLibrariesOnce(null);
    IjkMediaPlayer.native_profileBegin("libijkplayer.so");

    mVideoView = (IjkVideoView) findViewById(R.id.video_view);
    mVideoUri = Uri.parse(VideoPath);
    mVideoView.setVideoURI(mVideoUri);
    mVideoView.start();
    }
    }   

这两步是加载主要的so文件:
IjkMediaPlayer.loadLibrariesOnce(null);
IjkMediaPlayer.native_profileBegin("libijkplayer.so");

以Android Library的形式导入Ijkplayer

以Mac版AndroidStudio为例
File->New->Import Module
我们要分别选择以下这两个文件夹
/ijkplayer-android/android/ijkplayer/ijkplayer-java
/ijkplayer-android/android/ijkplayer/ijkplayer-armv7a
其实细心的读者到这里已经发现,这就是对应方法一的两个require依赖
在Build.gradle中添加两个依赖

compile project(path: ':ijkplayer-java')
compile project(path: ':ijkplayer-armv7a')

接下来还需要将Ijkplayer-example的widget文件copy到我们的ijkplayer-java下并做一些改动(略),不过也可以仿照example的写法自己自定义一个IjkVideoView.
懒人做法也可以自己下载我的demo后copy我修改完widget到你的工程,但是要真正使用,还是需要自己写一个比较合理。

总结

引入Ijkplayer后,Activity也可以通过导包消红了,现在可以向你需要开源视频框架的项目导入Ijkplayer了!如果想要导入Vitamio,还可以看我另一篇博文,解码你的音视频--Vitamio导入

Github

这个项目的Demo已经在我的Github上开源,有兴趣的朋友欢迎Star或Download,一起交流和学习噢。

Contact me

如果有什么错误或者建议 OR 如果需要请教关于本主题的实现问题
欢迎来邮与我交流和讨论!
Email:atrovervan@gmail.com

2016-08-19 14:38 1910
Comments
Write a Comment