Подтвердить что ты не робот

Как загрузить видео из папки с ресурсами? (чтобы воспроизвести их с помощью VideoView)

Мне нужно открыть 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, он отлично работает, тогда проблема в том, что я пытаюсь загрузить видео из папки с ресурсами.

Что я делаю неправильно?

спасибо

4b9b3361

Ответ 1

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

String uriPath = "android.resource://yourapplicationpackage/raw/videofilenamewithoutextension";
Uri uri = Uri.parse(uriPath);
video.setVideoURI(uri);

Ответ 2

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

Пример:

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

String fileName = "android.resource://"+  getPackageName() + "/raw/video";
VideoView vv = (VideoView) this.findViewById(R.id.surface);
vv.setVideoURI(Uri.parse(fileName));
vv.start();

Ответ 3

EDITED

Try:

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