2012-02-04 10 views
21

Ciao Sto creando un'app che riprodurrà il canale live rtsp di livestream.com. Sto lanciando il lettore utilizzando intento nel mio app come segue:prestazioni video rtsp come intent intentato dal browser rispetto all'intento attivato dalla mia applicazione

  iPlayer = new Intent(Intent.ACTION_VIEW); 
      //iPlayer.setType("video/*"); 
      iPlayer.setData(Uri.parse(videoUrl)); 
      startActivity(iPlayer); 

Quando il lettore multimediale viene lanciato attraverso la mia applicazione, le prestazioni video è molto povera. Si ferma per il buffering ogni pochi secondi, suona per alcuni secondi e si interrompe per il buffering di nuovo.

D'altra parte, se apro l'url nel browser Android (ad esempio http://m.livestream.com/abcalbania) ha un tag video su quella pagina e attiva il lettore video. QUESTA volta, il video gira molto liscio.

Qualche idea perché questo potrebbe accadere? E come può essere risolto?

  • Non voglio lanciare l'URL del browser come intento.
  • Questo viene fatto su Atmel chipset cortex A9 con Android 2.3.4
+0

Sto assumendo che quando si accende l'Intent dalla vostra applicazione si apre nel dispositivi lettore video –

risposta

0

utilizzare questo codice per STREAM liscio

String videoUrl = "rtmp://mystream"; 
Intent i = new Intent(android.content.Intent.ACTION_VIEW); 
i.setDataAndType(Uri.parse(videoUrl), "video/*"); 
startActivity(i); 
0

Perché non si gioca questo nella vostra attività, creare attività e di rendere il visualizzazione video come

private String path2 = "rtsp: // ...";
Uri video = Uri.parse (percorso2);

mVideoView.setVideoURI(video); 
mVideoView.setMediaController(new MediaController(this)); 
mVideoView.requestFocus(); 
mVideoView.postInvalidateDelayed(100); 
mVideoView.start(); 

Inoltre è possibile buffer prima iniziare a giocare forse 5 secondi e di buffer successivo sarà veloce. puoi controllare più cose per conto tuo.

1

Il problema è causato dai codec che probabilmente non sono supportati dal lettore.

ad esempio, ho un video creato con il codec MPEG Audio insieme al codec video H.264.

se lancio il video tramite la mia applicazione il video funziona senza intoppi, ma se lancio un video in ha una prestazione molto scarsa, riproduce il video ogni 3 secondi, il motivo è che lo streaming utilizza il codec audio MPEG invece del codec AAC Audio supportato.

Potrai trovare la risposta con:

cosa codec sono utilizzati per creare il video de, e quali sono supportati dal il lettore?

0

MediaPlayer di Android gestisce molto bene RTSP - non aprire un'app esterna - non è necessario e sbagliato dal punto di vista del prodotto.

Informazioni sulla tua domanda: il browser potrebbe inviare altri parametri al video player che aiutano la riproduzione del video senza problemi, non l'ho verificato ma sembra l'unica opzione possibile per ciò che stai descrivendo. Esempio per il parametro extra potrebbe essere la risoluzione/codifica/dimensione del video .. è possibile ottenere tutti facilmente usando MediaMetaDataRetriever.

Se non si desidera utilizzare la VideoView nativa o MediaPlayer è sempre possibile aggiungere lettore esterno al app, come libVLC o Vitamio.

Mi raccomando di utilizzare Vitamio, è davvero facile da usare e da integrare. LibVLC è in codice nativo, significa che dovrai costruirlo usando ndk e aggiungere le sue librerie al tuo progetto. Puoi trovare here come farlo.

-1

Supporto per la visualizzazione di video Android RTSP non necessita di passare l'intento ad altre applicazioni. Provare con questo codice, passare xml con la dichiarazione di visualizzazione video e trovarlo all'interno di questa attività.

public class VideoPlayer estende Attività
{

private VideoView mVideoView;    
String videoURL=""; 
static Utility utility; 
static Context context; 
//MediaController mediaController; 
//int iCurrentpostion=0; 
int counter=0; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{   
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tab_video_player);   
     setupViews(); 
} 
private void setupViews() 
    { 
     context=VideoPlayer.this; 
     //utility=new Utility(VideoPlayer.this); 
     showProgressDialog("Please wait", "Loading video.."); 

     //videoURL=getIntent().getExtras().getString("url");    
     mVideoView=(VideoView)findViewById(R.id.xvdvwTab); 
     // mediaController=new MediaController(context);    
     // mVideoView.setMediaController(mediaController); 



     mVideoView.setOnPreparedListener(new OnPreparedListener() 
     { 
      @Override 
      public void onPrepared(MediaPlayer mp) 
      { 

       utility.hideProgressDialog(); 

       mVideoView.start();      
       mVideoView.requestFocus(); 

      } 
     }); 

     mVideoView.setOnCompletionListener(new OnCompletionListener() 
     { 

      @Override 
      public void onCompletion(MediaPlayer mp) 
      { 
       finish(); 
      } 
     }); 


     mVideoView.setOnErrorListener(new OnErrorListener() 
     { 

     @Override 
     public boolean onError(MediaPlayer mp, int what, int extra) 
     { 
      utility.hideProgressDialog(); 
      return false; 
     } 
    }); 

     playVideoFile();  
    } 

private void playVideoFile() 
    { 

      try 
      {     
       mVideoView.setVideoURI(Uri.parse("your url")); 
      } 
      catch (Exception e) 
      { 
       utility.hideProgressDialog(); 
       if (mVideoView != null) 
       {     
        mVideoView.stopPlayback(); 
       } 
      } 
     } 
@Override 
protected void onResume() 
    { 
     /*if(mVideoView!=null) 
     { 
      //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
      mVideoView.requestFocus(); 
      if(iCurrentpostion!=0) 
       mVideoView.seekTo(iCurrentpostion); 
      mVideoView.start();   
     } 
     super.onResume();*/ 
    } 

@Override 
protected void onDestroy() 
{ 
    try 
    { 
     if (mVideoView != null) 
     {    
      mVideoView.stopPlayback(); 
      mVideoView=null;     
     } 
     super.onDestroy(); 
    } catch (Exception e) 
    {}    
} 

public void showProgressDialog(String title,String Message) 
{ 
     hideProgressDialog(); 
     progressDialog=new ProgressDialog(mActivity); 
     progressDialog.setTitle(title); 
     progressDialog.setMessage(Message);       
     if(Constant.isActivityisRunning) 
      progressDialog.show(); 

} 
public void hideProgressDialog() 
{ 
    if (progressDialog != null) 
    { 
     if (progressDialog.isShowing()) 
     { 
      progressDialog.dismiss(); 
      progressDialog = null; 
     } 
    } 
} 

}

+0

Sigh. Questo codice, proprio come tutto il resto che posso trovare, restituisce "error (100,0)". http://stackoverflow.com/questions/25215724/rtsp-1080p-live-streaming-android-client-gets-error-100-0 –

-1

penso riproduzione video da modo asincrono per migliorare le prestazioni. Il mio codice è:

private class myAsync extends AsyncTask<Void, Integer, Void> { 
     int duration = 0; 
    //int current = 0; 
    @Override 
    protected Void doInBackground(Void... params) { 
     videoView.setOnPreparedListener(new OnPreparedListener() { 

      public void onPrepared(MediaPlayer mp) { 
       progressDialog.dismiss(); 
       videoView.seekTo(check); 
       videoView.start(); 
       duration = videoView.getDuration(); 
      } 
     }); 

     do { 


      current = videoView.getCurrentPosition(); 
      System.out.println("duration - " + duration + " current- " 
        + current); 


     } 

      if (sync.isCancelled()) 
       break; 

     } while (current != duration || current == 0); 

     return null; 
    } 

}