基于 IjkPlayer 的视频播放器

dkplayer

项目地址:dueeeke/dkplayer 基于 IjkPlayer 的视频播放器

简介:基于 IjkPlayer 的视频播放器,支持直播点播,悬浮窗播放,广告播放,边播边缓存;支持重力感应自动全屏;完美实现 ListView 和 RecyclerView 列表播放;支持清晰度切换;支持一行代码切换 MediaPlayer 和 ExoPlayer;模仿抖音效果 demo;Android O PiP demo

更多:作者   提 Bug   

标签:

视频播放-ijkplayer-exoplayer-android-mediaplayer-player-抖音-画中画-

A video player based on IjkPlayer.

基于 IjkPlayer 的视频播放器

------ demo 下载 ------

特性

  • 支持直播和点播。
  • 支持调整显示比例:默认、原始大小、16:9、4:3、铺满屏幕、居中裁剪。
  • 支持滑动调节播放进度、声音、亮度;双击播放、暂停;保存播放进度。
  • 支持边播边缓存,使用了AndroidVideoCache
  • 支持弹幕,使用了DanmakuFlameMaster
  • 支持 Https,rtsp,concat 协议。
  • 支持播放本地视频以及 raw 和 assets 视频。
  • 支持重力感应自动进入/退出全屏以及手动进入/退出全屏,全屏状态下可锁定。
  • 完美实现列表播放(RecyclerView 和 ListView),列表自动播放。
  • 支持列表小窗全局悬浮播放,Android 8.0 画中画功能。
  • 支持连续播放一个列表的视频。
  • 支持广告播放。
  • 支持清晰度切换。
  • 支持扩展自定义播放内核,MediaPlayer、ExoPlayer、vitamio 等。
  • 支持完全自定义控制层。
  • 支持多路播放器同时播放,没有任何控制 UI 的纯播放
  • 抖音 demo。

    使用

1.添加类库

gradle

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    # 必选,可兼容市面上绝大部分设备
    implementation 'com.github.dueeeke.dkplayer:dkplayer-java:2.5.4'
    implementation 'com.github.dueeeke.dkplayer:dkplayer-armv7a:2.5.4'

    # 可选,用于兼容一些其他的 CPU 架构
    implementation 'com.github.dueeeke.dkplayer:dkplayer-armv5:2.5.4'
    implementation 'com.github.dueeeke.dkplayer:dkplayer-arm64:2.5.4'
    implementation 'com.github.dueeeke.dkplayer:dkplayer-x86:2.5.4'
    implementation 'com.github.dueeeke.dkplayer:dkplayer-x86_64:2.5.4'

    # 可选,里面包含 StandardVideoController 的实现
    implementation 'com.github.dueeeke.dkplayer:dkplayer-ui:2.5.4'
}

或者将 library 下载并导入项目中使用

2.添加布局

<com.dueeeke.videoplayer.player.IjkVideoView
        android:id="@+id/player"
        android:layout_width="match_parent"
        android:layout_height="300dp" />

3.设置视频地址、标题、Controller 等

ijkVideoView.setUrl(URL_VOD); //设置视频地址
ijkVideoView.setTitle("网易公开课-如何掌控你的*时间"); //设置视频标题
StandardVideoController controller = new StandardVideoController(this);
ijkVideoView.setVideoController(controller); //设置控制器,如需定制可继承 BaseVideoController
ijkVideoView.start(); //开始播放,不调用则不自动播放

//高级设置(可选,须在 start()之前调用方可生效)
PlayerConfig playerConfig = new PlayerConfig.Builder()
        .enableCache() //启用边播边缓存功能
        .autoRotate() //启用重力感应自动进入/退出全屏功能
        .enableMediaCodec()//启动硬解码,启用后可能导致视频黑屏,音画不同步
        .usingSurfaceView() //启用 SurfaceView 显示视频,不调用默认使用 TextureView
        .savingProgress() //保存播放进度
        .disableAudioFocus() //关闭 AudioFocusChange 监听
        .setLooping() //循环播放当前正在播放的视频
        .build();
ijkVideoView.setPlayerConfig(playerConfig);

4.在Activity

@Override
    protected void onPause() {
        super.onPause();
        ijkVideoView.pause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        ijkVideoView.resume();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ijkVideoView.release();
    }


    @Override
    public void onBackPressed() {
        if (!ijkVideoView.onBackPressed()) {
            super.onBackPressed();
        }
    }

5.在AndroidManifest.xml

<activity
    android:name=".PlayerActivity"
    android:configChanges="orientation|screenSize|keyboardHidden"
    android:screenOrientation="portrait" /> <!-- or android:screenOrientation="landscape"-->

其他 API 的用法参照 demo

截图

API 演示 列表播放 扩展功能 画中画
 

基于 IjkPlayer 的视频播放器|基于 IjkPlayer 的视频播放器|基于 IjkPlayer 的视频播放器|基于 IjkPlayer 的视频播放器