2012-02-04 13 views
21

Hola, estoy creando una aplicación que reproducirá el canal directo rtsp de livestream.com. estoy lanzando el reproductor con intención dentro de mi aplicación de la siguiente manera:rtsp rendimiento de video como intento desencadenado por navegador frente a mi intento desencadenado por la aplicación

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

Cuando se puso en marcha el reproductor de medios a través de mi aplicación, el rendimiento de vídeo es muy pobre. Se detiene para el almacenamiento en búfer cada pocos segundos, se reproduce durante unos segundos y hace una pausa para el almacenamiento en búfer de nuevo.

Por otro lado, si abro la url en el navegador de Android (por ejemplo, http://m.livestream.com/abcalbania), tiene una etiqueta de video en esa página y activa el reproductor de video. ESTA vez, el video funciona muy bien.

¿Alguna idea de por qué esto podría pasar? ¿Y cómo se puede arreglar esto?

  • No quiero iniciar la URL del navegador como intento.
  • esto se hace en Atmel chipset corteza A9 con Android 2.3.4
+0

Estoy asumiendo que cuando el fuego de la intención de su aplicación se abre en el reproductor de vídeo dispositivos –

Respuesta

0

Usar este código para el flujo suave

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

Por qué no jugar con esto en su propia actividad, crear y producir la actividad video view like

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

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

También se pueden proteger antes de comenzar a jugar unos 5 segundos y de almacenamiento temporal sucesiva será rápido. puedes controlar más cosas por tu cuenta.

1

El problema se debe a los códecs que probablemente no sean compatibles con su reproductor.

por ejemplo, tengo un video creado con códec de audio MPEG junto con el códec de video H.264.

si abro el video a través de mi aplicación, el video funciona sin problemas, pero si lanzo un video en Ooyala Hook Player tiene un rendimiento muy pobre, reproduce el video cada 3 segundos, la razón es que la transmisión utiliza códec de audio MPEG en lugar del códec de Audio AAC que es compatible.

Va a encontrar la respuesta con:

lo códecs se utilizan para crear de vídeo, y lo que están soportados por su reproductor?

0

MediaPlayer de Android se manejan muy bien RTSP: no abra una aplicación externa, no es necesario y falla en cuanto al producto.

Acerca de su pregunta: el navegador podría enviar otros parámetros al reproductor de video que ayudan a que el video se reproduzca sin problemas, no lo revisé pero parece la única opción posible para lo que está describiendo. Ejemplo de param adicional puede ser la resolución de video/codificación/tamaño ... puede obtener todos fácilmente usando MediaMetaDataRetriever.

Si no desea utilizar el VideoView nativo o MediaPlayer siempre se puede añadir un reproductor externo a su aplicación, como libVLC o Vitamio.

Recomiendo usar Vitamio, es realmente fácil de usar e integrar. LibVLC está en código nativo, significa que tendrá que compilarlo usando ndk y agregar sus libs a su proyecto. Puede encontrar here cómo hacerlo.

-1

Android video view support RTSP no necesita pasar el intento a otra aplicación. Pruebe con este código, pase xml con declaración de video y búsquelo dentro de esta actividad.

VideoPlayer clase pública se extiende Actividad
{

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

suspiro. Este código, al igual que todo lo demás que puedo encontrar, da "error (100,0)". http://stackoverflow.com/questions/25215724/rtsp-1080p-live-streaming-android-client-gets-error-100-0 –

-1

creo vídeo juego de forma asíncrona para un mejor rendimiento. Mi código es:

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; 
    } 

} 
Cuestiones relacionadas