Capturar vídeo da tela do Android

195

Esqueça as capturas de tela, é possível capturar um vídeo do aplicativo em execução no Android? Enraizado ou sem raízes, não me importo, quero pelo menos 15fps.

Atualização: não quero nenhum hardware externo. A intenção é torná-lo perfeitamente portátil e todos os quadros são capturados no sistema operacional Android. Se ele ultrapassar os limites do aplicativo sdk, estou disposto a ir para as modificações no nível do SO, mas precisaria de um ponto de partida.

Taranfx
fonte
Eu vejo completamente o que está sendo dito aqui. Parece que o emulador também deve ter o recurso de redirecionar a tela atual para um arquivo de vídeo. Adoraria um recurso como esse para poder fazer vídeos informativos dos meus jogos e aplicativos.
Robert Massaioli 27/05
1
Você conseguiu solução para isso? Se sim, por favor, compartilhe conosco. Eu também tenho que caputre vídeo da tela do Android.
Deepa
@deepa não, não há uma boa maneira de fazer isso.
Taranfx
Verifique este projeto: sourceforge.net/projects/ashot
Nirmal Patel
É possível ler a partir do buffer da tela de hardware?
mP.

Respostas:

243

Os dispositivos Android 4.4 (KitKat) e superiores têm um utilitário de shell para gravar a tela do dispositivo Android. Conecte um dispositivo no modo desenvolvedor / depuração executando o KitKat com o utilitário adb por USB e digite o seguinte:

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

A gravação da tela é limitada a no máximo 3 minutos.

Referência: https://developer.android.com/studio/command-line/adb.html#screenrecord

Joe Fernandez
fonte
está me dando uma resposta como screenrecord: não encontrado adb está desatualizado por quê?
Veneno
1
Parece que seu SDK do Android está desatualizado. Abra o Android SDK Manager e baixe as ferramentas mais recentes do SDK.
Joe Fernandez
1
Pena que não há áudio com isso. Mas incrível, no entanto.
Martin Capodici
1
Apenas para adicionar, esta página possui um pacote com um script adb + independente "ScreenRecord.bat" que pode ser clicado duas vezes para começar a gravar o vídeo da tela do Android. Skipser.com/p/2/p/record-screen-video-in -android.html
arunskrish
1
Eu recebo o erro AVISO: linker: libsac3d.so possui realocações de texto. Isso está desperdiçando memória e é um risco de segurança. Por favor conserte. Erro: não é possível configurar o codec (err = -2147483648) AVISO: falha em 1080x1920, repetindo novamente em 720x1280
Pete_ch
17

Sei que essa é uma pergunta antiga, mas, como parece não ter resposta ao gosto dos OPs. Há um aplicativo que aceita isso no link Screencast do Android Market

Zaphoid
fonte
29
Vale ressaltar que requer raiz, btw.
precisa saber é o seguinte
Não funciona no meu HTC One. Funcionou bem no meu Galaxy S II, no entanto.
MiloDC
1
Este não requer raiz. Parece promissor até agora ... droid-at-screen.ribomation.com/installation
Fraggle
o dróide na tela não faz vídeo, @Fraggle. Apenas capturas de tela. Pode fazer captura contínua, mas a cerca de 1 qps.
precisa
Atualmente, estou usando este sourceforge.net/projects/ashot para apenas mostrar a tela no meu mac e, em seguida, usando minhas ferramentas padrão (SnapPro X) para capturar um filme dessa parte da tela. Não tenho certeza qual é a taxa de quadros no ashot, mas acho que é maior que 1 fps.
Fraggle
8

Sim, use um telefone com saída de vídeo e use um gravador de vídeo para capturar o fluxo

Consulte este artigo http://graphics-geek.blogspot.com/2011/02/recording-animations-via-hdmi.html

