繁体   English   中英

Chrome扩展程序 - 从背景到上下文脚本的Blob

[英]Chrome Extension - Blob from Background to Context script

我有一个chrome扩展程序,试图记录活动选项卡并将blob保存到本地存储。

根据用户发出的命令调用chrome.tabCapture ,5秒后,记录停止并从记录的块中生成新的blob,继续下载文件。

下载文件时,文件为0字节,当之前放置断点时,检查blob大于0字节。 最终尝试将blob返回到sendResponse回调中的上下文脚本。

好奇,如果在下载或重新上传到上下文脚本时,blob为空的原因是什么。

请访问以下文档: https//developers.google.com/web/updates/2016/01/mediarecorder

background.js

chrome.tabCapture.capture(captureOptions, function (stream) {
    if (!stream)
        return;
    var recordedChunks = [];
    var options = {
        mimeType: 'video/webm; codecs=vp9',
    };

    var mediaRecorder = new MediaRecorder(stream, options);
    mediaRecorder.ondataavailable = function (event) {
        if (event.data.size > 0) {
            recordedChunks.push(event.data);
        }
    }
    mediaRecorder.start();
    setTimeout(function(){
        stopRecording(stream, mediaRecorder, recordedChunks);
    }, 5000);
})


 var stopRecording = function (stream, mediaRecorder, recordedChunks) {
   mediaRecorder.stop();
   var blob = new Blob(recordedChunks, {
       type: 'video/webm'
   });
   var url = URL.createObjectURL(blob);
   var a = document.createElement('a');
   document.body.appendChild(a);
   a.style = 'display: none';
   a.href = url;
   a.download = 'test.webm';
   a.click();
   URL.revokeObjectURL(url);
   stream.getVideoTracks()[0].stop();
 };

我通过在ondataavailable回调中下载文件来实现ondataavailable

background.js:

chrome.tabCapture.capture(captureOptions, function (stream) {
    if (!stream)
        return;
    var recordedChunks = [];
    var options = {
        mimeType: 'video/webm; codecs=vp9',
    };

    var mediaRecorder = new MediaRecorder(stream, options);
    mediaRecorder.ondataavailable = function (event) {
        if (event.data.size > 0) {
          var url = URL.createObjectURL(event.data);
          var a = document.createElement('a');
          document.body.appendChild(a);
          a.style = 'display: none';
          a.href = url;
          a.download = 'test.webm';
          a.click();
          URL.revokeObjectURL(url);
        }
    }
    mediaRecorder.start();
    setTimeout(function(){
        stopRecording(stream, mediaRecorder, recordedChunks);
    }, 5000);
})


 var stopRecording = function (stream, mediaRecorder, recordedChunks) {
   mediaRecorder.stop();
   stream.getVideoTracks()[0].stop();
 };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM