recordInH5
H5 端录音与播放适配器,被 showRecord 内部调用。
基于 MediaRecorder + getUserMedia,需浏览器支持且用户授权麦克风。
前置依赖
typescript
interface RecordInH5Deps {
checkMediaDevices: () => boolean
getUserMedia: (constraints: { audio: boolean }) => Promise<MediaStream>
createMediaRecorder: (stream: MediaStream) => MediaRecorder
createObjectURL: (blob: Blob) => string
Blob: BlobConstructor
Audio: AudioConstructor
setTimeout: typeof setTimeout
warn: Console['warn']
error: Console['error']
}| 依赖 | 说明 |
|---|---|
checkMediaDevices | 检测 navigator.mediaDevices 是否可用 |
getUserMedia | 获取麦克风流 |
createMediaRecorder | 创建录制器 |
createObjectURL / Blob | 生成可播放的 blob URL |
Audio | 播放录音 |
setTimeout | 按 duration 自动停止 |
warn / error | 日志 |
recordInH5
函数签名
typescript
function recordInH5(options?: RecordOptions, deps: RecordInH5Deps): Promise<RecordResult>参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
options.duration | number | 否 | 自动停止时长(ms) |
deps | RecordInH5Deps | 是 | 环境依赖 |
返回值
| 类型 | 说明 |
|---|---|
Promise<RecordResult> | onstop 时 resolve;tempFilePath 为 blob object URL |
stopRecordInH5
函数签名
typescript
function stopRecordInH5(deps: RecordInH5Deps): void返回值
| 类型 | 说明 |
|---|---|
void | 若当前 MediaRecorder 处于 recording 则 stop() |
playRecordInH5
函数签名
typescript
function playRecordInH5(filePath: string, deps: RecordInH5Deps): Promise<void>参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
filePath | string | 是 | 音频 URL(通常为 blob URL) |
返回值
| 类型 | 说明 |
|---|---|
Promise<void> | Audio.onended resolve;错误 reject |
工作原理
- 不支持
mediaDevices时直接 reject。 - 获取音频流 → 创建
MediaRecorder→ 在ondataavailable收集 chunk →onstop合并为audio/webmBlob 并createObjectURL。 - 若指定
duration,定时自动stop()。 stopRecordInH5依赖模块级currentMediaRecorder;未先recordInH5时可能无效并warn。- 播放使用原生
AudioAPI,非 UniApp 音频上下文。