VideoView en un fondo de pantalla en vivo?
Según otras preguntas android-video-como-uno-vivo-papel pintado , es la única manera de jugar un vídeo en un papel pintado vivo es descodificar usted mismo?
- Android 3.1 / Galaxy Tab / VideoView no se reproducirá
- Control de la velocidad de reproducción de vídeo en android
- Android Video no se ajusta a la anchura en el retrato de la videovista y no ocupa la pantalla completa en el paisaje
- Detectar si un VideoVIew está almacenando en búfer
- Lista de vídeos de Android ListView
- YouTubePlayerFragment no funciona (Reproduciendo) en CollapsingToolbarLayout
- Vídeo Frame by Frame buscando
- Android: ¿Cualquier forma de reducir el retardo de los medios / latencia en VideoView / MediaPlayer?
- El video se reproduce en parte de la pantalla después de desbloquear la pantalla
- Comportamiento extraño - Fragmento de VideoViewer no funciona con MediaController
- Cómo prebuffer VideoView A mientras otro VideoView B está jugando - Android
- Android VideoView pantalla completa con controles de barra de navegación superpuestos
- Juega RTP stream withouth RTSP en Android VideoView
La respuesta corta es sí. La respuesta larga es http://ikaruga2.wordpress.com/2011/06/15/video-live-wallpaper-part-1/
Simplemente use MediaPlayer en lugar de VideoView y use MediaPlayer.setSurface en lugar de MediaPlayer.setDisplay. Si utiliza setDisplay los trucos de MediaPlayer para decirle al SurfaceHolder que mantenga la pantalla en la que no está permitido para LiveWallpapers y lanzará un error.
Utilizo el vídeo de WebM / vpx8 pero esto debe trabajar con lo que MediaPlayer apoya (apenas ponga el archivo video en res / raw)
package com.justinbuser.nativecore; import android.media.MediaPlayer; import android.service.wallpaper.WallpaperService; import android.view.SurfaceHolder; import com.justinbuser.android.Log; public class VideoWallpaperService extends WallpaperService { protected static int playheadTime = 0; @Override public Engine onCreateEngine() { return new VideoEngine(); } class VideoEngine extends Engine { private final String TAG = getClass().getSimpleName(); private final MediaPlayer mediaPlayer; public VideoEngine() { super(); Log.i( TAG, "( VideoEngine )"); mediaPlayer = MediaPlayer.create(getBaseContext(), R.raw.wallpapervideo); mediaPlayer.setLooping(true); } @Override public void onSurfaceCreated( SurfaceHolder holder ) { Log.i( TAG, "onSurfaceCreated" ); mediaPlayer.setSurface(holder.getSurface()); mediaPlayer.start(); } @Override public void onSurfaceDestroyed( SurfaceHolder holder ) { Log.i( TAG, "( INativeWallpaperEngine ): onSurfaceDestroyed" ); playheadTime = mediaPlayer.getCurrentPosition(); mediaPlayer.reset(); mediaPlayer.release(); } } }
Sólo para pensar fuera de la caja, ¿es posible tomar un reproductor de vídeo de trabajo y re-padre en una ventana de java en Android? No lo he hecho en Linux o Android, pero bajo Windows es posible obtener el identificador de ventana de una aplicación en ejecución y convertirlo en un elemento secundario de un marco Java, con el resultado de que la ventana de la otra aplicación se parece a su parte de Java solicitud.
He intentado la solución Justin Buser y no funciona (probado en un dispositivo API 16), también han encontrado un código similar en https://github.com/thorikawa/AndroidExample/tree/master/MovieLiveWallpaper/ ; Tampoco funciona. La única solución parece ser utilizar FFMPEG con NDK. Por ejemplo: https://github.com/frankandrobot