2013-11-28 2 views
1

Я пытаюсь воспроизвести видео с медиа-плеером во время загрузки на SD-карте. Я даю setdatasource из sdcard. Медиаплеер воспроизводит видео, но через несколько секунд останавливает видео, но медиаплеер все еще играет, но контент находится на разрыве. как я могу снова воспроизвести видео, где он остановился?Android-плеер «stop playing»

private void downloadVideo(String url) { 
    try { 
     URL url1 = new URL(url); 
     long startTime = System.currentTimeMillis(); 
     Log.i("TAG", "image download beginning: " + url); 

     URLConnection conn = url1.openConnection(); 

     conn.setReadTimeout(5000); 
     conn.setConnectTimeout(30000); 

     File path = android.os.Environment.getExternalStorageDirectory(); 
     InputStream is = conn.getInputStream(); 
     BufferedInputStream inStream = new BufferedInputStream(is, 1024 * 5); 
     File directories = new File(path + "/sequence/"); 
     if (!directories.exists()) { 
      directories.mkdirs(); 
     } 
     FileOutputStream outStream = new FileOutputStream(new File(
       directories, "test2.mp4")); 

     byte[] buff = new byte[5 * 1024]; 
     // byte[] buff = new byte[1024 * 24]; 

     int len; 
     while ((len = inStream.read(buff)) != -1) { 
      outStream.write(buff, 0, len); 

     } 

     outStream.flush(); 
     outStream.close(); 
     inStream.close(); 

     Log.i("TAG", 
       "download completed in " 
         + ((System.currentTimeMillis() - startTime)/1000) 
         + " sec"); 

    } catch (MalformedURLException e) { 
     Log.d("Malformed", e.toString()); 
    } catch (IOException e) { 
     Log.d("IOException", e.toString()); 
    } 
} 

код для воспроизведения видео

 Runnable task = new Runnable() { 
     public void run() { 
      try { 
       File path = android.os.Environment 
         .getExternalStorageDirectory(); 
       // http://www.pocketjourney.com/downloads/pj/video/famous.3gp 
       // http://www.youtube.com/watch?v=Fvh38W4yKvc 
       // http://mconnect123456.s3.amazonaws.com/4532happyfit2.mp4 
       mp.reset(); 
       mp.setDataSource(path + "/sequence/test2.mp4"); 
       // mp.setDataSource("http://mconnect123456.s3.amazonaws.com/4532happyfit2.mp4"); 
       mp.prepare(); 

      } catch (IllegalArgumentException e) { 
       e.printStackTrace(); 
      } catch (IllegalStateException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      mp.start(); 

      while (!mp.isPlaying()) { 
       Log.d("Playing", "playing"); 

      } 

     } 
    }; 
    worker.schedule(task, 5, TimeUnit.SECONDS); 
+0

У вас есть ошибки на logcat? –

+0

информация/предупреждение (701,0) и информация/предупреждение (702,0 – ovluca

ответ

1

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

Я бы предложил создать локальный прокси-сервер на устройстве. Затем вы можете передать MediaPlayer localhost URI в setDataSource на свой прокси-сервер и кэшировать данные во время потоковой передачи. См. Мой ответ here для получения дополнительной информации и не стесняйтесь задавать вопросы, если у вас есть проблемы с его реализацией.

+0

Я раньше этого не делал. Мне нужна дополнительная информация. Я вернусь с вопросами .. спасибо. – ovluca