Przechwyć wideo z ekranu Androida


195

Zapomnij zrzuty ekranu, czy można przechwycić wideo uruchomionej aplikacji w Androidzie? Ukorzeniony lub niezrootowany, nie dbam o to, chcę przynajmniej 15 klatek na sekundę.

Aktualizacja: nie chcę żadnego zewnętrznego sprzętu. Chodzi o to, aby był idealnie przenośny, a każda klatka jest rejestrowana w systemie Android. Jeśli przekroczy granice aplikacji SDK, jestem skłonny przejść do modyfikacji na poziomie systemu operacyjnego, ale potrzebowałbym punktu wyjścia.


Całkowicie rozumiem, co się tutaj mówi. Wygląda na to, że emulator powinien mieć również funkcję przekierowania bieżącego ekranu do pliku wideo. Chciałbym taką funkcję, aby móc tworzyć pouczające filmy z moich gier i aplikacji.
Robert Massaioli

1
Czy masz na to rozwiązanie? jeśli tak, podziel się z nami. ja też muszę przechwycić wideo z ekranu Androida.
deepa

@deepa nope nie ma dobrego sposobu na zrobienie tego.
Taranfx


Czy można odczytać ze sprzętowego bufora ekranu?
mP.

Odpowiedzi:


243

Urządzenia z Androidem 4.4 (KitKat) i nowszymi mają narzędzie powłoki do nagrywania ekranu urządzenia z Androidem. Podłącz urządzenie w trybie programisty / debugowania z uruchomionym KitKat za pomocą narzędzia adb przez USB, a następnie wpisz następujące polecenie:

adb shell screenrecord /sdcard/movie.mp4
(Press Ctrl-C to stop)
adb pull /sdcard/movie.mp4

Nagrywanie ekranu jest ograniczone do maksymalnie 3 minut.

Odniesienie: https://developer.android.com/studio/command-line/adb.html#screenrecord


daje mi odpowiedź jak screenrecord: nie znaleziono adb jest przestarzałe dlaczego?
Trucizna

1
Wygląda na to, że Twój zestaw SDK systemu Android jest nieaktualny. Otwórz Menedżera SDK Androida i pobierz najnowsze narzędzia SDK.
Joe Fernandez

1
Szkoda, że ​​nie ma w tym dźwięku. Ale i tak niesamowite.
Martin Capodici,

1
Wystarczy dodać, że ta strona zawiera pakiet zawierający samodzielny skrypt adb + „ScreenRecord.bat”, który można kliknąć dwukrotnie, aby rozpocząć nagrywanie wideo z ekranu Androida. Skipser.com/p/2/p/record-screen-video-in -android.html
arunskrish

1
Pojawia się błąd OSTRZEŻENIE: linker: libsac3d.so ma przeniesienia tekstu. To marnuje pamięć i stanowi zagrożenie bezpieczeństwa. Proszę napraw. BŁĄD: nie można skonfigurować kodeka (err = -2147483648) OSTRZEŻENIE: błąd przy 1080x1920, ponawianie próby przy 720x1280
Pete_ch

17

Wiem, że jest to stare pytanie, ale ponieważ wydaje się, że nie ma na nie odpowiedzi. W aplikacji Android Market Screencast znajduje się aplikacja, która to akceptuje


29
Warto wspomnieć, że wymaga root, btw.
themightyjon

Nie działa na moim HTC One. Jednak działało dobrze na moim Galaxy S II.
MiloDC,

1
Ten nie wymaga rootowania. Na razie wydaje się obiecujące ... droid-at-screen.ribomation.com/installation
Fraggle

droid-at-screen nie robi wideo, @Fraggle. Tylko zrzuty ekranu. Może wykonywać ciągłe przechwytywanie, ale przy około 1 klatce na sekundę.
Michael Petrotta

Obecnie używam tego sourceforge.net/projects/ashot, aby po prostu wyświetlić ekran na moim komputerze Mac, a następnie używam moich standardowych narzędzi (SnapPro X) do przechwytywania filmu z tej części ekranu. Nie jestem pewien, jaka jest liczba klatek na sekundę, ale myślę, że wyższa niż 1 fps.
Fraggle

8

Tak, użyj telefonu z wyjściem wideo i użyj rejestratora wideo, aby przechwycić strumień

Zobacz ten artykuł http://graphics-geek.blogspot.com/2011/02/recording-animations-via-hdmi.html


Mogłem to zrobić, ale moim wymaganiem jest zrobienie wszystkiego w systemie Android. Chodzi o to, aby działało w ruchu.
Taranfx

1
Myślę, że nie masz szczęścia - wymagania dotyczące obsługi tak dużej ilości kodowania wideo w locie na urządzeniu mobilnym są poza zakresem tego, co większość fizycznie potrafi, system Android (AFAIK) nie ma interfejsu dostępu do strumienia , a nawet jeśli tak, jest to potencjalnie ogromna dziura w zabezpieczeniach, ponieważ aplikacja może szpiegować użytkownika.
Ollie C

