Как загрузить видео из папки активов? (чтобы играть их с VideoView) - PullRequest
21 голосов
/ 25 ноября 2011

Мне нужно открыть MP4-видео из папки ресурсов и воспроизвести его с помощью VideoView.

Я пробовал использовать эти два параметра, но ни один из них не работает ....

mVideoView.setVideoPath("file:///android_asset/videos.mp4");
mVideoView.requestFocus();
mVideoView.start();

и ...

String uriPath = "file:///android_asset/videos.mp4";
Uri uri = Uri.parse(uriPath);
mVideoView.setVideoURI(uri);
mVideoView.requestFocus();
mVideoView.start();

Эти параметры не работают, но если я пытаюсь открыть видео с SDCARD, оно работает отлично, тогда проблема в том, что я пытаюсь загрузить видеоиз папки активов.

Что я делаю не так?

спасибо

Ответы [ 3 ]

31 голосов
/ 25 ноября 2011

Я не знаю, как загрузить видео из папки ресурсов. Но я знаю, как загрузить их из папки / res / raw /:

String uriPath = "android.resource://yourapplicationpackage/raw/videofilenamewithoutextension";
Uri uri = Uri.parse(uriPath);
video.setVideoURI(uri);
25 голосов
/ 08 февраля 2014

Воспроизведение файла .mp4 из \assets невозможно, вы должны загрузить его из папки \raw.

Пример:

, если внутри файла есть файл video.mp4папка /raw:

String fileName = "android.resource://"+  getPackageName() + "/raw/video";
VideoView vv = (VideoView) this.findViewById(R.id.surface);
vv.setVideoURI(Uri.parse(fileName));
vv.start();
5 голосов
/ 25 ноября 2011

РЕДАКТИРОВАНИЕ

Попробуйте:

this.setContentView(R.layout.videoview);        
mVideoView = (VideoView) this.findViewById(R.id.surface_view);        
SurfaceHolder holder = mVideoView.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
MediaPlayer player = new MediaPlayer();
player.setDisplay(holder);        
AssetFileDescriptor afd;
try {
    afd = getAssets().openFd("v.mp4");        
    player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
    player.prepareAsync();
    player.setOnPreparedListener(new OnPreparedListener() {

     @Override
     public void onPrepared(MediaPlayer mp) {
        mp.start();
     }
  });

} catch (Exception e) { e.printStackTrace();}   
...