如何从assets文件夹加载视频? (用VideoView播放)

时间:2011-11-25 12:46:22

标签: android mp4 assets

我需要从assets文件夹打开一个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 个答案:

答案 0 :(得分:31)

我不知道如何从assets文件夹加载视频。但我知道如何从/ res / raw /文件夹加载它们:

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

答案 1 :(得分:25)

无法从\assets播放.mp4文件,您必须从\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();

答案 2 :(得分:5)

已编辑

尝试:

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