安卓直播详细教程(二)-----ijkplayer集成及基本使用

好久没有写这个系列的文章了,时隔接近一年再次用到ijkplayer会发现已经跳跃了三个大版本,那么今天就先介绍一下jikplayer的集成和基本使用。

首先贴上GitHub地址:Bilibili/ijkplayer

其实呢github已经说的很清楚了,不过还是和大家分享一下:

准备工作:

在引入ijkplayer之前我们需要去构建.so,因为在后面我们需要用到,这里本人已经编译了一套可以直接拿去用,下载地址:
http://download.csdn.net/download/github_33304260/9932313
这里写图片描述

下面是具体生成流程:

第一步:安装homebrew, git, yasm

安装homebrew :
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装git :
brew install git

安装yasm:
brew install yasm

第二步:配置环境变量

export ANDROID_SDK=<your sdk path>
export ANDROID_NDK=<your ndk path>

第三步:根据自己的需求更改module.sh

以下提供了其他三种module.sh文件,如果不做修改就是默认类型。

1.If you prefer more codec/format

cd config
rm module.sh
ln -s module-default.sh module.sh
cd android/contrib

2.If you prefer less codec/format for smaller binary size (include hevc function)

cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
cd android/contrib

3.If you prefer less codec/format for smaller binary size (by default)

cd config
rm module.sh
ln -s module-lite.sh module.sh
cd android/contrib

上面的配置都完成之后,我们开始构建我们的so文件。

构建.so文件

第一步 :下载工程

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android

这里写图片描述

第二步:切换到相应版本的提交

cd ijkplayer-android
git checkout -B latest k0.8.1

这里写图片描述

第三步:执行init-android脚本

./init-android.sh

这里写图片描述

第四步:执行ffmpeg脚本

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

这里写图片描述
第五步:执行compile-ijk脚本

cd ..
./compile-ijk.sh all

这里写图片描述

此时我们需要的so文件已尽生成:
如下图:
这里写图片描述

构建安卓项目

第一步:在app下gradle添加如下代码:

android {
    sourceSets.main {
        jniLibs.srcDirs = ['libs']
    }
}

dependencies {
    compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.1'
    compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.1'
    compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.1'
}

第二步:在project下gradle添加如下代码:

