多媒体工具类

March 16, 2025 · View on GitHub

使用演示类 MediaUse 介绍了配置参数及使用

项目类结构 - 包目录

  • 多媒体管理类(DevMediaManager):MediaPlayer 统一管理类,全局使用一个 MediaPlayer

  • 视频播放控制类(DevVideoPlayerControl):视频播放控制器,快捷播放视频工具类

框架亮点

  • 单例 MediaPlayer,全局统一管理,防止多个多媒体资源同时存在后台播放

  • 快捷封装各种通用方法,以及监听事件处理,控制处理 MediaPlayer

  • 支持使用 MediaSet 抽象类设置 MediaPlayer 其他配置方法等,以及是否循环播放等

  • 支持快捷播放 raw、assets、本地SDCard、http 等路径,多媒体文件

API 文档

方法注释
getInstance获取 DevMediaManager 实例
setAudioStreamType设置流类型
playPrepareRaw播放 Raw 资源
playPrepareAssets播放 Assets 资源
playPrepare预加载播放 - ( file-path or http/rtsp URL ) http 资源、本地资源
isPlaying是否播放中
pause暂停操作
stop停止操作 - 销毁 MediaPlayer
isIgnoreWhat是否忽略错误类型
onError播放出错回调
onVideoSizeChanged视频大小改变通知
onPrepared使用 mMediaPlayer.prepareAsync() 异步播放准备成功回调
onCompletion视频播放结束回调
onBufferingUpdateMediaPlayer 缓冲更新回调
onSeekComplete滑动加载完成回调
setMediaListener设置 MediaPlayer 回调事件
isNullMediaPlayer判断 MediaPlayer 是否为 null
isNotNullMediaPlayer判断 MediaPlayer 是否不为 null
getMediaPlayer获取 MediaPlayer 对象
setMediaPlayer设置 MediaPlayer 对象
setTAG设置日志打印 TAG
getVolume获取播放音量
setVolume设置播放音量
getPlayRawId获取播放资源 id
getPlayUri获取播放地址
getVideoWidth获取视频宽度
getVideoHeight获取视频高度
getCurrentPosition获取播放时间
getDuration获取资源总时间
getPlayPercent获取播放进度百分比
isLooping是否循环播放 - 默认不循环
setMediaConfig设置播放配置
方法注释
surfaceChangedSurface 改变通知
surfaceCreatedSurface 创建
surfaceDestroyedSurface 销毁
onPrepared准备完成回调
onCompletion播放完成/结束
onBufferingUpdate缓存进度
onSeekComplete滑动进度加载成功
onError异常回调
onVideoSizeChanged视频大小改变通知
setMediaListener设置播放监听事件
pausePlayer暂停播放
stopPlayer停止播放
startPlayer开始播放
getSurfaceView获取 SurfaceView
isPlaying是否播放中
isAutoPlay判断是否自动播放
setAutoPlay设置自动播放
getPlayUri获取播放地址
getVideoWidth获取视频宽度
getVideoHeight获取视频高度
getCurrentPosition获取播放时间
getDuration获取资源总时间
getPlayPercent获取播放进度百分比

使用示例

// 设置 TAG, 打印日志使用
DevMediaManager.getInstance().setTAG(TAG);
// 设置音量
DevMediaManager.getInstance().setVolume(50);
// 设置流类型
DevMediaManager.getInstance().setAudioStreamType(AudioManager.STREAM_MUSIC);

// 获取播放音量
DevMediaManager.getInstance().getVolume();
// 获取当前播放的地址
DevMediaManager.getInstance().getPlayUri();
// 获取播放的资源id
DevMediaManager.getInstance().getPlayRawId();
// 获取 当前播放时间
DevMediaManager.getInstance().getCurrentPosition();
// 获取资源总时间
DevMediaManager.getInstance().getDuration();
// 获取播放进度百分比
DevMediaManager.getInstance().getPlayPercent();
// 获取 MediaPlayer 对象
DevMediaManager.getInstance().getMediaPlayer();

// 获取播放的视频高度
DevMediaManager.getInstance().getVideoHeight();
// 获取播放的视频宽度
DevMediaManager.getInstance().getVideoWidth();

// 是否播放中
DevMediaManager.getInstance().isPlaying();
// 停止操作
DevMediaManager.getInstance().stop();
// 暂停操作
DevMediaManager.getInstance().pause();

// 设置事件监听
DevMediaManager.getInstance().setMediaListener(new DevMediaManager.MediaListener() {
    @Override
    public void onPrepared() {
        if (DevMediaManager.getInstance().isNotNullMediaPlayer()) {
            // 播放操作
            DevMediaManager.getInstance().getMediaPlayer().start();
        }
    }

    @Override
    public void onCompletion() {
    }

    @Override
    public void onBufferingUpdate(int percent) {
    }

    @Override
    public void onSeekComplete() {
    }

    @Override
    public void onError(int what, int extra) {
    }

    @Override
    public void onVideoSizeChanged(int width, int height) {
    }
});

// =

// 播放音频
DevMediaManager.getInstance().playPrepareRaw(R.raw.dev_beep);
DevMediaManager.getInstance().playPrepareAssets("a.mp3");
DevMediaManager.getInstance().playPrepare(PathUtils.getSDCard().getSDCardPath() + "/a.mp3");
DevMediaManager.getInstance().playPrepare("http://xxx.mp3");
DevMediaManager.getInstance().playPrepare(new DevMediaManager.MediaSet() {
    @Override
    public void setMediaConfig(MediaPlayer mediaPlayer) throws Exception {
        mediaPlayer.setDataSource("xxx");
    }
}); // 自由设置信息

// =

SurfaceView surfaceView = null;
// 播放视频
DevVideoPlayerControl control = new DevVideoPlayerControl(surfaceView);
control.startPlayer(PathUtils.getSDCard().getSDCardPath() + "/video_3.mp4");
control.startPlayer("http://xxx.mp4");
control.startPlayer(new DevMediaManager.MediaSet() {
    @Override
    public void setMediaConfig(MediaPlayer mediaPlayer) throws Exception {
        mediaPlayer.setDataSource("xxx");
    }
}); // 自由设置信息