首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在android中播放assets文件夹或raw文件夹中的视频?

如何在android中播放assets文件夹或raw文件夹中的视频?
EN

Stack Overflow用户
提问于 2010-06-12 20:54:19
回答 13查看 141.9K关注 0票数 71

我试图在安卓模拟器中播放视频,我在我的assets文件夹以及raw文件夹中都有视频,但在做了一些研究后,我仍然无法在我的模拟器中播放视频,我在Android2.1上工作,我的视频格式是mp4,所以我不认为这应该是一个问题,任何人可以给我一个例子代码,以便我可以理解更多?

问题是,我需要显示视频的VideoView将只使用URI或文件路径来指向视频。

如果我将视频保存在raw或assets文件夹中,我只能获得输入流或文件描述符,而且似乎没有任何内容可以用于初始化VideoView。

更新

我仔细研究了MediaPlayer示例,并尝试使用指向资产文件的FileDescriptor启动一个MediaPlayer,如以下代码所示:

代码语言:javascript
复制
SurfaceView videoView = (SurfaceView) findViewById(gettingStarted)
SurfaceHolder holder = videoView.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
final MediaPlayer player = new MediaPlayer();
player.setDisplay(holder);

player.setDataSource(getAssets().openFd(fileName).getFileDescriptor());
player.prepareAsync();
player.setOnPreparedListener(new OnPreparedListener() {

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

现在我得到了一个如下的异常:

代码语言:javascript
复制
java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed

除了在启动时将文件复制到SD卡之外,似乎没有其他方法,这似乎是浪费时间和内存。

EN

回答 13

Stack Overflow用户

发布于 2011-12-23 20:40:10

## Perfectly Working since Android 1.6 ##

代码语言:javascript
复制
getWindow().setFormat(PixelFormat.TRANSLUCENT);
VideoView videoHolder = new VideoView(this);
//if you want the controls to appear
videoHolder.setMediaController(new MediaController(this));
Uri video = getUriFromRawFile(context, R.raw.your_raw_file);
//if your file is named sherif.mp4 and placed in /raw
//use R.raw.sherif
videoHolder.setVideoURI(video);
setContentView(videoHolder);
videoHolder.start();

然后

代码语言:javascript
复制
public static Uri getUriFromRawFile(Context context, @ResRaw int rawResourceId) {
    return Uri.Builder()
        .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
        .authority(context.getPackageName())
        .path(String.valueOf(rawResourceId))
        .build();
}

## Check complete tutorial ##

票数 122
EN

Stack Overflow用户

发布于 2013-03-05 22:11:43

代码语言:javascript
复制
String UrlPath="android.resource://"+getPackageName()+"/"+R.raw.ur file name;
videocontainer.setVideoURI(Uri.parse(UrlPath));
videocontainer.start();

其中videoview类型的videocontainer。

票数 11
EN

Stack Overflow用户

发布于 2011-08-26 02:54:28

尝试:

代码语言:javascript
复制
AssetFileDescriptor afd = getAssets().openFd(fileName);
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3028717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档