更新记录

1.0.0(2026-07-29)

安卓版本的exoplayer 播放器插件,能提供比 uni.createInnerAudioContext 更准确的seek,因为uniapp用的是MediaPlayer,草(一种植物)


平台兼容性

uni-app x(5.08)

Chrome Safari Android Android插件版本 iOS 鸿蒙 微信小程序
× × 6.0 1.0.0 × × ×

其他

多语言 暗黑模式 宽屏模式
× ×

peng-player

peng-player 是一个面向 uni-app x 的 Android 音频播放 UTS 插件,底层基于 AndroidX Media3 ExoPlayer 封装,提供接近 uni.createInnerAudioContext() 的音频上下文 API。

插件适合需要在 Android App 端播放网络音频、本地音频,并监听播放状态、进度、缓冲、跳转和错误事件的场景。

功能特性

  • 基于 Media3 ExoPlayer,支持常见音频格式和网络音频 URL。
  • 提供 createPengAudioContext() 创建音频上下文。
  • 支持播放、暂停、停止、跳转、销毁播放器。
  • 支持设置音频地址、自动播放、循环播放、音量。
  • 支持倍速播放,范围 0.25 ~ 4.0
  • 支持读取总时长、当前播放进度、暂停状态。
  • 支持播放生命周期事件:canplayplaypausestopended
  • 支持播放进度回调:onTimeUpdate(currentTime, duration)
  • 支持缓冲、跳转、错误事件:waitingseekingseekederror

兼容性

平台 状态 说明
uni-app x App Android 支持 当前主要实现平台
uni-app App Android 未验证 本插件按 uni-app x UTS API 方式设计
App iOS 暂不支持 未实现 iOS 音频播放器逻辑
App HarmonyOS 暂不支持 未实现 HarmonyOS 音频播放器逻辑
Web / H5 不支持 插件依赖 Android 原生能力
小程序 不支持 插件依赖 Android 原生能力

Android 兼容要求:

  • minSdkVersion: 21,Android 5.0 及以上。
  • 依赖:androidx.media3:media3-exoplayer:1.4.1
  • 仓库:google()mavenCentral()

安装说明

将插件放入项目的 uni_modules/peng-player 目录后,在页面中直接导入:

import { createPengAudioContext } from "@/uni_modules/peng-player";

如果 Android 运行时提示 Media3 相关类找不到,请重新运行项目或重新制作自定义基座,确保 config.json 中声明的三方依赖已经被打包进 Android 工程。

基础用法

import { createPengAudioContext } from "@/uni_modules/peng-player";

const audioContext = createPengAudioContext();

audioContext.src = "https://example.com/audio.mp3";
audioContext.autoplay = false;
audioContext.loop = false;
audioContext.volume = 1.0;
audioContext.playbackRate = 1.25;

audioContext.onCanplay(() => {
  console.log("canplay", audioContext.duration);
});

audioContext.onPlay(() => {
  console.log("play");
});

audioContext.onPause(() => {
  console.log("pause");
});

audioContext.onTimeUpdate((currentTime: number, duration: number) => {
  console.log("time update", currentTime, duration);
});

audioContext.onError((err) => {
  console.log("player error", err.errCode, err.errMsg);
});

audioContext.play();

页面销毁时建议释放播放器资源:

onUnmounted(() => {
  audioContext.destroy();
});

API

createPengAudioContext()

创建一个音频播放上下文。

const audioContext = createPengAudioContext();

返回值:IPengAudioContext

属性

属性 类型 默认值 说明
src string "" 音频源地址,支持网络 URL 和 Android 可访问的本地路径
startTime number 0 开始播放位置,单位秒
autoplay boolean false 设置音频源后是否自动播放
loop boolean false 是否循环播放
volume number 1.0 音量,范围 0.01.0
playbackRate number 1.0 播放倍速,范围 0.254.0
duration number 0 音频总时长,单位秒,只读
currentTime number 0 当前播放位置,单位秒,只读
paused boolean true 是否处于暂停或未播放状态,只读

方法

方法 参数 说明
play() 开始或继续播放
pause() 暂停播放
stop() 停止播放,并重置播放状态
seek(position) position: number 跳转到指定位置,单位秒
destroy() 销毁播放器并释放资源

事件

事件方法 回调参数 触发时机
onCanplay(callback) () => void 音频准备完成,可以播放
onPlay(callback) () => void 开始播放
onPause(callback) () => void 暂停播放
onStop(callback) () => void 停止播放
onEnded(callback) () => void 播放到末尾
onTimeUpdate(callback) (currentTime: number, duration: number) => void 播放进度更新
onError(callback) (err: PengAudioContextError) => void 播放器发生错误
onWaiting(callback) () => void 播放缓冲等待
onSeeking(callback) () => void 开始跳转
onSeeked(callback) () => void 跳转完成

错误码

错误码 说明
10001 播放器初始化失败
10002 音频源无效或无法加载
10003 播放过程中发生错误
10004 播放器已被销毁

错误对象结构:

class PengAudioContextError {
  errCode: number
  errMsg: string
}

注意事项

  • Android 网络音频播放需要 App 具备网络访问能力。
  • 网络 URL 建议使用 https,并确保服务端支持 Android ExoPlayer 可识别的音频响应头。
  • duration 需要等音频准备完成后才可靠,建议在 onCanplay 后读取。
  • 页面退出或不再使用播放器时,请调用 destroy() 释放原生播放资源。
  • 当前插件只完成 Android 端实现,发布插件市场时建议将兼容平台标注为 App Android

更新日志

1.0.0

  • 初始版本。
  • 支持 Android 端音频播放、暂停、停止、跳转、循环、音量、倍速和播放事件回调。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

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

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。