Android: Jak korzystać z kamery internetowej w emulatorze?

84

Podłączam kamerę internetową do mojego emulatora, ustawiając przednią kamerę na „webcam0” w menedżerze AVD. Po uruchomieniu aplikacji aparatu emulatora pojawia się błąd

CameraService::connect X (pid 702) rejected (invalid cameraId 0).

Oto odpowiednia część kodu źródłowego Androida:

sp<ICamera> CameraService::connect(
    const sp<ICameraClient>& cameraClient, int cameraId) {

    int callingPid = getCallingPid();

    [...]

    if (cameraId < 0 || cameraId >= mNumberOfCameras) {
        LOGE("CameraService::connect X (pid %d) rejected (invalid cameraId %d).",
            callingPid, cameraId);
        return NULL;
    }

    [...]
}

Kamera internetowa została poprawnie przypisana do identyfikatora 0, ponieważ jest tylko 1 kamera. Jednak mNumberOfCamerasprzypuszczalnie nadal wynosi 0. Oznacza to, że kamera jest rejestrowana przez emulator, ale nie zadał sobie trudu, aby zaktualizować liczbę podłączonych kamer.

Jak mogę podłączyć kamerę internetową, żeby była poprawnie rozpoznawana przez emulator?

Edycja: polecenie emulator -webcam-list -avd <name of your AVD>w \android-sdks\toolsdaje wynik:

List of web cameras connected to the computer:
Camera `webcam0` is connected to device `AndroidEmulatorVC0` on channel 0 using pixel format `BGR4`

Kiedy uruchamiam kamerę internetową z menedżera AVD Eclipse lub używam go emulator -camera-front webcam0 -avd <name of your AVD>, pojawia się następujące okno:

wprowadź opis obrazu tutaj

Edycja 2: Wygląda na to, że jest to błąd w emulatorze. Sugerowana odpowiedź podpowiada, co zrobić, aby ustawić kamerę, ale nie rozwiązuje problemu. Ostatecznie rozwiązałem to używając laptopa z wbudowaną kamerą internetową. Być może zadziałałaby również inna kamera internetowa USB.

1 ''
źródło

Odpowiedzi:

113

AKTUALIZACJA

W Android Studio AVD:

  1. Otwórz Menedżera AVD:

Menu AVD

  1. Dodaj / edytuj AVD:

Specjalny pasek AVD

  1. Kliknij Ustawienia zaawansowane u dołu ekranu:

Zaawansowane ustawienia AVD

  1. Ustaw wybrany aparat jako aparat przedni / tylny:

Ustawienia kamery AVD

nurnachman
źródło
3
Nie należy ustawiać przedniego i tylnego aparatu na to samo źródło.
Chris River,
1
@ChrisRiver Dlaczego nie? To nie powinno mieć znaczenia.
DaveTheMinion
2
Fajne! Ale jak zmienić kamerę internetową, jeśli mamy więcej niż jedną?
walkmn
2
Po uruchomieniu aparatu natychmiast zawiesza się symulator. Jestem na Macu.
Milind Mevada
2
@walkmn Możesz użyć alternatywnej kamery przez CLI:cd "${ANDROID_HOME}/tools"; ./emulator -avd $VIRTUAL_DEVICE_AVD_ID -camera-back webcam1
steamer25
42

Wykonaj poniższe czynności w Eclipse.

  1. Idź do -> AVD Manager
  2. Utwórz / edytuj AVD.
  3. Sprzęt> Nowy:
  4. Konfiguruje kamerę skierowaną do tyłu
  5. Kliknij wartość właściwości i wybierz = "webcam0".
  6. Po wykonaniu wszystkich powyższych czynności kamera internetowa powinna zostać podłączona. Jeśli tak nie jest, musisz sprawdzić sterowniki kamery internetowej.

Sprawdź tutaj, aby uzyskać więcej informacji: Jak używać kamery internetowej w emulatorze Androida do przechwytywania obrazu na żywo?

wprowadź opis obrazu tutaj

Lalith B.
źródło
2
Myślę, że to starszy interfejs użytkownika menedżera AVD. Kiedyś miałem okno, które wyglądało tak, ale teraz mogę wybrać przednią i tylną kamerę z dedykowanych rozwijanych menu.
1 ''
Używam Maca, więc eclipse wygląda tak w systemie Mac OSX. Więc okna i menu mogą być inne w systemie Windows i systemie Linux.
Lalith B
Pamiętaj, że musisz również wybrać poprawny interfejs API. Możesz wybrać emulację dla API 10, ale to nie zadziała. Myślę, że API 16 było pierwszym, który naprawdę to obsługiwał.
Nux
Nie, emulacja jest oparta na ADT, a nie na Androidzie API. Myślę, że ADT obsługuje emulację od 19 lat.
Lalith B
W Android Studio, w kroku 3, wybierz przycisk „Pokaż ustawienia zaawansowane”, aby wyświetlić opcje aparatu.
eldes
7

Proponuję zapoznać się z tym wysoko ocenianym postem na blogu, w którym udało się znaleźć rozwiązanie problemu:

http://www.inter-fuser.com/2009/09/live-camera-preview-in-android-emulator.html

Jego kod jest oparty na aktualnych interfejsach API systemu Android i powinien działać w Twoim przypadku, biorąc pod uwagę, że używasz najnowszego interfejsu API systemu Android.

Halim Qarroum
źródło
Widziałem to, ale założyłem, że jest nieaktualne. Użyję go, jeśli nie ma innego wyjścia. Jednak menedżer AVD pozwala określić kamerę internetową jako kamerę przednią lub tylną, więc zakładam, że emulator ma natywną możliwość używania kamery internetowej jako wejścia.
1 ''
Co przy okazji emulator -webcam-list -avd <name of your AVD>mówi polecenie? Jeśli zmieniłeś właściwości AVD, aby ustawić kamerę internetową na webcam0, spróbuj uruchomić ją za pomocąemulator -camera-front webcam0 -avd <name of your AVD>
Halim Qarroum
3

Sugerowałbym sprawdzenie sterowników i zaktualizowanie ich w razie potrzeby.

Tanuj Nayak
źródło
2
Mój sterownik, mimo że ma 6 lat, jest podobno aktualny i nie mogę znaleźć nowszej wersji w Internecie. Mogę spróbować zmienić kamery, jeśli znajdę inną.
1 ''