【问题标题】:Audio of the tab disappear while capturing tab using TabCapture API使用 TabCapture API 捕获选项卡时选项卡的音频消失
【发布时间】:2015-03-27 00:33:50
【问题描述】:

我正在测试一个 Tab Capture API 来录制包含文本到语音 Flash 对象的网页的音频。录制网页时,播放音频消失,但在录制的文件中听起来不错。

我正在使用以下 MediaStream 约束来录制视频和音频。

var MediaStreamConstraint = {
            audio: true, 
            video: true, 
            videoConstraints: {
                mandatory: {
                    chromeMediaSource: 'tab',
                        minWidth: 640,
                        maxWidth: 640,
                        minHeight: 420,
                        maxHeight: 420

                }
            }
};

我是在流约束中遗漏了什么,还是有其他解决方案?

【问题讨论】:

  • 遇到同样的问题...你解决了吗?

标签: google-chrome-extension audio-recording


【解决方案1】:

正如其他人所说,在回调中播放来自捕获的 MediaStream 的音频:

chrome.tabCapture.capture(MediaStreamConstraint, gotStream);

function gotStream(stream) {
  window.audio = document.createElement("audio");
  window.audio.src = window.URL.createObjectURL(stream);
  window.audio.play()
}

【讨论】:

  • CreateObjectURL 不再接受媒体流对象并导致TypeError: Failed to execute 'createObjectURL' on 'URL': No function was found that matched the signature provided. 我们应该改用audio.srcObject = stream
【解决方案2】:

记住在清单文件中授予权限

"permissions": [
    "tabCapture",
    "activeTab",
    ...
  ],  

background.js 应该是这样的:

var recorder = new MRecordRTC();
function handleCapture(stream) {
recorder.addStream(stream);
recorder.mediaType = { video: true, audio: true };
recorder.startRecording();
}

var MediaStreamConstraint = {
audio: true,
video: true,
videoConstraints: {
    mandatory: {
        chromeMediaSource: 'tab',
        minWidth: 640,
        maxWidth: 640,
        minHeight: 420,
        maxHeight: 420
    }
}
};

function captureCurrentTab() {
chrome.tabCapture.capture(MediaStreamConstraint, handleCapture);
}

function stopCapturing() {
// stops the recording and save audio and video     
}

如果不是这样,请您附上更多相关代码,因为您附上的代码对我来说很好看。

【讨论】:

  • 感谢 gui47 的回答,我在清单文件中使用相同的代码来捕获具有完全相同权限的音频和视频,但问题是一旦捕获方法被称为实际播放应用程序的音频消失了..因为有人静音了音频
  • 我得到streamnull 知道这可能会发生吗?如上所述,所有权限都在那里
  • @aziz86,你能解决这个问题吗?
【解决方案3】:

在后台脚本的 handleCapture 函数中,试试这个以继续播放:

var audio = new Audio(window.URL.createObjectURL(stream));
audio.play();

【讨论】:

    【解决方案4】:

    只添加下一行

    window.audio = document.createElement("audio");
    window.audio.src = window.URL.createObjectURL(stream);
    window.audio.play()
    

    【讨论】:

    • 只添加这些行肯定不会帮助任何人(stream 是什么?)
    • 流是对象MediaStream
    • 从哪里来的?同样,您说“仅添加下一行”,它们本身只会产生错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多