录制时的 RecordRTC 文件大小
RecordRTC file size on recording
有什么方法可以获取录制文件的大小吗?
那么,我可以在达到允许的最大尺寸时停止录制吗?
目前只有停止录制的方法,使用停止按钮停止并使用 "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 在他的 repiository on issue 中回答了这个问题。好吧,这不是问题,所以我不会抬头看那里。无论如何,如果有人正在寻找答案,这可能会有所帮助。
(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);
})();
您可以在下面的 link 中找到答案:
https://github.com/muaz-khan/RecordRTC/issues/301
好吧,这个网站也可以挂了.. ;)
无论如何,我们希望不会。让我提供完整的代码。解释不是我最好的部分。工作示例是最好的解释。
在录制之前,MediaStreamRecorder 应该作为录制器类型。
TimeSlice 参数应该通过。不太确定这是做什么的。但我想,这个参数给了库一个信息,blob 应该每 1000 毫秒切片一次。然后每一秒。
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();
有什么方法可以获取录制文件的大小吗? 那么,我可以在达到允许的最大尺寸时停止录制吗?
目前只有停止录制的方法,使用停止按钮停止并使用 "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 在他的 repiository on issue 中回答了这个问题。好吧,这不是问题,所以我不会抬头看那里。无论如何,如果有人正在寻找答案,这可能会有所帮助。
(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);
})();
您可以在下面的 link 中找到答案:
https://github.com/muaz-khan/RecordRTC/issues/301
好吧,这个网站也可以挂了.. ;)
无论如何,我们希望不会。让我提供完整的代码。解释不是我最好的部分。工作示例是最好的解释。
在录制之前,MediaStreamRecorder 应该作为录制器类型。 TimeSlice 参数应该通过。不太确定这是做什么的。但我想,这个参数给了库一个信息,blob 应该每 1000 毫秒切片一次。然后每一秒。
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();