Android – MediaPlayer's en Preparado Llamado incluso antes de que el flujo se prepare en Android 4.0+
Estoy enfrentando el problema de que cada vez que un flujo es reproducido por mi aplicación en Android 4.0 OnPrepare
método OnPrepare
de MediaPlayer.OnPreparedListener
se llama incluso antes de una secuencia se carga y por lo tanto no puedo indicar al usuario que la descarga de flujo / buffering está en proceso. Ya he encontrado una pregunta del mismo tipo pero no contestada Aquí hay un qué estoy haciendo.
@Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); playVideo(someRtspUrl); } private void playVideo(String url) { // if app is running on Google TV then change RTSP link to HLS if (url.contains("rtsp")) { // split the RTSP URL and make it as HLS String videoUrlParts[] = url.split("\\?"); url = videoUrlParts[0].replace("rtsp", "http") + "/playlist.m3u8"; if (videoUrlParts.length > 1) url += "?" + videoUrlParts[1]; } mVideoView.setVideoURI(Uri.parse(url)); mVideoView.requestFocus(); mVideoView.setOnCompletionListener(this); mVideoView.setOnPreparedListener(this); } @Override public void onPrepared(MediaPlayer player) { dismissProgressDialog(); mVideoView.start(); }
Este código funciona bien en Google TV y en otro dispositivo Android 3.0+ y <4.0+
- Android 3.x / HLS cómo iniciar al final de la secuencia
- Cómo usar android exoplayer
- Utilizar MediaCodec para H264 streaming
- ¿Cómo acceder CORRECTAMENTE a datos de cámara LIVE en Android? ¿Cómo lo hace Skype?
- Transmisión de vídeo mediante RTSP: Android
- Cámara Android RTSP / RTP Stream?
- Android ffmpeg y aceleración de hardware
- Adición de VideoView a un diseño XML
- android VideoView aumentar el almacenamiento en búfer
- Cómo grabar HLS streaming android?
- Una biblioteca para compresión / descompresión de vídeo sin pérdidas / bajo nivel de plataforma cruzada (C ++ / Android)
- Cómo usar RajawaliVR o Rajawali para jugar un video 360
- Android VideoView setVideoURI bloquea el subproceso de la interfaz de usuario
No tengo mucha experiencia con el reproductor multimedia. Pero un par de sugerencias / consultas de mi lado
- No hay necesidad de prepararse. Si lo está haciendo, ¿probó prepareAsync?
- No está utilizando la instancia mediaplayer que se pasa a la devolución de llamada onPrepared. Puede haber una posibilidad de que esté intentando iniciar el reproductor de medios equivocado.
Yo sugeriría usar la clase MediaPlayer que está disponible. A diferencia de VideoView MediaPlayer es consciente de su estado y gestiona aún más cosas para usted que VideoView no ofrece .. Junto con la configuración de un SurfaceHolder para mostrar el contenido en es bastante simple.
Sólo querrá asegurarse de que está manejando adecuadamente el estado y utilizando la llamada prepareAsync () de MediaPlayer.
Este es un problema conocido para .m3u8 con Android <4.3.
Lo arreglaron en 4.3. Vale la pena comparar el código MediaPlayer o VideoView de diferentes plataformas, es decir, 4.3 y <4.3
- In-Application BroadcastReceiver
- Android – ¿Cómo crear una vista con esquinas redondeadas y un fondo de mosaico de la imagen?