Проблема
Я хочу автоматически захватить аудиовыход с вкладки.В настоящее время я думаю об этом, используя Puppeteer (headful), загружая расширение, которое использует chrome.tabCapture.capture
.Из моего сценария Puppeteer я оцениваю код в расширениях background.js
, чтобы начать захват вкладок.Однако chrome.runtime.lastError.message
имеет значение Requested device not found
.
Расширение работает как положено вне Puppeteer и в браузере Chrome.
Есть идеи, почему я получаю Requested device not found
?
Как выглядит расширение background.js
?
function startRecording() {
chrome.tabCapture.capture(options, stream => {
if (stream === null) {
console.log(`Last Error: ${chrome.runtime.lastError.message}`);
return;
}
try {
const recorder = new MediaRecorder(stream);
} catch (err) {
console.log(err.message);
}
recorder.addEventListener('dataavailable', event => {
const { data: blob, timecode } = event;
console.log(`${timecode}: ${blob}`);
});
const timeslice = 60 * 1000;
recorder.start(timeslice);
});
}
Как выглядит соответствующая часть вашего сценария Puppeteer?
...
const targets = await browser.targets();
const backgroundPageTarget = targets.find(target => target.type() === 'background_page' && target.url().startsWith('chrome-extension://abcde/'));
const backgroundPage = await backgroundPageTarget.page();
const test = await backgroundPage.evaluate(() => {
startRecording();
return Promise.resolve(42);
});
...
Манифест расширения:
{
"name": "Test",
"description": "",
"version": "1.0",
"icons": {
"128": "icon.png"
},
"manifest_version": 2,
"browser_action": {
"default_popup": "test.html"
},
"background": {
"scripts": [
"background.js"
],
"persistent": true
},
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"all_frames": false,
"js": [
"contentScript.js"
]
}
],
"permissions": [
"activeTab",
"tabs",
"tabCapture",
"storage"
]
}