4

@taranfx, bez dodatkowych informacji Zakładam, że skoro jesteś na StackOverFlow, masz zainstalowane Android Developer Tools. Jeśli tak, możesz uruchomić emulator, a następnie użyć jednego z wielu programów do przechwytywania ekranu na pulpicie, aby przechwycić działającą aplikację. Przepływ ekranu na komputerze Mac doskonale się do tego nadaje. Jestem pewien, że istnieje wiele dobrych programów do przechwytywania ekranu, jeśli korzystasz z systemu Windows lub platformy Nix i wiem, że istnieją również niektóre usługi online, ale nie mam żadnych linków ani nie korzystałem z nich. Oto link do dokumentu referencyjnego na temat konfigurowania i uruchamiania emulatora. Zestaw Android SDK zawiera emulator urządzenia mobilnego ...


2
Przepraszam? Poprosiłem o przechwytywanie wideo w Androidzie nie na Macu ani Emulatorze.
Taranfx

2
MWR sugeruje przechwycenie ekranu Androida za pomocą emulatora
Ollie C

3
Nie wszystkie apki można uruchomić w emulatorze.
RajV

4

Moją sugestią jest również użycie nagrywarki ekranu, takiej jak SMRecorder. Zamiast korzystać z emulatora, który jest powolny - szczególnie w przypadku gier i rzeczy, których chcesz nagrać, polecam korzystanie z maszyny wirtualnej VirtualBox z zainstalowanym systemem Android. Możesz podłączyć do niego debuger Dalvik i tam debugować swoją aplikację. Jeśli debuger za bardzo spowalnia aplikację, odłącz ją, aby nagrać wideo. Istnieje wiele linków wyjaśniających, jak skonfigurować maszynę wirtualną z systemem Android do debugowania. Uważam, że jest znacznie lepszy niż emulator. Teraz nie zajmuje się to przechwytywaniem ekranów bezpośrednio na urządzeniu, na wypadek gdyby aplikacja używała akcelerometru lub aparatu, który nie jest dostępny na komputerze. W tym celu użyłbym wspomnianej wyżej aplikacji Android Market.


dla dobrego pomiaru: spkaa.com/…
Reuben L.

3

Wydaje mi się, że screencast nie jest przyczyną niekompatybilności tegra 2, już go wypróbowałem, ale nie ma serwatki! Więc próbowałem użyć Z-ScreeNRecorder z rynku, zainstalowałem go na moim LG Optimus 2x, ale to tylko pusty ekran nagrania, próbowałem przez 5 minut. i tam dostaję 5min. pliku pustego ekranu o rozmiarze 6 MB ... więc nie ma sensu próbować, dopóki nie wypuszczą spokoju oprogramowania kompatybilnego z chipsetem tegra2!



1

Możliwe jest nagrywanie ekranu wideo bezpośrednio z telefonu lub tabletu, jeśli urządzenie jest zrootowane. Pracuję nad aplikacją SCR Screen Recorder . Według mojej najlepszej wiedzy jest to jedyna aplikacja obsługująca urządzenia Tegra (w tym Nexus 7) i Android 4.2. W tej chwili aplikacja nagrywa od 9 do 18 klatek na sekundę w zależności od urządzenia, ale pracuję nad tym, aby to poprawić. SCR Screen Recorder jest wciąż w fazie testów beta, więc zachęcamy do przetestowania go i przekazania opinii.


1
Podziel się swoimi badaniami, jak można to zrobić programowo w Androidzie, aby po cichu uchwycić viceo ekranu?
Ajay S

@Iwo Czy możesz podzielić się swoimi badaniami na temat gramatycznego nagrywania wideo na ekranie? Dziękuję Ci.
Srini Kandula


1

Jeśli tworzysz aplikacje do kamer wideo, dobrze będzie znać interfejs API do przechwytywania wideo:

http://developer.android.com/training/camera/videobasics.html

(powyższy link pokazuje tylko, w jaki sposób można wykonać nagrywanie wideo poprzez przesłanie intencyjne, a nie w jaki sposób odbywa się faktyczne nagrywanie)

https://www.linux.com/learn/tutorials/729988-android-app-development-how-to-capture-video

a jeśli chcesz sam napisać aplikację adnotacyjną „screenrecord”:

https://android.googlesource.com/platform/frameworks/av/+/android-cts-4.4_r1/cmds/screenrecord/screenrecord.cpp

A kluczowa akcja nagrywania odbywa się tutaj:

