有意购买源码请联系:[email protected]
- 兼容androidx和support库
- 基本信息获取(音频:采样率、声道数、时长等,视频:宽、高、fps、时长等)
- 支持file、http、https、rtmp、rtp、rtsp、byte[]等
- 可选音频、视频、音视频播放模式
- 软解硬解设置
- 无缝切换surface(也可自定义surfaceview、textureview)
- 支持多实例播放
- 支持媒体自由切换
- 支持FFmpeg参数设置
- 支持byte[]数据解码
- 支撑音视频变速变调
- 支撑透明视频播放(可实现不错的视觉效果)
- 字幕选择
- 内置循环播放
- 链接超时设置
- 缓存大小设置(按时间、内存和队列设置)
- 音视频加密播放
- 音轨选择
- 音频声道选择
- 音频PCM数据和实时分贝获取
- 音频指定采样率设置
- 视频截屏
- 视频首帧图片或指定时间图片获取
- 视频任意比例设置
- 视频旋转角度设置(0,90,180,270)
- 视频shader自定义视频滤镜(动态设置)
- 视频背景颜色设置(默认黑色)
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.wanliyang1990:wlmedia:2.0.0'
}
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
defaultConfig {
...
ndk {
abiFilter("arm64-v8a")
abiFilter("armeabi-v7a")
abiFilter("x86")
abiFilter("x86_64")
}
...
}
// WlSurfaceView 一般播放使用
<com.ywl5320.wlmedia.surface.WlSurfaceView
android:layout_width="match_parent"
android:layout_height="match_parent" />
// WlTextureView 需要做透明、移动、旋转等使用
<com.ywl5320.wlmedia.surface.WlTextureView
android:layout_width="match_parent"
android:layout_height="match_parent" />
WlSurfaceView wlSurfaceView = findViewById(R.id.wlsurfaceview);
WlMedia wlMedia = new WlMedia();
wlMedia.setSource(url);
wlSurfaceView.setWlMedia(wlMedia);
wlMedia.setOnMediaInfoListener(new WlOnMediaInfoListener() {
@Override
public void onPrepared() {
//异步准备好后开始播放
wlMedia.start();
}
@Override
public void onError(int code, String msg) {
//错误回调,主要用于查看错误信息
}
@Override
public void onComplete(WlComplete type, String msg) {
//播放完成(包含:正常播放完成、超时播放完成、手动触发播放完成等)
}
@Override
public void onTimeInfo(double currentTime, double bufferTime) {
//时间回调,当前时间和缓冲时间
}
@Override
public void onSeekFinish() {
//seek完成后回调,可用于类似iptv这种快进快退
}
@Override
public void onLoopPlay(int loopCount) {
//循环播放此时回调
}
@Override
public void onLoad(boolean load) {
//加载状态回调
}
@Override
public byte[] decryptBuffer(byte[] encryptBuffer) {
return new byte[0];
}
@Override
public byte[] readBuffer(int read_size) {
return new byte[0];
}
@Override
public void onPause(boolean pause) {
//暂停回调
}
});
wlSurfaceView.setOnVideoViewListener(new WlOnVideoViewListener() {
@Override
public void initSuccess() {
//surfaceview初始化完成
wlMedia.prepared();
}
@Override
public void onSurfaceChange(int width, int height) {
//surfaceview大小改变
}
@Override
public void moveX(double value, int move_type) {
//surfaceview横向左右滑动
}
@Override
public void onSingleClick() {
//surfaceview单击事件
}
@Override
public void onDoubleClick() {
//surfaceview双击事件
}
@Override
public void moveLeft(double value, int move_type) {
//surfaceview左侧上下滑动事件
}
@Override
public void moveRight(double value, int move_type) {
//surfaceview右侧上下滑动事件
}
});
-keep class com.ywl5320.wlmedia.* {*;}