Intereting Posts
Правильное использование Sqlite на Android (SQLiteOpenHelper, подключения, основной поток и т. Д.) ActionBar MenuItem Divider Создание объекта местоположения в Android со значениями широты и долготы Нет ответа от удаленного клиента: ошибка при передаче файла с использованием asmack Использование String selectionArgs в SQLiteDatabase.query () Путаница в преобразовании YUV NV21 в RGB Почему в документах Android говорится, что для дополнительных приложений нужен префикс пакета Ошибка IBitmapDescriptorFactory не инициализирована Как загрузить приложение из Eclipse на Android-телефон вместо AVD Ошибка «id не может быть разрешена или не поле»? Социальная аутентификация ASP.NET Web API для Интернета и мобильных устройств Как проверить текущие запущенные приложения на Android? Как импортировать только выбранные ABI из исходной библиотеки из AAR? Android: как перерисовать графический элемент? Как изменить цвет текста индикатора вкладок в android?

Производительность видео в формате rtsp при запуске браузера с целью запуска приложения

Привет, я создаю приложение, которое будет воспроизводить live-канал live. Я запускаю игрока, используя намерение в своем приложении, следующим образом:

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

Когда медиапроигрыватель запускается через мое приложение, производительность видео очень низка. Он останавливается для буферизации каждые несколько секунд, играет в течение нескольких секунд и снова приостанавливает буферизацию.

С другой стороны, если я открою URL-адрес в браузере Android (например, http://m.livestream.com/abcalbania ), у него есть видео-тег на этой странице и запускается видеоплеер. В это время видео работает очень гладко.

Любая идея, почему это может произойти? И как это можно исправить?

  • Я не хочу запускать URL-адрес браузера в качестве намерения.
  • Это делается на чипсете Atmel cortex A9 с Android 2.3.4

Solutions Collecting From Web of "Производительность видео в формате rtsp при запуске браузера с целью запуска приложения"

Проблема вызвана кодеками, которые, вероятно, не поддерживаются вашим игроком.

Например, у меня есть видео, созданное с помощью кодека MPEG Audio вместе с видеокодеком H.264.

Если я запускаю видео через приложение, видео работает гладко, но если я запускаю видео в Ooyala Hook Player, он имеет очень низкую производительность, он воспроизводит видео каждые 3 секунды, причина в том, что поток использует аудиокодек MPEG вместо AAC Audio кодек, который поддерживается.

Вы найдете ответ:

Какие кодеки используются для создания видео, и что поддерживает ваш плеер?

Используйте этот код для плавного STREAM

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

Почему бы вам не сыграть это в своей собственной деятельности, создать активность и визуализировать видео

Private String path2 = "rtsp: // …";
Uri video = Uri.parse (путь2);

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

Также вы можете буферизировать до начала воспроизведения, возможно, 5 секунд, а последующая буферизация будет быстрой. Вы можете контролировать больше вещей своими силами.

Android MediaPlayer отлично справляется с RTSP – не открывайте внешнее приложение – это не обязательно и неправильно.

О вашем вопросе – браузер может отправить другим параметрам видеоплеер, который поможет воспроизвести видеоролик, я не проверял его, но это звучит как единственный возможный вариант для того, что вы описываете. Примером дополнительного параметра может быть разрешение / кодирование / размер видео. Вы можете легко их легко использовать с помощью MediaMetaDataRetriever .

Если вы не хотите использовать собственный VideoView или MediaPlayer, вы всегда можете добавить к своему внешнему проигрывателю, например, libVLC или Vitamio .

Я рекомендую использовать Vitamio, очень прост в использовании и интеграции. LibVLC находится в собственном коде, это означает, что вам нужно будет создать его с помощью ndk и добавить свои библиотеки в свой проект. Вы можете найти здесь, как это сделать.

Поддержка просмотра видео в формате Android RTSP не требует передачи намерений другому приложению. Прочитайте этот код, передайте xml с объявлением просмотра видео и найдите его внутри этого действия.

Открытый класс VideoPlayer расширяет активность
{

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

}

Я думаю, что воспроизводить видео по асинхронно для лучшей производительности. Мой код:

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