android - que - mejorar rendimiento vlc
Rendimiento de video rtsp como intento desencadenado por navegador frente a mi intento desencadenado por la aplicaciĆ³n (6)
¿Por qué no juegas esto en tu propia actividad, creas actividad y renderizas la vista de video como
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 puede almacenar en búfer antes de comenzar a jugar tal vez 5 segundos y que el almacenamiento en búferes sucesivos será rápido. puedes controlar más cosas por tu cuenta.
Hola, estoy creando una aplicación que reproducirá el canal en vivo rtsp de livestream.com. Estoy lanzando el reproductor usando intenciones dentro de mi aplicación de la siguiente manera:
iPlayer = new Intent(Intent.ACTION_VIEW);
//iPlayer.setType("video/*");
iPlayer.setData(Uri.parse(videoUrl));
startActivity(iPlayer);
Cuando el reproductor multimedia se inicia a través de mi aplicación, el rendimiento del video es muy bajo. 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 ej., 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 deseo iniciar la URL del navegador como intento.
- Esto se hace en el chipset Atmel cortex A9 con Android 2.3.4
Compatible con vista de video Android RTSP no necesita pasar el intento a otra aplicación. Pruebe con este código, pase xml con una declaración de vista de video y encuéntrelo dentro de esta actividad.
la clase pública VideoPlayer extiende la 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;
}
}
}
}
Creo que reproducir video de manera asincrónica 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;
}
}
El MediaPlayer de Android maneja muy bien RTSP, no abre una aplicación externa, no es necesario y está equivocado en cuanto al producto.
Acerca de su pregunta: el navegador podría enviar otros parámetros al reproductor de video que ayuden a que el video se reproduzca sin problemas, no lo revisé pero parece la única opción posible para lo que está describiendo. Ejemplo para el 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 o MediaPlayer nativo, siempre puede agregar 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.
El problema es causado por los códecs que probablemente no sean compatibles con tu 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 se ejecuta 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 de Códec de audio AAC que es compatible.
Encontrarás la respuesta con:
¿Qué códecs se utilizan para crear video y qué son compatibles con tu reproductor?
Use este código para STREAM suave
String videoUrl = "rtmp://mystream";
Intent i = new Intent(android.content.Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse(videoUrl), "video/*");
startActivity(i);