ext {
    compileSdkVersion = 23  // depending on your sdk version 
    buildToolsVersion = "23.0.3"  // depending on your build tools version

    targetSdkVersion = 23   // depending on your sdk version

    versionCode = 800102
    versionName = "0.8.1.2"
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

wrapper {
    gradleVersion = '2.14.1'
}

第三步:
将如下资源从sample工程拷入自己工程
这里写图片描述

第四步:导包并整理资源
将引入的代码重新导入自己的包名!!!
同时将缺失的资源文件添加进工程

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- -->
    <string name="pref_title_general">General</string>

    <string name="pref_key_enable_background_play">pref.enable_background_play</string>
    <string name="pref_title_enable_background_play">Enable background play</string>
    <string name="pref_summary_enable_background_play">need Android 4.0+</string>

    <string name="pref_key_using_android_player">pref.using_android_player</string>
    <string name="pref_title_using_android_player">Using system player</string>
    <string name="pref_summary_using_android_player"></string>

    <string name="pref_key_player">pref.player</string>
    <string name="pref_title_player">Choose Player</string>
    <string-array name="pref_entries_player">
        <item>Auto Select</item>
        <item>AndroidMediaPlayer</item>
        <item>IjkMediaPlayer</item>
        <item>IjkExoMediaPlayer</item>
    </string-array>
    <string-array name="pref_entry_values_player">
        <item>0</item>
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </string-array>
    <string-array name="pref_entry_summaries_player">
        <item>Auto Select</item>
        <item>AndroidMediaPlayer</item>
        <item>IjkMediaPlayer</item>
        <item>IjkExoMediaPlayer</item>
    </string-array>

    <!-- -->
    <string name="pref_title_ijkplayer_video">Video: ijkplayer</string>

    <string name="pref_key_using_media_codec">pref.using_media_codec</string>
    <string name="pref_title_using_media_codec">Using MediaCodec</string>
    <string name="pref_summary_using_media_codec"></string>

    <string name="pref_key_using_media_codec_auto_rotate">pref.using_media_codec_auto_rotate</string>
    <string name="pref_title_using_media_codec_auto_rotate">Using MediaCodec auto rotate</string>
    <string name="pref_summary_using_media_codec_auto_rotate"></string>

    <string name="pref_key_media_codec_handle_resolution_change">pref.media_codec_handle_resolution_change</string>
    <string name="pref_title_media_codec_handle_resolution_change">MediaCodec handle resolution change</string>
    <string name="pref_summary_media_codec_handle_resolution_change"></string>

    <string name="pref_key_pixel_format">pref.pixel_format</string>
    <string name="pref_title_pixel_format">Pixel Format</string>
    <string-array name="pref_entries_pixel_format">
        <item>Auto Select</item>
        <item>RGB 565</item>
        <item>RGB 888</item>
        <item>RGBX 8888</item>
        <item>YV12</item>
        <item>OpenGL ES2</item>
    </string-array>
    <string-array name="pref_entry_values_pixel_format">
        <item></item>
        <item>fcc-rv16</item>
        <item>fcc-rv24</item>
        <item>fcc-rv32</item>
        <item>fcc-yv12</item>
        <item>fcc-_es2</item>
    </string-array>
    <string-array name="pref_entry_summaries_pixel_format">
        <item>Auto Select</item>
        <item>RGB 565</item>
        <item>RGB 888</item>
        <item>RGBX 8888</item>
        <item>YV12</item>
        <item>OpenGL ES2</item>
    </string-array>

    <!-- -->
    <string name="pref_title_ijkplayer_audio">Audio: ijkplayer</string>

    <string name="pref_key_using_opensl_es">pref.using_opensl_es</string>
    <string name="pref_title_using_opensl_es">Using OpenSL ES</string>
    <string name="pref_summary_using_opensl_es"></string>

    <!-- -->
    <string name="pref_title_render_view">RenderView</string>

    <string name="pref_key_enable_no_view">pref.enable_no_view</string>
    <string name="pref_title_enable_no_view">Enable NoView</string>
    <string name="pref_summary_enable_no_view"></string>

    <string name="pref_key_enable_surface_view">pref.enable_surface_view</string>
    <string name="pref_title_enable_surface_view">Enable SurfaceView</string>
    <string name="pref_summary_enable_surface_view"></string>

    <string name="pref_key_enable_texture_view">pref.enable_texture_view</string>
    <string name="pref_title_enable_texture_view">Enable TextureView</string>
    <string name="pref_summary_enable_texture_view"></string>

    <string name="pref_key_enable_detached_surface_texture">pref.enable_detached_surface_texture</string>
    <string name="pref_title_enable_detached_surface_texture">Enable detached SurfaceTexture</string>
    <string name="pref_summary_enable_detached_surface_texture"></string>

    <!-- -->
    <string name="pref_title_misc">Misc</string>
    <string name="pref_key_using_mediadatasource">pref.using_mediadatasource</string>
    <string name="pref_title_using_mediadatasource">Using MediaDataSource</string>
    <string name="pref_summary_using_mediadatasource"></string>

    <!-- -->
    <string name="pref_key_last_directory"></string>

</resources>

具体操作时根据报错提示添加。

第五步:播放器使用
完成上述步骤之后就可以开始使用了

 <ecarx.videomanuals.widget.media.IjkVideoView
        android:id="@+id/ijk_video_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center" />

效果展示:
这里写图片描述

上图的播放控制器本人做了自定义修改,今天这篇文章先介绍的这里,下一篇会详细介绍播放器的详细使用和自定义功能。

项目GitHub地址:
https://github.com/libin7278/videomanuals
.so文件下载地址:
http://download.csdn.net/download/github_33304260/9932313

有问题的小伙伴可以扫码右侧二维码加入群聊,一起讨论,分享。

扫码关注公众号“伟大程序猿的诞生“,更多干货新鲜文章等着你~

公众号回复“资料获取”,获取更多干货哦~

有问题添加本人微信号“fenghuokeji996” 或扫描博客导航栏本人二维码

发布了97 篇原创文章 · 获赞 961 · 访问量 49万+

猜你喜欢

转载自blog.csdn.net/github_33304260/article/details/77126761