Best android open-source packages and libraries.

Wlmedia

Android 音视频播放SDK,几句代码即可实现音视频播放功能(支持:手机、电视盒子等设备。支持:http、https、rtsp、rtp、rtmp、byte[]、加密视频和各种文件格式视频;包含视频截图、音轨选择、字幕选择、循环播放、设置软解或硬解、自定义视频滤镜、透明视频、变速变调、声道切换、无缝切换surface(surfaceview和textureview)、视频比例设置、多路音视频播放等。)~
Updated 4 weeks ago

wlmedia

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

功能丰富,支持手机、电视盒子、手表等智能设备。

有意购买源码请联系:ywl5320@163.com

一、功能特点

  • [x] 兼容androidx和support库
  • [x] 基本信息获取(音频:采样率、声道数、时长等,视频:宽、高、fps、时长等)
  • [x] 支持file、http、https、rtmp、rtp、rtsp、byte[]等
  • [x] 可选音频、视频、音视频播放模式
  • [x] 软解硬解设置
  • [x] 无缝切换surface(也可自定义surfaceview、textureview)
  • [x] 支持多实例播放
  • [x] 支持媒体自由切换
  • [x] 支持FFmpeg参数设置
  • [x] 支持byte[]数据解码
  • [x] 支撑音视频变速变调
  • [x] 支撑透明视频播放(可实现不错的视觉效果)
  • [x] 字幕选择
  • [x] 内置循环播放
  • [x] 链接超时设置
  • [x] 缓存大小设置(按时间、内存和队列设置)
  • [x] 音视频加密播放
  • [x] 音轨选择
  • [x] 音频声道选择
  • [x] 音频PCM数据和实时分贝获取
  • [x] 音频指定采样率设置
  • [x] 视频截屏
  • [x] 视频首帧图片或指定时间图片获取
  • [x] 视频任意比例设置
  • [x] 视频旋转角度设置(0,90,180,270)
  • [x] 视频shader自定义视频滤镜(动态设置)
  • [x] 视频背景颜色设置(默认黑色)

二、实例展示

三、集成使用

3.1

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

dependencies {
        implementation 'com.github.wanliyang1990:wlmedia:2.0.0'
}

3.2 常用权限

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

3.2 配置NDK编译平台

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

3.3 API

3.3.1 视频Surface

    // 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" />

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

    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右侧上下滑动事件
		}
	});

四、博客详解

五、讨论群(1085618246)


六、混淆

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

七、参考资料

八、核心三方库

Create By:ywl5320 2019-12-16