audio - 录制时的RTC文件大小

标签 audio recordrtc

有什么方法可以在录制时获取文件大小?
因此,当记录达到允许的最大大小时,我可以停止记录吗?

当前只有停止记录的方法,方法是使用“停止”按钮停止记录,并使用“setRecordingDuration()”设置持续时间:

function successCallback(stream) {
    // RecordRTC usage goes here
    var options = {
        mimeType: 'audio/mp3', // or video/webm\;codecs=h264 or video/webm\;codecs=vp9
        //                audioBitsPerSecond: 128000,
        //                bufferSize: parseInt($(".media-bitrates").val()),
        sampleRate: parseInt($(".media-framerates").val()),
        //                videoBitsPerSecond: parseInt($(".media-bitrates").val()),
        bitsPerSecond: parseInt($(".media-bitrates").val()),
        // bitsPerSecond: 128000 // if this line is provided, skip above two
    };
    varStream = stream;
    recordRTC = RecordRTC(varStream, options);
    audio.srcObject = varStream;
    varStream.stop = function () {
        this.getAudioTracks().forEach(function (track) {
            track.stop();
        });
    };
}

从编码中可以看到,我只能获得停止录制时的大小,因为在录制过程中无法使用blob。

最佳答案

我找到了自己的答案。无论如何,穆阿兹汗(Muaz Khan)在有争议的答复中回答了这个问题。好吧,这不是问题,所以我不在那看。无论如何,如果有人在寻找答案,这可能会有所帮助。

(function looper() {
if (!recorder) {
    return;
}
var internal = recorder.getInternalRecorder();
if (internal && internal.getArrayOfBlobs) {
    var blob = new Blob(internal.getArrayOfBlobs(), {
        type: 'video/webm'
    });

    // -------------------------------------------------------------
    if (blob.size > 100 * 1000) { // if blob is greater than 100 MB
        recorder.stopRecording(callback); // stop recording here
        return;
    }
    // -------------------------------------------------------------

    document.querySelector('h1').innerHTML = 'Recording length: ' + bytesToSize(blob.size);
}
setTimeout(looper, 1000);
})();

您可以在以下链接中找到答案:

https://github.com/muaz-khan/RecordRTC/issues/301

好吧,这个站点也可以关闭。

无论如何,我们希望不要。让我提供完整的代码。解释不是我最好的部分。工作示例是最好的解释。

记录之前, MediaStreamRecorder 应该作为记录器类型。
应该传递TimeSlice 参数。不太确定该怎么做。但是我猜想,此参数为Library提供了一个信息,即应该每1000毫秒对Blob进行 slice 。然后每一秒钟。
    recorder = RecordRTC(camera, {
        recorderType: MediaStreamRecorder,
        mimeType: 'video/webm',
        timeSlice: 1000 // pass this parameter
    });

然后将这段代码放在后面。该循环功能每1000毫秒运行一次。并检查当前的Blob大小。您可以检查大小,向用户显示或停止录制达到允许大小的记录。您应该检查服务器上的文件大小。您不能依赖客户端脚本。
        (function looper() {
        if(!recorder) {
            return;
        }
        var internal = recorder.getInternalRecorder();
        if(internal && internal.getArrayOfBlobs) {
            var blob = new Blob(internal.getArrayOfBlobs(), {
                type: 'video/webm'
            });
            document.querySelector('h1').innerHTML = 'Recording length: ' + bytesToSize(blob.size);
        }
        setTimeout(looper, 1000);
    })();

最后一部分。
recorder.startRecording();

关于audio - 录制时的RTC文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49598996/

相关文章:

audio - 混合多个声音片段

android - 获取有关音频的信息,在另一个应用程序中播放

node.js - 将捕获的视频保存到Electron中的文件

ffmpeg - 是否可以在没有用户干预的情况下在 recordrtc 中录制窗口?

azure - 如果网站在 AWS EC2 和 Azure VM 上运行,Videojs 会记录不访问摄像头/麦克风或共享屏幕的情况

javascript - 无法在 recordRTC 中记录更高的帧速率

swift - 访问 AVAudioPCMBuffer 的 Float 样本进行处理

android - 匹配两个音频文件

angular - 在 Angular 9 中记录整个桌面

iphone - 我可以在 iOS 上使用 AV Foundation Framework 流式传输 .mp3 链接吗?