2012-10-25 13 views
12

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?

+0

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

Odpowiedz

6

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 .

+0

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

+1

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

+0

Zajmę się tym, dzięki. – anonymouse

16

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.

+1

To zadziałało dla mnie po wielu dniach szukania rozwiązania! tsbarnes skały! – kirley

+0

To niesamowita sztuczka! – gregoiregentil

+1

Działa! ale musisz poprosić użytkownika o dostęp do strony opcji: –

1

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

0

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 
    }