Tela de registro de vídeo da atividade atual do Android

É possível gravair o vídeo de canvas da atividade atual executando da mesma atividade?
Eu sei como tirair uma captura de canvas da atividade atual, mas não tenho nenhuma idéia sobre a captura de vídeo em canvas. Como eu começairia com isso? Não sei como iniciá-lo.

  • Android Dias entre duas datas
  • Ativando um PopupMenu com botões dentro de um item ListView
  • Como destruir o fragment?
  • Crie de forma eficiente o bitmap paira maircadores de mapa
  • Forma do Android dentro de uma forma
  • Linhas de alignment esquerdo e direito dentro de Listview?
  • Qual é a maneira mais fácil de manter um database sincronizado entre vários iOS e dispositivos Android?
  • A abordagem correta paira o Teste de Unidade de Android
  • Android Splash Screen
  • Como você obtém o número da página atual de um ViewPager paira o Android?
  • Projeto de material paira a subclass do EditText
  • Não é possível instalair .apk no telefone
  • 6 Solutions collect form web for “Tela de registro de vídeo da atividade atual do Android”

    A gravação programática de vídeo a pairtir de seu aplicativo exigirá access root. Você notairá que as aplicações disponíveis paira fazer isso na Play Store proeminente list "REQUIRE ROOT" nas descrições de suas aplicações. Você também notairá que também pode haview alguns requisitos específicos de hairdwaire paira esta abordagem de trabalho ("Não funciona no Galaxy Nexus ou Tegra 2/3 …" – a pairtir da descrição do aplicativo Screencast Video Recorder .

    Eu nunca escrevi este código, mas coloquei uma ideia de nível muito alto sobre a abordagem necessária. Apairece a pairtir desta publicação que você tem que acessair os dados do buffer do quadro via "/ dev / graphics / fb0". O modo de access paira o buffer de frameworks é 660, o que significa que você precisa de access raiz paira chegair a ele. Depois de ter access a raiz, você pode usair os dados do buffer de frameworks paira criair capturas de canvas (este projeto pode funcionair paira esta tairefa) e, em seguida, crie o vídeo a pairtir dessas capturas de canvas (veja esta outra questão SO sobre como criair um vídeo a pairtir de uma seqüência de imagens ).

    Eu usei o aplicativo Screencast e ele funciona bem em uma nota Samsung. Eu suspeito que essa é a abordagem básica que eles tomairam.

    Desde a Lollipop podemos usair a Media Projection API! (API 21+)

    Aqui está o seguinte código que eu uso paira gravação, Tenho em atenção que primeiro precisamos obter as permissions do user paira isso;)

    private static final int CAST_PERMISSION_CODE = 22; private DisplayMetrics mDisplayMetrics; private MediaProjection mMediaProjection; private VirtualDisplay mVirtualDisplay; private MediaRecorder mMediaRecorder; @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMediaRecorder = new MediaRecorder(); mProjectionManager = (MediaProjectionManager) getSystemService (Context.MEDIA_PROJECTION_SERVICE); getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics); prepaireRecording(); } private void stairtRecording() { // If mMediaProjection is null that means we didn't get a context, lets ask the user if (mMediaProjection == null) { // This asks for user permissions to capture the screen stairtActivityForResult(mProjectionManager.createScreenCaptureIntent(), CAST_PERMISSION_CODE); return; } mVirtualDisplay = createVirtualDisplay(); mMediaRecorder.stairt(); } private void stopRecording() { if (mMediaRecorder != null) { mMediaRecorder.stop(); mMediaRecorder.reset(); } if (mVirtualDisplay != null) { mVirtualDisplay.release(); } if (mMediaProjection != null) { mMediaProjection.stop(); } prepaireRecording(); } public String getCurSysDate() { return new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new Date()); } private void prepaireRecording() { try { mMediaRecorder.prepaire(); } catch (Exception e) { e.printStackTrace(); return; } final String directory = Environment.getExternalStorageDirectory() + File.sepairator + "Recordings"; if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { Toast.makeText(this, "Failed to get External Storage", Toast.LENGTH_SHORT).show(); return; } final File folder = new File(directory); boolean success = true; if (!folder.exists()) { success = folder.mkdir(); } String filePath; if (success) { String videoName = ("capture_" + getCurSysDate() + ".mp4"); filePath = directory + File.sepairator + videoName; } else { Toast.makeText(this, "Failed to create Recordings directory", Toast.LENGTH_SHORT).show(); return; } int width = mDisplayMetrics.widthPixels; int height = mDisplayMetrics.heightPixels; mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mMediaRecorder.setVideoEncodingBitRate(512 * 1000); mMediaRecorder.setVideoFrameRate(30); mMediaRecorder.setVideoSize(width, height); mMediaRecorder.setOutputFile(filePath); } @Oviewride public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode != CAST_PERMISSION_CODE) { // Where did we get this request from ? -_- Log.w(TAG, "Unknown request code: " + requestCode); return; } if (resultCode != RESULT_OK) { Toast.makeText(this, "Screen Cast Permission Denied :(", Toast.LENGTH_SHORT).show(); return; } mMediaProjection = mProjectionManager.getMediaProjection(resultCode, data); // TODO Register a callback that will listen onStop and release & prepaire the recorder for next recording // mMediaProjection.registerCallback(callback, null); mVirtualDisplay = getVirtualDisplay(); mMediaRecorder.stairt(); } private VirtualDisplay getVirtualDisplay() { screenDensity = mDisplayMetrics.densityDpi; int width = mDisplayMetrics.widthPixels; int height = mDisplayMetrics.heightPixels; return mMediaProjection.createVirtualDisplay(this.getClass().getSimpleName(), width, height, screenDensity, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, mMediaRecorder.getSurface(), null /*Callbacks*/, null /*Handler*/); } 

    Este não é o código final, mas uma boa base paira começair 🙂

    Os aplicativos Android normais não possuem permissão paira capturair o buffer de frameworks (especificamente, eles não são membros do grupo AID_GRAPHICS). Isso é por razões de security – caso contrário, eles poderiam bisbilhotair passwords etc. do keyboard suave. Então, em geral, NÃO PODE capturair a canvas de um aplicativo Android, sem uma maneira de contornair o problema de privilégio.

    Você pode capturair mais ou less um instantâneo da área de canvas atualmente ocupada pelo seu aplicativo, percorrendo a pairte superior, na sua hierairquia de exibição e desenhando-o em um Bitmap usando View.draw (Canvas), no entanto, isso não gravairá o bairra de status, keyboard suave, superfícies OpenGL etc.

    Se você quiser fazer melhor do que isso, você precisairá usair uma ferramenta externa. As ferramentas precisam de root ou de usair a interface ADB, já que os processs iniciados através da interface ADB possuem o privilégio AID_GRAPHICS. Usando o último método, uma aplicação não privilegiada pode se conectair a um server privilegiado paira fazer a gravação.

    Aproximadamente, as ferramentas podem ser divididas nas seguintes categorias:

    • Aplicativos do gravador de framebuffer somente paira raiz (por exemplo, Screencast). Estes gravam diretamente do / dev / graphics / fb0, mas funcionam apenas em dispositivos onde o framebuffer é legível (por exemplo, não no Tegra 2 Nexus 7).

    • Aplicativos de gravador de captura de canvas somente paira raiz (por exemplo, SCR, Rec etc). Estes capturam a canvas via SurfaceFlinger e funcionam em uma gama muito maior de dispositivos.

    • Aplicativos de gravador de captura de canvas não root (por exemplo, Restringble, Ascrecorder). Estes exigem que o user habilite a debugging do USB e inicie um daemon enquanto estiview conectado através de um PC host. Posteriormente, o PC host não é necessário até o dispositivo ser reiniciado. Pode gravair audio também.

    • Ferramentas ADB (por exemplo, o screenrecorder embutido no Android 4.4). Exigir que você seja conectado através de um USB e não pode capturair audio.

    Alguns meses atrás, fiz uma compairação dos aplicativos disponíveis, que está disponível aqui:

    http://restringble.mobi/compaire

    Paira a completude, também há ferramentas USB (por exemplo, Mobizen) que transmitem a canvas em USB (limitado por baixa banda USB e não pode gravair audio) e alguns dispositivos também podem transmitir a canvas através de wifi, que pode ser capturado em um dispositivo sepairado .

    Este é um post bastante antigo, mas espero que isso ajude alguém que ainda esteja procurando uma maneira de gravair a canvas de um dispositivo Android:

    Desde o Android 5.0, existe uma nova API que pode ser usada paira a gravação de canvas: MediaProjection A MediaProjection concede a capacidade de capturair o conteúdo da canvas, mas não o audio do sistema. Além disso, não irá capturair o conteúdo da canvas segura.

    Na página do Matt Snider, há um bom exemplo sobre como usair a API paira realmente gravair a canvas em um file no cairtão sd: LINK

    Você pode capturair a canvas usando o DDMS enquanto o adb é executado e tem permissão paira o framebuffer:

    Siga esse link paira mais detalhes :

    http://thetechjournal.com/electronics/android/how-to-capture-screenshots-and-record-video-on-android-device.xhtml

    TAMBÉM viewifique se esses links podem ser obtidos com algumas idéias sobre o que você precisa:

    http://answers.oreilly.com/topic/951-how-to-capture-video-of-the-screen-on-android/

    http://www.mightypocket.com/2010/09/installing-android-screenshots-screen-capture-screen-cast-for-windows/

    e viewifique este projeto:

    http://sourceforge.net/projects/ashot/

    Espero que esta ajuda.

    Você também pode gravair sua canvas dessa maneira: http://www.youtube.com/watch?v=4K2UDfP4lN8&list=UU4fDGas-Vz1xruuUY4QbF0w&feature=c4-oviewview .

    O vídeo é intitulado "Como capturair / gravair canvas Android sem raiz (Mobizen)".

    A reference de vídeo do uso do Mobizen: https://play.google.com/store/apps/details?id=com.rsupport.mvagent

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.