Udało mi się użyć webkitGetUserMedia do przechwytywania wideo z mojej kamery internetowej na normalnej stronie internetowej, ale kiedy próbuję to zrobić w popup.html mojego rozszerzenia Chrome nic się nie dzieje. Nie dostaję żadnych błędów w uprawnieniach, po prostu nigdy nie wydaje mi się, żebym zapytał (inforbar nigdy nie zsuwa się w oknie podręcznym). Czy jest jakiś sposób obejścia tego? Wygląda na to, że nie mogę dać uprawnień w manifeście json.Jak przyznać uprawnienie webkitGetUserMedia w wyskakującym oknie rozszerzenia Chrome?
Odpowiedz
Rozszerzenia Chrome i WebRTC:
Chrome Extensions Manifest Permissions Documentation nie wspominając o dwóch uprawnień, w manifeście „VideoCapture” i „audioCapture”, więc nie jestem pewien, czy funkcja jest dostępna w Chrome Rozszerzenia czy nie, powinieneś spróbować zobaczyć, co się stanie, zanim przejdziesz dalej! ;)
Chrome Pakowane Aplikacje i WebRTC:
Jednak w aplikacjach pakietu Chrome, możliwe jest zarówno w piaskownicy i nie-stron piaskownicy! Aplikacje w pakiecie Chrome są bardzo podobne do rozszerzeń, więc w zależności od tego, co robisz, możesz zamiast tego utworzyć aplikację.
W Packaged Apps Manifest Permissions Documentation, w „videocapture” zezwolenia „i audioCapture” nie są wyraźnie wymienione, ale wykazano w przykładzie.
Mam aplikację w pakiecie, która używa strony HTML z piaskownicą do uruchamiania webkitGetUserMedia i działa doskonale. Oto czego potrzebujesz w swoim manifeście:
{
"name": "app name",
"version": "0.2",
"manifest_version": 2,
"minimum_chrome_version": "21",
"app": {
"background": {
"scripts": ["main.js"]
}
},
"icons": {
/* "128": "icon_128.png" */
},
"sandbox": {
"pages": ["call.htm" ]
},
"permissions" : [ "videoCapture", "audioCapture" ]
}
Następnie należy uruchomić okienko z chrome: // newtab strona jako aplikacja. W main.js powinien zawierać coś takiego:
// Chrome v24+
chrome.app.runtime.onLaunched.addListener(function() {
chrome.app.window.create('mainpage.html',
{width: 1190, height: 709});
});
I mainpage powinien być okienko. W mojej konfiguracji mam element iframe o nazwie call.htm w mainpage.html, a strona iframe jest piaskownicą, więc może wykonywać pewne niebezpieczne operacje, które można wykonać tylko jako normalną stronę internetową. Jednakże, jeśli uruchomić polecenie getUserMedia w nie-piaskownicy popup, mam uzyskać obiekt MediaStream z wezwaniem do webkitGetUserMedia:
navigator.webkitGetUserMedia({ audio: true, video: true },
function (stream) {
mediaStream = stream;
},
function (error) {
console.error("Error trying to get the stream:: " + error.message);
});
ja testowałem to na zewnątrz, i udało mi się uchwycić mój film w okienko .
Dzięki za szczegóły! Niestety nie działa z rozszerzeniami: "Pojawiły się ostrzeżenia podczas próby zainstalowania tego rozszerzenia: " VideoCapture "jest dozwolone tylko w aplikacjach pakowanych, a to jest rozszerzenie." Mam problem związany z chromem, więc mam nadzieję, że uda się to rozwiązać szybciej, niż później. – anonymouse
Nie ma dużej różnicy między aplikacją w pakiecie a rozszerzeniem. Możesz spróbować utworzyć akcję strony lub działanie przeglądarki, ale jako aplikację w pakiecie. Mogę się mylić, ale myślę, że wszystko, co chcesz zrobić w rozszerzeniu, jest dostępne za pośrednictwem api aplikacji pakietu. Instalują nawet w ten sam sposób, co rozszerzenia ... – jmort253
Zajmę się tym, dzięki. – anonymouse
To tani hack, ale jeśli utworzysz stronę z opcjami dla swojego rozszerzenia i wyślesz do niego wezwanie pod numer webkitGetUserMedia
, poprosi o pozwolenie dla wszystkich identyfikatorów URI dla tego rozszerzenia, po tym jak użytkownik zezwoli na to w opcjach strona, strona w tle będzie również miała pozwolenie na jej użycie.
To zadziałało dla mnie po wielu dniach szukania rozwiązania! tsbarnes skały! – kirley
To niesamowita sztuczka! – gregoiregentil
Działa! ale musisz poprosić użytkownika o dostęp do strony opcji: –
Jak sugeruje @tsbarnes istnieje hack ale dla Chrome aplikacje hack jest inny, zadzwonić navigator.webkitGetUserMedia z background.js
zamiast coś takiego:
navigator.webkitGetUserMedia({audio: true, video: true}, function() {
console.log('ok');
}, function(e) {
console.log('webcam not ok');
});
A potem nadal można uzyskać dostęp do audio/video z okna.html lub inny WebView
wyjściowa dla navigator.webkitGetUserMedia
w options.js
prac, ale trzeba otworzyć option.html
okienko w nowej karcie lub otrzymasz błąd więc w manifest.json
musisz napisać
"options_ui": {
"page": "options.html",
"chrome_style": true,
"open_in_tab": true
}
Hej, można zakładać twój plik manifest.json i kod, który znajduje się w twoim popup.html. Wierzę, że to działa, ale musiałbym zobaczyć, co próbujesz zrobić, aby ci pomóc. Próbuję zrobić to samo ze strony w tle, ale mogę to zrobić z wyskakującego okienka. – jmort253