Ollie C
fonte
Isso é o que eu poderia ter feito, mas minha exigência é fazer tudo dentro do Android. Fazê-lo funcionar em movimento é a intenção.
Taranfx
1
Acho que você está sem sorte - os requisitos para lidar com tanta codificação de vídeo em tempo real, em um dispositivo móvel, estão fora do escopo do que a maioria é fisicamente capaz, o Android (AFAIK) não tem interface para acessar um fluxo , e mesmo que isso ocorra, é uma falha de segurança potencialmente enorme, pois um aplicativo pode espionar o usuário.
Ollie C
4

@taranfx, sem mais informações, suponho que você esteja no StackOverFlow e tenha as Ferramentas para Desenvolvedor Android instaladas. Nesse caso, você pode executar o emulador e usar um dos muitos programas de captura de tela da área de trabalho para capturar seu aplicativo em execução. O Screenflow no Mac funciona muito bem para fazer isso. Tenho certeza de que existem muitos bons programas de captura de tela se você estiver no Windows ou em uma plataforma Nix e também sei que existem alguns serviços online, mas não tenho links nem os usei. Aqui está um link para o documento de referência sobre como configurar e executar o emulador. O SDK do Android inclui um emulador de dispositivo móvel ...

MWR
fonte
2
Desculpe? Eu pedi a captura de vídeo no Android, não no Mac ou Emulator.
Taranfx 22/03
2
MWR está sugerindo a captura da tela do Android por meio do emulador
Ollie C
3
Nem todos os aps podem ser executados no emulador.
RajV 31/01
4

Minha sugestão é também usar um gravador de tela, como o SMRecorder. Em vez de usar o emulador, que é lento - especialmente para jogos e coisas das quais você gostaria de um vídeo, eu recomendo usar uma VM do VirtualBox, com o Android instalado. Você pode conectar o depurador Dalvik a ele e depurar seu aplicativo lá. Se o depurador diminuir a velocidade do seu aplicativo, desconecte-o para gravar o vídeo. Existem muitos links explicando como configurar a VM do Android para depuração. Acho muito melhor que o emulador. Agora, isso não permite capturar telas diretamente no dispositivo, caso o aplicativo use o acelerômetro ou a câmera que não está disponível no PC. Para isso, eu usaria o aplicativo Android Market mencionado acima.

jdbertron
fonte
para uma boa medida: spkaa.com/…
Reuben L.
3

Eu acho que o screencast não é causa de incompatibilidade do tegra 2, eu já tentei, mas sem soro! Então tentei usar o Z-ScreeNRecorder do mercado, instalei no meu LG Optimus 2x, mas ele é a única tela em branco do registro, tentei por 5 minutos. e aí eu recebo 5min. de arquivo de tela em branco de tamanho de 6 MB ... então não faz sentido tentar até que eles liberem um pouco de software compatível com o chipset tegra2!

Nenad
fonte
1

É possível gravar o vídeo da tela diretamente do seu telefone ou tablet se o seu dispositivo estiver enraizado. Estou trabalhando no aplicativo SCR Screen Recorder . Que eu saiba, este é o único aplicativo compatível com dispositivos Tegra (incluindo o Nexus 7) e o Android 4.2. No momento, o aplicativo registra entre 9 e 18 fps, dependendo do dispositivo, mas estou trabalhando para melhorar isso. O SCR Screen Recorder ainda está em fase de teste beta, portanto, fique à vontade para testá-lo e fornecer feedback.

Iwo Banas
fonte
1
Compartilhe sua pesquisa como isso pode ser feito programaticamente no android para capturar o vice-verso da tela silenciosamente?
precisa
@Iwo Você pode compartilhar sua pesquisa sobre como gravar vídeo em tela gramaticalmente? Obrigado.
Srini Kandula
1

O AirPlay Mirroring and Screen Recording está agora em CyanogenMod with Mirror APK (Beta).

Oli
fonte
1

Se você estiver desenvolvendo aplicativos de câmera de vídeo, será bom conhecer a API a ser usada na captura de vídeo:

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

(o link acima mostra apenas como a gravação de vídeo pode ser feita por meio do envio de intenção, não como a gravação real é feita)

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

e se você quiser escrever o aplicativo adb "screenrecord":

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