static status_t recordScreen(const char* fileName) {
    status_t err;

<...>

    // Configure, but do not start, muxer.
    sp<MediaMuxer> muxer = new MediaMuxer(fileName,
            MediaMuxer::OUTPUT_FORMAT_MPEG_4);
    if (gRotate) {
        muxer->setOrientationHint(90);
    }

    // Main encoder loop.
    err = runEncoder(encoder, muxer);
    if (err != NO_ERROR) {
        encoder->release();
        encoder.clear();

        return err;
    }

W przypadku telefonu Samsung istnieją dodatkowe ustawienia (hack „cam_mode”):

CamcorderProfile.QUALITY_HIGH rozdzielczość powoduje migotanie obrazu na zielono

Więcej przydatnych linków:

Jak mogę przechwycić nagranie wideo na Androida?


1

Nie wdrożyłem go, ale wciąż daję ci pomysł, aby to zrobić.

Najpierw pobierz kod, aby zrobić zrzut ekranu urządzenia z Androidem . I wywołaj tę samą funkcję do tworzenia obrazów po pewnym czasie. Dodaj, a następnie znajdź kod, aby utworzyć wideo z ramek / obrazów .

Edytować

zobacz ten link i zmodyfikuj go zgodnie z wymiarem ekranu. Najważniejsze jest, aby podzielić swoją pracę na kilka małych zadań, a następnie połączyć ją według potrzeb.

FFMPEG jest najlepszym sposobem na to. ale raz spróbowałem, ale jest to bardzo długa procedura. Najpierw musisz pobrać cygwin i bibliotekę Native C ++ i wiele innych rzeczy i połączyć się, a następnie możesz pracować na FFMPEG (jest on wbudowany w C ++).


Zrobiłem to samo, co sugerujesz, biorąc zdjęcia po pewnym czasie lub bez przerwy, mam widok przewijania, w którym robię przewijanie, aw innym wątku przechwytuję obszar ekranu, ale to samo przechwytywanie zwraca dla 6-7 zdjęć i następnie przechwytywany jest inny obszar. Potrzebuję kompletnej sekwencji zdjęć.
Farrakh Javed

1

Spójrz na Remote Managera . Ale wydaje mi się, że nie działa poprawnie z urządzeniami z dużym ekranem. Chociaż możesz wypróbować DEMO wcześniej.


Oba linki są martwe: /
rahulserver

@rahulserver, Google zablokował je, ponieważ użyłem Androidw nazwie programu. Wkrótce opublikuję je ponownie bez Androidsłowa.
Nolesh,

Dziękuję za odpowiedź. Desperacko potrzebuję, więc proszę o powiadomienie tutaj po opublikowaniu.
rahulserver

@rahulserver, opublikowałem je ponownie i poprawiłem linki.
Nolesh

1

Jeśli chcesz nagrać nawigację użytkownika, aby przetestować interfejs użytkownika i inne rzeczy, zalecamy użycie TestFairy

Pozwala wysłać apk do niektórych użytkowników testowych pocztą e-mail i zobaczyć wideo ze wszystkimi sesjami w aplikacji, a nawet awarie aplikacji i statystyki urządzenia.


1

W Androidzie Lollipop (5) została dodana nowa funkcja, która umożliwia przechwytywanie ekranu, co wyjaśniono tutaj

Oto przykład

Wywołaj startActivityForResult w ten sposób

startActivityForResult(mProjectionManager.getScreenCaptureIntent(), PERMISSION_CODE);

Następnie przechwyć wynik

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode != PERMISSION_CODE) {
        Log.e(TAG, "Unknown request code: " + requestCode);
        return;
    }
    if (resultCode != RESULT_OK) {
        Toast.makeText(this,
                "User denied screen sharing permission", Toast.LENGTH_SHORT).show();
        return;
    }
    mMediaProjection = mProjectionManager.getMediaProjection(resultCode, data);
    mVirtualDisplay = createVirtualDisplay();
}

0

To jest stare, ale co z ASC ?


Z powodu niezgodności z urządzeniami zasilanymi przez Tegra? .. tak .. mam Asus Transformer: C
Richard Cotrina

Wymaga uruchomienia „aktywatora” na PC / Mac, ale nie jest podpisany i nie wyjaśnia, co robi, ani jak ręcznie „aktywować”. Brzmi jak wektor bezpieczeństwa i wektor zagrożenia.
Chloe,

0

Jeśli korzystasz z komputera, możesz uruchomić My Phone Explorer na komputerze, MyPhoneExplorer Client na telefonie, ustawić przechwytywanie ekranu na ciągłe odświeżanie i użyć Wink, aby przechwycić niestandardowy prostokątny obszar ekranu nad oknem My Phone Explorer z własnym współczynnikiem przechwytywania. Następnie przekonwertuj do FLV w Wink, a następnie przekonwertuj z wideo Flash do MPG za pomocą WinFF .


Należy dodać, że „PC” oznacza tutaj jakiś system Microsoft Windows.
pierwsze

0

Nie korzystałem z aplikacji, ale widziałem Rec. jako sposób na zrobienie tego, ale musisz zrootować telefon.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.