7

Affronto il problema che ogni volta che uno stream viene riprodotto dalla mia app su Android 4.0+ il metodo OnPrepare da MediaPlayer.OnPreparedListener viene chiamato anche prima che venga caricato un flusso e quindi non sono in grado di indicare all'utente che è in corso il download/buffer del flusso. I have already found a question of the same kind but not answered Ecco cosa sto facendo.Android - MediaPlayer in preparazione Viene chiamato anche prima che lo stream venga preparato su Android 4.0 o

@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(); 
     } 

Questo codice sta lavorando bene su Google TV e altri Android 3.0 + 4.0 + e < dispositivo

risposta

1

Non ho molta esperienza con il lettore multimediale. Ma un paio di suggerimenti/domande da parte mia

  1. Nessuna chiamata da preparare. Se lo stai facendo, hai provato prepareAsync?
  2. Non si sta utilizzando l'istanza del mediaplayer che viene passata al callback onPrepared. Ci può essere una possibilità che tu stia cercando di avviare il mediaplayer sbagliato.
+0

Grazie per i suggerimenti/query @gvmani. per il secondo direi che sto suonando l'oggetto originale/principale. per il primo. preparare in modo sincrono funziona anche. il problema è su OS –

1

Suggerirei di utilizzare la classe MediaPlayer disponibile. A differenza del è a conoscenza del suo stato e gestisce ancora più cose per te che VideoView non offre .. Accoppiato con la creazione di un SurfaceHolder per visualizzare il contenuto in esso è piuttosto semplice.

Volete solo assicurarvi di gestire correttamente lo stato e utilizzare la chiamata prepareAsync() di MediaPlayer.

+0

specifico, il problema è che la Vista video se non è a conoscenza del suo stato, quindi come funziona correttamente su Android 3.1 e versioni successive. –

1

Questo è un problema noto per .m3u8 con Android < 4.3.

Hanno risolto questo in 4.3. Varrà la pena confrontare il codice MediaPlayer o VideoView di diverse piattaforme i.e 4.3 & < 4.3

+0

sfortunatamente questo non è il caso .. io ho controllato anche rtsp e altri flussi. e per il caso meno di 4.3 ** funziona su 3.0 e oltre uptil prima di 4.0.4 come menzionato nella domanda ** –

Problemi correlati