Reproducción de vídeo en TextureView
En la documentación de Android TextureView se dice que puedes usar un TextureView para reproducir video: Pero no puedo encontrar ningún ejemplo de cómo hacerlo. ¿Alguien sabe?
Necesito usar un textureView
porque quiero animar el video. Quiero reproducir un video en formato .3gp / .mp4, no vídeo de la cámara 🙂
- Reproducir vídeo Mp4 desde el servidor android
- Ocultar una vista de superficie que se superpone a otra
- Video vía phonegap en android
- Resample / upsample sonidos de 8Khz a 48Khz (Java / Android)
- Android - Integración de ffmpeg y android-ndk-r9c
Cualquier ayuda sería apreciada..
ACTUALIZAR:
La solución se publica como una respuesta de wiki de la comunidad
- ¿Cómo puedo capturar videos de baja resolución en Android de forma confiable en una amplia gama de dispositivos?
- Buscando en YouTube HTML5 video sobre Android WebView
- Codificación y muxing de vídeo mediante MediaCodec y MediaMuxer
- SurfaceView sobre actionBar debido a setZOrderOnTop
- YouTubeAndroidPlayerAPI no puede reproducir algunos videos
- Android Marshmallow "No se puede reproducir este video" error
- Limitaciones de la captura de video en la brecha del teléfono + complementos nativos
- Subtítulos / Soporte de subtítulos en Android
Aquí está cómo usted puede hacerlo: (solución por el autor de la pregunta, que él fijó como actualización en la pregunta)
Public class MediaPlayerDemo_Video extends Activity implements TextureView.SurfaceTextureListener { private MediaPlayer mMediaPlayer; private TextureView mPreview; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); mPreview = (TextureView) findViewById(R.id.surface); mPreview.setSurfaceTextureListener(this); extras = getIntent().getExtras(); setContentView(mPreview); } public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { Surface s = new Surface(surface); try { mMediaPlayer= new MediaPlayer(); mMediaPlayer.setDataSource("http://daily3gp.com/vids/747.3gp"); mMediaPlayer.setSurface(s); mMediaPlayer.prepare(); mMediaPlayer.setOnBufferingUpdateListener(this); mMediaPlayer.setOnCompletionListener(this); mMediaPlayer.setOnPreparedListener(this); mMediaPlayer.setOnVideoSizeChangedListener(this); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mMediaPlayer.start(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
Y animar funciona muy bien.
Tuve el mismo problema, y lo resolví con un TextureView
. He encontrado setScaleX
y setScaleY
muy útil, si esto ayuda a nadie. http://developer.android.com/reference/android/view/View.html#setScaleX%28float%29
Sin embargo, si solo está orientado a la API 16+:
mediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
Debería hacerlo
Su setContentView(mPreview);
Necesita ser llamado antes de la
mPreview = (TextureView) findViewById(R.id.surface); mPreview.setSurfaceTextureListener(this);