SurfaceView, SurfaceTexture y MediaPlayer no pueden reproducir mi video en android
Estoy tratando de reproducir video en vivo en streaming de mi aplicación con SurfaceView
, cuando lo intento con Vitamio
que juega bien, pero como es un enlace HTTP, traté de deshacerse de cualquier biblioteca de terceros y había utilizado las clases nativas. He intentado VideoView
como lo hago siempre, entonces intenté la aplicación básica de SurfaceView después del fracaso He intentado el video de la textura como esto:
@Override public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) { Surface surface = new Surface(surfaceTexture); try { mMediaPlayer = new MediaPlayer(); mMediaPlayer.setDataSource(getApplicationContext(), Uri.parse(link)); mMediaPlayer.setSurface(surface); mMediaPlayer.setLooping(true); mMediaPlayer.prepareAsync(); // Play video when the media source is ready for playback. mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { mediaPlayer.start(); } }); mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { Log.d(TAG, "Error occured"); return false; } }); } catch (IllegalArgumentException e) { Log.d(TAG, e.getMessage()); } catch (SecurityException e) { Log.d(TAG, e.getMessage()); } catch (IllegalStateException e) { Log.d(TAG, e.getMessage()); } catch (IOException e) { Log.d(TAG, e.getMessage()); } }
Pero no hay suerte cada vez OnError de MediaPlayer se llama y en el logcat consigo esto:
- configuración de vídeo opencv a pantalla completa android
- Android - Integración de ffmpeg y android-ndk-r9c
- Android MediaPlayer seekTo no funciona
- ¿Cómo puedo capturar videos de baja resolución en Android de forma confiable en una amplia gama de dispositivos?
- Capture la pantalla de Android y cree el video programáticamente
06-28 16:00:56.612 144-8044/? E/GenericSource﹕ Failed to prefill data cache! 06-28 16:00:56.614 7997-8016/? E/MediaPlayer﹕ error (1, -2147483648) 06-28 16:00:56.614 7997-7997/? E/MediaPlayer﹕ Error (1,-2147483648)
Pero la cosa es que no hay ningún problema con la URL, esta url está jugando bien en vitamio y todos los otros playes que podría probar, por favor ayuda!
- Android MediaRecorder produce video corrupto con líneas verdes
- ¿Cómo desarrollar un reproductor de video que recibe transmisión de video en la difusión wi-fi / multidifusión?
- Video vía phonegap en android
- Convertir secuencias de entrada de vídeo a RTMP
- ¿Puede Android cache el video HTML5 con el manifiesto de caché sin conexión?
- Reproducir vídeo Mp4 desde el servidor android
- Mover el archivo de video capturado por la cámara usando cordova (phonegap) no es refrescante galería thumbnail
- Obtener la URL de descarga para el vídeo de YouTube (Android / Java)
He tenido mi propio dolor tratando de obtener vídeo para jugar en Android a través de MediaPlayer
y también he probado Vitamio también. La mayoría de las veces, si un video no se reproduce correctamente en MediaPlayer
de Android fue porque no era de un formato compatible.
http://developer.android.com/guide/appendix/media-formats.html
Esto puede no ser la respuesta que desea, pero es probable que tenga que volver a codificar lo que está intentando reproducir a un formato compatible. Las capacidades de reproducción de vídeo de Android son mucho más débiles que las del iPhone, y esto es algo que tendrás que aceptar.
Si en cambio estás dispuesto a poner (mucho) más trabajo, puedes compilar ffmpeg tú mismo para android, hacer una interfaz jni a sus muchos componentes y reproducir videos en la vista de superficie / textura. Yo personalmente no recomiendo esta ruta como mi experiencia con streaming de vídeo 1080p a través de ffmpeg no fue genial.
Su mejor y más fácil apuesta es simplemente volver a codificar sus videos.
Fondo: Hice una aplicación que reproduce hasta 5 videos silmutaniously de una variedad de vendedores.
Parece ser uno de 2 problemas. El formato es incorrecto o hay problemas de permisos con el archivo y no puede abrirlo.
Primero convierte el video usando ffmpeg . Yo uso este comando para convertir a un stream-able mp4:
Ffmpeg -i InputVideo.mp4 -c: v libx264 -profile: v línea de base -c: a libfaac -ar 44100 -ac 2 -b: a 128k -movflags faststart OutputVideo.mp4
En segundo lugar, intente cargar el video como un archivo primero y luego pase la fuente de datos al reproductor multimedia. Esto es necesario a veces como he notado que cuando se utiliza MediaPlayer para abrir el archivo que desencadena una llamada a nivel de sistema operativo para cargar el archivo mientras el archivo está en la carpeta privada de aplicaciones y por lo tanto no puede ser abierto por el sistema operativo. Lo hacemos así:
AssetFileDescriptor afd = contxt.getResources().openRawResourceFd(R.raw.prepare_artwork); if (afd == null) { Log.e(TAG, "Failed to load video."); } else { mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); afd.close(); }
- Captura cuando la aplicación de Android pasó al fondo
- En la facturación de aplicaciones v3 IllegalArgumentException utilizando IabHelper