2017-02-22 2 views
0

Я использую WS для загрузки видео в моем приложении. После того, как я хочу открыть загруженное видео.Открыть видеоролик во внутреннем хранилище

Проблема заключается в том, когда я хочу, чтобы открыть видео я имею эту ошибку:

VideoView: Unable to open content: /data/user/0/code.package/files/diapos/1.mp4 
java.io.IOException: setDataSource failed. 

Это функция загрузки:

MyRestClient.get("/diapos/1", null, new BinaryHttpResponseHandler() { 
    @Override 
    public void onSuccess(int statusCode, Header[] headers, byte[] binaryData) { 
    InputStream input = new ByteArrayInputStream(binaryData); 
    try { 
     OutputStream output = new FileOutputStream("/diapos/1.mp4"); 
     byte data[] = new byte[4096]; 
     int count; 
     while ((count = input.read(data)) != -1) { 
     output.write(data, 0, count); 
     } 
    } catch (IOException e) { e.printStackTrace(); } 
} 

Это, как я играю в видео:

final VideoView video = (VideoView) getActivity().findViewById(R.id.video); 
String path = getActivity().getFilesDir().getAbsolutePath() + "/diapos/1.mp4"; 
video.setVideoURI(Uri.parse(path)); 
video.start(); 

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

ответ

0

Я нашел решение. Он работает с внутренним хранилищем. Вместо этого я использую FileAsyncHttpResponseHandler.

Это где я делаю вызов WS:

File file = getApplicationContext().getFileStreamPath("movie.mp4"); 

     Client.TESTVIDEOget(null, new FileAsyncHttpResponseHandler(file) { 

      @Override public void onSuccess(int statusCode, Header[] headers, File file) { 
       Log.d("debug", "success : " + file.getAbsolutePath() + "\n size : " + file.length()); 
      } 

      @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, File file) { 
       Log.d("debug", "fail : " + file.getAbsolutePath()); 

      } 
     }); 

Это где я играю фильм:

final VideoView video = (VideoView) getActivity().findViewById(R.id.video); 

String path = getActivity().getFilesDir().getAbsolutePath() + "/movie.mp4"; 
video.setVideoURI(Uri.parse(path)); 
video.start(); 
+0

я должен ждать 3 часа для этого. Сожалею. –

+0

Хорошо. Я не знал об этом. Сожалею. –

0

Вы не можете этого сделать. Объект MediaPlayer, используемый VideoView, требует, чтобы файл был world-readable. Внутренних файлов нет. Также бесполезно передать источник с Uri как file:///: если да, то в конце концов MediaPlayer будет использовать его метод setDataSource(String path)

Проверить this answer также на тот же аргумент.

Смежные вопросы