代码之家  ›  专栏  ›  技术社区  ›  Avatar

在带有Safari和Chrome的iPhone上使用MediaRecorder录制音频,只需1秒?Mimetype和FFMPEG问题?

  •  0
  • Avatar  · 技术社区  · 4 年前

    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

    0 回复  |  直到 4 年前