Intereting Posts
Текст кнопки android и html ActionbarSherlock – вкладки не реагируют в альбомной ориентации Как правильно создать Tablayout теперь, когда Tabactivity устарела? Java сортирует массив месяцев в несколько массивов по месяцам Построение игрового проигрывателя Runtime Android Forever Загрузка Модифицировать! Возвращение общего наблюдаемого типа В playstore у нас есть два приложения с одинаковым именем с различным пакетом – Android Тайм-аут активности для HistoryRecord? MediaMetadataRetriever.getFrameAtTime () возвращает только первый кадр Android Studio AndroidManifest.xml vs build.gradle Создание изображения с экрана просмотра в Android Активность не началась, ее текущая задача была перенесена на передний план Как захватить событие, когда пользователь отклоняет диалоговое окно предупреждения, нажав кнопку backKey на Android Обработка onActivityResult в приложении Android с несколькими действиями Android – как правильно выполнить фоновый поток?

Воспроизведение видео с http-сервера в android

У меня есть список, в котором я загружаю все видео из конкретной папки сервера. Теперь то, что я пытаюсь сделать, – это щелкнуть элемент списка, чтобы воспроизвести это видео в виде видео. Кажется, что все работает отлично, но только проблема, с которой я столкнулся, – это когда я нажимаю на элемент списка, он не воспроизводит это видео.

PS. Я получаю следующий журнал регистрации ошибок, но мое приложение не останавливается, к сожалению, мой дисплей продолжает показывать мне, что видео загружается в полосу прогресса, которую я установил в Asynctask, но когда я проверил log log, я увидел эту ошибку.

Конечно, я искал в google, а также SO, но у меня не было удовлетворительного результата.

Folowwing – это сообщение моего журнала.

02-21 11:08:52.964: W/SurfaceFlinger(101): nothing to do with mask 0x00000000 02-21 11:08:52.974: W/System.err(1992): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 02-21 11:08:52.976: W/System.err(1992): at android.os.Handler.<init>(Handler.java:121) 02-21 11:08:52.976: W/System.err(1992): at android.widget.MediaController$3.<init>(MediaController.java:474) 02-21 11:08:52.977: W/System.err(1992): at android.widget.MediaController.<init>(MediaController.java:474) 02-21 11:08:52.978: W/System.err(1992): at android.widget.MediaController.<init>(MediaController.java:210) 02-21 11:08:52.978: W/System.err(1992): at iqual.fidol_final.ServerFileList.playVideo(ServerFileList.java:225) 02-21 11:08:52.979: W/System.err(1992): at iqual.fidol_final.ServerFileList.access$3(ServerFileList.java:221) 02-21 11:08:52.979: W/System.err(1992): at iqual.fidol_final.ServerFileList$PlayVideo$1.run(ServerFileList.java:181) 02-21 11:08:52.979: W/System.err(1992): at java.lang.Thread.run(Thread.java:856) 

И следующий мой код.

 mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String url1 = null; Object o1 = myList.get(position); url1 = o1.toString().replace(" ", "%20").trim(); playVideo = (PlayVideo) new PlayVideo(url1).execute(); } }); 

И это моя Asynctask для воспроизведения видео

 class PlayVideo extends AsyncTask<String, Void, Boolean> { String baseURL; public PlayVideo(String baseURL) { this.baseURL = baseURL; } @Override protected void onPreExecute() { super.onPreExecute(); pDialog = ProgressDialog.show(ServerFileList.this, " Buffering...", "please wait..", false); pDialog.setCancelable(false); } @Override protected Boolean doInBackground(String... urls) { Thread thread = new Thread(new Runnable() { @Override public void run() { try { playVideo(baseURL); } catch (Exception e) { e.printStackTrace(); } } }); thread.start(); return true; } @Override protected void onPostExecute(Boolean result) { super.onPostExecute(result); } } 

И следующий – мой метод воспроизведения видео.

 private void playVideo(String baseURL) { Uri myUri = Uri.parse(baseURL); MediaController mc; mc = new MediaController(this); mVideoView.setMediaController(mc); mVideoView.setVideoURI(myUri); System.out.println("====Myuri=====" + myUri); mVideoView.requestFocus(); mVideoView.start(); } 

Я также пытался создать новый поток в doInbackground и удалять поток, но эти трюки не сработали для меня.

Также одна вещь, что он показывает ошибку в строке 225, которая является mc = new MediaController(this);

Solutions Collecting From Web of "Воспроизведение видео с http-сервера в android"

Вы можете удалить свою AsyncTask и воспроизвести свое видео напрямую, используя код ниже,

 String url1 = null; Object o1 = myList.get(position); url1 = o1.toString().replace(" ", "%20").trim(); playVideo(url1); 

U может воспроизводить видео в VideoView. Попробуйте использовать Asynctask

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.playvideo); VideoView v=(VideoView)findViewById(R.id.videoview); new BackgroundAsyncTask().execute("Video Url"); } public class BackgroundAsyncTask extends AsyncTask<String, Uri, Void> { Integer track = 0; ProgressDialog dialog; protected void onPreExecute() { dialog = new ProgressDialog(PlayVideo.this); dialog.setMessage("Loading, Please Wait..."); dialog.setCancelable(true); dialog.show(); } protected void onProgressUpdate(final Uri... uri) { try { media = new MediaController(PlayVideo.this); v.setMediaController(media); media.setPrevNextListeners(new View.OnClickListener() { @Override public void onClick(View v) { // next button clicked } }, new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); media.show(10000); v.setVideoURI(uri[0]); v.requestFocus(); v.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer arg0) { v.start(); dialog.dismiss(); } }); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override protected Void doInBackground(String... params) { try { Uri uri = Uri.parse(params[0]); publishProgress(uri); } catch (Exception e) { e.printStackTrace(); } return null; }