更新记录
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。 - 支持读取总时长、当前播放进度、暂停状态。
- 支持播放生命周期事件:
canplay、play、pause、stop、ended。 - 支持播放进度回调:
onTimeUpdate(currentTime, duration)。 - 支持缓冲、跳转、错误事件:
waiting、seeking、seeked、error。
兼容性
| 平台 | 状态 | 说明 |
|---|---|---|
| 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.0 到 1.0 |
playbackRate |
number |
1.0 |
播放倍速,范围 0.25 到 4.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 端音频播放、暂停、停止、跳转、循环、音量、倍速和播放事件回调。

收藏人数:
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 1583
赞赏 0
下载 12467738
赞赏 1936
赞赏
京公网安备:11010802035340号