«Запрошенное устройство не найдено» при использовании chrome.tabCapture.capture - PullRequest
0 голосов
/ 11 декабря 2018

Проблема

Я хочу автоматически захватить аудиовыход с вкладки.В настоящее время я думаю об этом, используя 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"
    ]
}
...