Home

Awesome

🚀wlmedia🚀

Android 音视频播放SDK,几句代码即可实现音视频播放功能~

使用简单,功能丰富,支持手机、车机系统、电视、电视盒子、手表等智能设备

全新架构,增强稳定性,性能和系统播放器接近

HarmonyOS Coming Soon

iOS

一 功能&特点

二 集成使用

2.1 gradle

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
	
dependencies {
        implementation 'com.github.ywl5320:wlmedia:4.0.0'
}

2.2 常用权限

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

2.3 配置NDK编译平台

defaultConfig {
   ...
   ndk {
       abiFilter("armeabi-v7a")
       abiFilter("arm64-v8a")
       abiFilter("x86")
       abiFilter("x86_64")
       }
...
}

2.4 设置Surface

<-- WlSurfaceView 一般播放使用 -->
<com.ywl5320.wlmedia.widget.WlSurfaceView
    android:id="@+id/wlsurfaceview"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<-- WlTextureView 需要做透明、移动、旋转等使用 -->
<com.ywl5320.wlmedia.widget.WlTextureView
    android:id="@+id/wltextureview"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

2.5 基础调用代码(更多功能见Demo)

// 1.创建播放器
WlPlayer wlPlayer = new WlPlayer();
wlPlayer.setOnMediaInfoListener(new WlOnMediaInfoListener() {
   @Override
   public void onPrepared() {
       // 异步准备好后回调,这里调用 wlplayer.start() 开始播放
       wlPlayer.start();
   }

   @Override
   public void onTimeInfo(double currentTime, double bufferTime) {
       // 时间进度回调 
   }

   @Override
   public void onComplete(WlCompleteType wlCompleteType, String s) {
       // 播放完成回调,根据 WlCompleteType 区分对应类型
       if (wlCompleteType == WlCompleteType.WL_COMPLETE_EOF) {
           // 正常播放完成
       } else if (wlCompleteType == WlCompleteType.WL_COMPLETE_ERROR) {
           // 播放出错,原因为:msg 字段
       } else if (wlCompleteType == WlCompleteType.WL_COMPLETE_HANDLE) {
           // 主动调用 wlPlayer.stop() 会回调此类型
       } else if (wlCompleteType == WlCompleteType.WL_COMPLETE_NEXT) {
           // 正在播放中,切换了新的数据源,会回调此类型
       } else if (wlCompleteType == WlCompleteType.WL_COMPLETE_TIMEOUT) {
           // 播放超时,会回调此接口
       } else if (wlCompleteType == WlCompleteType.WL_COMPLETE_LOOP) {
           // 循环播放中,每开始新的一次循环,会回调此接口
       }
   }

   @Override
   public void onLoad(WlLoadStatus loadStatus, int progress, long speed) {
       // 加载状态回调
       if (wlLoadStatus == WlLoadStatus.WL_LOADING_STATUS_START) {
           // 开始加载
       } else if (wlLoadStatus == WlLoadStatus.WL_LOADING_STATUS_PROGRESS) {
           // 加载进度
       } else if (wlLoadStatus == WlLoadStatus.WL_LOADING_STATUS_FINISH) {
           // 加载完成
       }
   }

   @Override
   public void onSeekFinish() {
       // seek 完成回调
   }

   @Override
   public void onFirstFrameRendered() {
       // 首帧渲染回调
   }
});

// 2.获取 WlSurfaceView 并绑定播放器
WlSurfaceView wlSurfaceView = findViewById(R.id.wlsurfaceview);
wlSurfaceView.setWlPlayer(wlPlayer);
// 可选
wlSurfaceView.setClearLastVideoFrame(false); // 设置不清屏
wlSurfaceView.setVideoScale(WlScaleType.WL_SCALE_FIT); // 设置缩放模式
wlSurfaceView.setVideoRotate(WlRotateType.WL_ROTATE_90); // 设置旋转角度
wlSurfaceView.setVideoMirror(WlMirrorType.WL_MIRROR_TOP_BOTTOM); // 设置镜像模式

// 3.设置数据源异步准备
wlPlayer.setSource(url);
wlPlayer.prepare();

三 详细 API

四 效果展示

常规播放透明视频多Surface渲染多实例播放
<img src="doc/imgs/normal.gif" alt="描述" width="240" height="520"><img src="doc/imgs/alphavideo.gif" alt="描述" width="240" height="520"><img src="doc/imgs/multisurface.gif" alt="描述" width="240" height="520"><img src="doc/imgs/multiplayer.gif" alt="描述" width="240" height="520">

五 混淆

-keep class com.ywl5320.wlmedia.* {*;} 

六 免费和增值服务

WlMedia 是按应用根据 包名 定制的,分免费版和付费定制版

免费版

增值版

七 讨论群(1085618246)

QQ

八 核心三方库

Update By:ywl5320 2024-12-15

Create By:ywl5320 2019-12-16