Android ijkplayer详细使用步骤

Android ijkplayer详细使用步骤,第1张

ijkplayer是Bilibili基于ffmpeg开发并开源的轻量级视频播放器,支持播放本地网络视频,也支持流媒体播放。支持Android&iOS。

ijkplayer的编译这里不多阐述,我也是直接获取别人编译完成的so库文件,直接使用的。如果你对ijkplayer的编译感兴趣,可以百度一下,有很多文章。

使用ijkplayer

导包

ijkplayer源码官方下载地址:https://github.com/Bilibili/ijkplayer

上面是官方提供的ijkplayer的源码地址,但是它是没有编译过的。下面我给大家分享一份编译好的ijkplayer源码,由于比较大,分了三个包才上传完成,需要三个包都下载后才能一起解压:

编译好的ijkplayer.part1

编译好的ijkplayer.part2

编译好的ijkplayer.part3

我们下载完成,进入android/ijkplayer目录:

ijkplayer-java:ijkplayer的一些 *** 作封装及定义。这里面是通用的API接口,里面谨罩最主要的是IMediaPlayer,它是用来渲染显示多媒体的。

ijkplayer-exo:google开源的一个新的播放器ExoPlayer,在Demo中和ijkplayer对比用的。通过安装ijkplayer可以发现setting里面可以选择不同player来渲染多媒体显示,该模块下面就是一个MediaPlayer。

ijkplayer-example:测试程序

ijkplayer-{arch}:编译出来的各个版本的.so文件。

官方提供的Demo的代码还是挺多的,甚至还用了otto,需要对官方的demo进行精简,去除一些用不到的物腔代码。

首先需要的是ijkplayer-{arch}、ijkplayer-Java两个库。exo是Google提供的新的播放器,这里不需要,直接砍掉。其次是ijkplayer-example里的,我们需要的只有tv.danmaku.ijk.media.example.widget.media包下的部分类。

注:

链接库ijkplayer-arm64,ijkplayer-armv5,ijkplayer-armv7a,ijkplayer-x86,ijkplayer-x86_64是不同体系架构的动态链接库,在当前工程结构里面作为一个模块,如果不想做兼容多平台问题,可以删除其他目录结祥蚂闹构,单独保留自己需要的平台目录。

新建一个工程:

(1)把ijkplayer-armv7a/src/main/libs下的文件拷贝到新工程app目录的libs下。

(2)把ijkplayer-java/build/outputs/aar/ijkplayer-java-release.aar复制到新工程app目录的libs下。

(3)修改APP下的build.gradle, 主要设置.so及.aar的位置:

apply plugin: 'com.android.application'

android {

compileSdkVersion 24

buildToolsVersion "25.0.0"

defaultConfig {

applicationId "com.hx.ijkplayer_demo"

minSdkVersion 14

targetSdkVersion 24

versionCode 1

versionName "1.0"

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

sourceSets {

main {

jniLibs.srcDirs = ['libs'] /**在libs文件夹下找so文件*/

}

}

}

repositories {

mavenCentral()

flatDir {

dirs 'libs' /**在libs文件夹下找aar文件*/

}

}

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {

exclude group: 'com.android.support', module: 'support-annotations'

})

compile 'com.android.support:appcompat-v7:24.2.1'

testCompile 'junit:junit:4.12'

compile(name: 'ijkplayer-java-release', ext: 'aar') /**编译ijkplayer-java-release.aar文件*/

}

(4)复制ijkplayer-example下面的tv.danmaku.ijk.media.example.widget.media到新的工程,删掉一些不需要类。

(5)IjkVideoView里面还是有很多如exo等没用的东西,删!具体可以参见我后面的Demo。

(6)Manifest

...

<activity android:name=".MainActivity"

android:screenOrientation="sensorLandscape"

android:configChanges="orientation|keyboardHidden">

...

</activity>

...

<uses-permission android:name="android.permission.INTERNET"/>

将ijkplayer导入android studio并运行(导入工程项目的方法)

1 在本地AS随便建立一个工程项目(如My Appplication),然后将其生成的文件夹.gradle、gradle及文件build.gradle、gradle.properties

替换到C:\cygwin\home\Administrator\ijkplayer-android\android\ijkplayer文件夹下(即ijkplayer工程项目目录下)

2 下面再重新导入Exiting Project,选择Build.gradle文件,即可导入Project。

3 使用Android studio rebuild项目时报错:Error:(1, 1) A problem occurred evaluating project ':app'.

>Failed to apply plugin [id 'com.android.application']

>Invalid revision: 12.0.2753695 beta 1

