php 实现 录音
PHP 实现录音功能
PHP 本身是服务器端语言,无法直接访问客户端的麦克风进行录音。需要通过前端技术(如 JavaScript)捕获音频,再通过 PHP 接收和处理音频数据。
前端录音实现
使用 JavaScript 的 MediaRecorder API 捕获音频:
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
const mediaRecorder = new MediaRecorder(stream);
const audioChunks = [];
mediaRecorder.addEventListener("dataavailable", event => {
audioChunks.push(event.data);
});
mediaRecorder.addEventListener("stop", () => {
const audioBlob = new Blob(audioChunks, { type: "audio/wav" });
uploadAudio(audioBlob);
});
mediaRecorder.start();
setTimeout(() => mediaRecorder.stop(), 5000); // 录制5秒
});
function uploadAudio(blob) {
const formData = new FormData();
formData.append("audio", blob, "recording.wav");
fetch("upload.php", {
method: "POST",
body: formData
});
}
PHP 接收音频文件
创建 upload.php 处理上传的音频文件:
<?php
if ($_FILES['audio']['error'] === UPLOAD_ERR_OK) {
$tmpName = $_FILES['audio']['tmp_name'];
$name = basename($_FILES['audio']['name']);
move_uploaded_file($tmpName, "uploads/$name");
echo "Audio uploaded successfully";
} else {
echo "Upload failed with error code: " . $_FILES['audio']['error'];
}
?>
注意事项
浏览器录音需要 HTTPS 环境,大多数浏览器在非安全环境下会阻止麦克风访问。
用户必须明确授权麦克风访问权限,浏览器会显示权限请求对话框。
音频格式默认为浏览器决定的格式,常见有 audio/webm 或 audio/ogg。如需 WAV 格式,可能需要使用音频处理库进行转换。
服务器端音频处理
PHP 可以结合以下工具处理音频:
- 使用
exec()调用 FFmpeg 进行格式转换 - 使用音频处理库如 PHP-FFMpeg
- 直接存储音频文件供后续使用
完整解决方案
对于生产环境,建议考虑成熟的录音库如:
- RecordRTC
- Wavesurfer.js
- Web Audio API
这些库提供更完善的录音控制、可视化等功能,可以与 PHP 后端配合使用。







