Javascript:
var blob;
var blob_url;
var stream;
var recorder;
var chunks;
var media = {
tag: 'audio',
type: 'audio/ogg',
ext: '.ogg',
gUM: {audio: true}
};
navigator.mediaDevices.getUserMedia(media.gUM).then(_stream =>
{
stream = _stream;
recorder = new MediaRecorder(stream);
recorder.ondataavailable = e =>
{
// push data to chunks
chunks.push(e.data);
// recording has been stopped
if(recorder.state == 'inactive')
{
// audio data available
blob = new Blob(chunks, {type: media.type });
blob_url = URL.createObjectURL(blob);
// send data to server
uploadfile_audio();
}
};
if(typeof(recorder)=='undefined')
{
alert('No microphone access');
return;
}
chunks = [];
recorder.start();
}
// when stop button is clicked
recorder.stop();
stream.getTracks().forEach( track => track.stop() );
由于iPad/iPhone不播放ogg文件,因此录制文件将使用FFMPEG转换为“mp3”。
此文件存储在服务器上。
这适用于Windows和MAC(Chrome和Safari),也适用于iPad(Safari),但
不
正确安装在iPhone上(Chrome/Safari)。版本:iphoneios15.1。
在iPhone上,录制文件仅为
0:01 min
长度。尺寸总是很小
17277
字节。
可能是什么问题?(我无法调试,因为我没有Mac。)
溪流被打断了吗?录音是否在1秒后停止?
更新1:
我猜现在FFMPEG无法正确处理传入文件。在Javascript中,哪一个可能设置了错误的mimetype
type: 'audio/ogg',
.是否需要另一种格式?
PHP
$mp3file = shell_exec("ffmpeg -i ".$file_locationtmp." -vn -ar 44100 -ac 2 -b:a 128k ".$file_locationtmp.".mp3");
我尝试使用
https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder/isTypeSupported
-然而,它表明iPhone上不支持模拟类型(Chrome和Safari都不支持)。
更新2:
我曾经
ffprobe
获取录制文件信息。上面说
Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 2234 kb/s (default)
更新3:
这似乎是FFMPEG的一个问题。看到我的新问题了吗
How to convert AAC/MP4A to MP3 using FFMPEG in full length? Audio file gets cut off after 1 second