这是因为项目的配置由于工具更新或其他原因更改了。

具体配置文件:项目目录下的 build.gradle 文件

文件中有这样一段代码:

buildscript {

repositories {

jcenter()

}

dependencies {

//classpath 'com.android.tools.build:gradle:2.1.3'

classpath 'com.android.tools.build:gradle:1.5.0'

classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'

classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7'

// NOTE: Do not place your application dependencies herethey belong

// in the individual module build.gradle files

}

}

你需要将classpath 的版本2.1.3改颂凳回原来的样子我之前版本是1.5.0。之后同步即可

其它: 将module改成lib的方法:

更改build.gradle:

1 将apply plugin: 'com.android.application'改为apply plugin: 'com.android.library'

2 屏蔽applicationId:如 //applicationId "tv.danmaku.ijk.media.example"

导入Module的方法:

1 如果我们新建了一个工程,需要导入其他工程的一个module,我们之前搞那么多,都是因为工程无法找到正行敏确的编译文件,但是module就不一样了,

他只是用一个Build.gradle文件来控制它这个module的编译规则,因此,我们只要导入就可以了,这里我们需要选择module的目录,而不是再选择uild.gradle文件

2 我们双击导入Module文件夹下的build.gradle文件,同时打开本项目下的build.gradle,将第一段复制到导入Module中的Build.gradle。

再将下面版本野带旅号改为app下的build.gradle中的相应版本号,修改后的效果如下(注释的部分为原来的代码)

//buildscript {

//repositories {

//mavenCentral()

//}

//dependencies {

//classpath 'com.android.tools.build:gradle:0.11.+'

//}

//}

apply plugin: 'android-library'

buildscript {

repositories {

jcenter()

}

dependencies {

classpath 'com.android.tools.build:gradle:1.5.0'

// NOTE: Do not place your application dependencies herethey belong

// in the individual module build.gradle files

}

}

dependencies {

compile 'com.android.support:support-v4:20.0.0'

}

//android {

//compileSdkVersion 'android-19'

//buildToolsVersion '20.0.0'

//buildTypes {

//release {

//minifyEnabled false

//proguardFile getDefaultProguardFile('proguard-android.txt')

//}

//}

//}

android {

compileSdkVersion 23

buildToolsVersion "26.0.2"

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

}

Android提供了常见的视频编兄老码,解码机制,使用Android自带的MediaPlayer,MediaController等类可以很方便的实现视频播放的功能。支持的视频格式有MP4和3GP等。这些多媒体数据可以来自于Android应用的资源文件,也可以来自于外部存储器上的文件,甚至可以是来自于网络上的文件流。

1、MediaController+VideoView实现方式

这种方式是最简单的实现方式。VideoView继承了SurfaceView同时实现培余了MediaPlayerControl接口,MediaController则是安卓封装的辅助控制器,带有暂停,播放,停止,进度条等控件。通过VideoView+MediaController可以很轻松的实现视频播放、停止、快进、快退等功能。

布局文件如下:

使用此实现方式的步骤:

1.加载指定的视频文件

2.建立VideoView和MediaController之间的关联,这样就不需要自己去控制视频的播放、暂停等。让MediaController控制即可。

3.VideoView获取焦点。

2、MediaPlayer+SurfaceView+自定义控制器

虽然VideoView的实现方式很简单,但是由于是自带的封装好的类,所以无论是播放器的大小、位置以及控制都不受我们控制。

这种实现方式步骤如下:

1.创建MediaPlayer对象,并让它加载指定的视频文件。可以是应用的资源文件、本地文件路径、或者URL。

2.在界面布局文件中定义SurfaceView组件,并为SurfaceView的SurfaceHolder添加Callback监听器。

3.调用MediaPlayer对象的setDisplay(SurfaceHolder sh)将所播放的视频图像输出到指定的SurfaceView组件。

4.调用MediaPlayer对象的prepareAsync()或prepare()方法装载流媒体文件

5.调用MediaPlayer对象的start()、stop()和pause()方法来控制视频的播放。

在实现第二步之前需要先给surfaceHolder设配尘滚置一个callback,callback的3个回调函数如下:

3、MediaPlayer+SurfaceView+MediaController

第二种实现方式使用的是自定义控件,MediaPlayer+SurfaceView也可以使用系统自带的MediaController控制器。

使用这个方式实现,布局文件只需一个SurfaceView即可,其他的控件都交给MediaController控制器,布局文件如下:

实际过程中推荐大家使用B站的播放器ijkplayer非常好用!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12158552.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存