Android视频播放器ijkplayer使用入门

Author Avatar
wshunli 6月 23, 2018
  • 在其它设备中阅读本文章

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

支持 Android 和 iOS 操作系统,所以文章起名还是有点瑕疵的,哈哈哈 。

ijkplayer 仓库地址:https://github.com/Bilibili/ijkplayer

目前 Android 主流的视频播放器是 ijkplayer、ExoPlayer、MediaPlayer。

其中 MediaPlayer 在前面介绍过了:《第一行代码》读书笔记(七) | CirGIS
https://www.wshunli.com/posts/941f84ed.html

接下来两篇文章会分别介绍 ijkplayer 和 ExoPlayer 的使用,也为移动端直播技术打下基础。

引入依赖

根据需要引入依赖,根据建议引入 java 、 armv7a 两种兼容性基本满足要求。

dependencies {
    # required, enough for most devices.
    compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'

    # Other ABIs: optional
    compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'

    # ExoPlayer as IMediaPlayer: optional, experimental
    compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
}

添加播放控件

本身 ijkplayer 是没有播放控件的,这里我们采用示例代码的播放控件。

\ijkplayer\android\ijkplayer\ijkplayer-example\src\main\java\tv\danmaku\ijk\media\example\widget\media

将其代码复制到合适位置,还有 string 键值对,以及 Manifest 配置。

ijkplayer-widget

其中 Manifest 需要配置权限及声明服务。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
···
<service
    android:name="com.wshunli.ijkplayer.demo.services.MediaPlayerService"
    android:enabled="false"
    android:exported="false"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name" />

可能会出现 NullPointerException 错误,删除不必要的代码即可。

https://github.com/Bilibili/ijkplayer/issues/3969

入门使用

在布局中添加播放控件。

<com.wshunli.ijkplayer.demo.widget.IjkVideoView
    android:id="@+id/ijkvideoview"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</com.wshunli.ijkplayer.demo.widget.IjkVideoView>

然后在 Activity 中使用就可以了。

IjkVideoView ijkVideoView;
···
ijkVideoView = findViewById(R.id.ijkvideoview);
ijkVideoView.setVideoURI(Uri.parse("http://streams.wshunli.com/videos/dyys2_x264.mp4"));
//  ijkVideoView.setVideoURI(Uri.parse("http://streams.wshunli.com/x36xhzz/x36xhzz.m3u8"));
ijkVideoView.start();

默认是支持 m3u8 直播视频流的,挺意外的。

ijkplayer-livevideo

其他还有很多基于或者封装的播放库,这里列举出来就不多介绍了。

1、支持浮动和全屏的视频播放器。
https://github.com/lipangit/JiaoZiVideoPlayer

2、基于IJKPlayer(兼容系统MediaPlayer与EXOPlayer2),实现了多功能的视频播放器。
https://github.com/CarGuo/GSYVideoPlayer

3、Android播放器基础库,专注于播放视图组件的高复用性和组件间的低耦合,轻松处理复杂业务。
https://github.com/jiajunhui/PlayerBase

参考资料
1、Android ijkplayer的使用解析 - CSDN博客
https://blog.csdn.net/huaxun66/article/details/53401231
2、Android ijkplayer的使用解析及播放器的制作 - CSDN博客
https://blog.csdn.net/github_2011/article/details/77385498
3、Android 超好用的播放器——ijkplayer - 简书
https://www.jianshu.com/p/c5d972ab0309
4、Android集成IjkPlayer - 简书
https://www.jianshu.com/p/79b434b2d5c8
5、视频直播技术(四):使用Ijkplayer播放直播视频 - 灰色飘零 - 博客园
http://www.cnblogs.com/renhui/p/6420140.html

如果本文对您有所帮助,且您手头还很宽裕,欢迎打赏赞助我,以支付网站服务器和域名费用。 https://paypal.me/wshunli 您的鼓励与支持是我更新的最大动力,我会铭记于心,倾于博客。
本文链接:https://www.wshunli.com/posts/2f3bf23c.html