E a principal ação de gravação é feita aqui:

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;
    }

Para o telefone Samsung, há configurações adicionais (hack 'cam_mode'):

A resolução CamcorderProfile.QUALITY_HIGH produz vídeos tremeluzentes em verde

Links mais úteis:

Como posso capturar uma gravação de vídeo no Android?

Peter Teoh
fonte
1

Eu não o implementei, mas ainda estou lhe dando uma idéia para fazer isso.

Primeiro, obtenha o código para tirar uma captura de tela do dispositivo Android . E chame a mesma função para criar imagens após um intervalo de tempo. Adicione e encontre o código para criar vídeo a partir de quadros / imagens .

Editar

veja também este link e modifique-o de acordo com a sua dimensão de tela. O principal é dividir seu trabalho em várias pequenas tarefas e depois combiná-lo conforme sua necessidade.

O FFMPEG é a melhor maneira de fazer isso. mas uma vez que eu tentei, mas é um procedimento muito longo. Primeiro você precisa baixar a biblioteca cygwin e Native C ++ e muitas outras coisas e conectar-se; então, você poderá trabalhar no FFMPEG (ele é construído em C ++).

Zar E Ahmer
fonte
Fiz o mesmo que você sugeriu ao tirar fotos após um intervalo de tempo ou sem intervalo. Tenho uma exibição de rolagem na qual estou rolando e em outro segmento estou capturando a área da tela, mas uma mesma captura é retornada para 6-7 imagens. e que outra área diferente seja capturada. Eu preciso de uma sequência completa de imagens.
Farrakh Javed
1

Dê uma olhada no Remote Manager . Mas parece-me que não funciona corretamente com dispositivos com tela grande. Embora você possa tentar DEMO antes.

Nolesh
fonte
Ambos os links estão mortos: /
rahulserver 4/14
@rahulserver, o Google os bloqueou, porque eu usei Androidno nome do programa. Em breve os publicarei novamente sem Androidpalavras.
Nolesh
obrigado por responder. Estou desesperadamente em necessidade. Então os pls notificam aqui uma vez que você publicou.
Rahulserver #
@rahulserver, publiquei-os novamente e corrigi os links.
Nolesh
1

Se você deseja gravar a navegação do usuário para testar a interface do usuário e outras coisas, recomendo que você use o TestFairy

Ele permite que você envie o apk para alguns usuários de teste por e-mail e assista a um vídeo com todas as sessões do aplicativo, e até o aplicativo trava e as estatísticas do dispositivo.

alerta vermelho
fonte
1

No Android Lollipop (5) , foi adicionado um novo recurso que permite a captura de tela, explicada aqui

Aqui está um exemplo

Chame startActivityForResult como este

startActivityForResult(mProjectionManager.getScreenCaptureIntent(), PERMISSION_CODE);

Então capture o resultado

@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();
}
rogermushroom
fonte
0

Isso é antigo, mas e o ASC ?

Richard Cotrina
fonte
Devido à incompatibilidade com dispositivos equipados com Tegra? .. sim .. eu tenho um Asus Transformer: C
Richard Cotrina
Requer a execução de um 'ativador' no PC / Mac, mas não está assinado e não explica o que faz nem como fazer a 'ativação' manualmente. Parece um vetor de risco e ameaça à segurança.
Chloe
0

Se você estiver em um PC, poderá executar o My Phone Explorer no PC, o MyPhoneExplorer Client no telefone, definir a captura de tela para atualizar continuamente e usar o Wink para capturar uma área retangular personalizada da tela na janela do My Phone Explorer com sua própria taxa de captura. Em seguida, converta para um FLV no Wink, depois converta de vídeo Flash para MPG com WinFF .

Chloe
fonte
Deve-se acrescentar que "PC" aqui significa algum tipo de Microsoft Windows.
rwst
0

Eu não usei o aplicativo, mas já vi o Rec. referenciado como uma maneira de fazer isso, mas você precisa fazer root no telefone.

Rich Elswick
fonte