程序包内资源的Android路径
我试图为Android示例项目MediaPlayerDemo添加一个视频路径 我可以播放存储在SD卡中的视频,路径为 "file:///sdcard/dcim/a.m4v" 但我无法播放存储在res/drawable中的视频。路径是 “android.resource://”+this.getPackageName()+“/”+R.drawable.a 我可以在调试模式下读取视频的id,但无法重放视频 如何解决 更新 感谢您的回复,到目前为止,我已尝试:程序包内资源的Android路径,android,resources,path,media-player,Android,Resources,Path,Media Player,我试图为Android示例项目MediaPlayerDemo添加一个视频路径 我可以播放存储在SD卡中的视频,路径为 "file:///sdcard/dcim/a.m4v" 但我无法播放存储在res/drawable中的视频。路径是 “android.resource://”+this.getPackageName()+“/”+R.drawable.a 我可以在调试模式下读取视频的id,但无法重放视频 如何解决 更新 感谢您的回复,到目前为止,我已尝试: 将视频放入资源中,将路径设置为“file
我的视频是1.8Mb,这有关系吗?仅供参考,drawable用于存储应用程序的图标、图像和可绘制内容。因此,您可以将相同的视频放在
资产或原始文件夹中。在res文件夹中创建一个名为原始的新文件夹,如果已经创建,就让它继续吧。复制您的可播放视频文件(例如,myvideo.mp4)到raw文件夹。在应用程序中使用以下代码
String uriPath = "android.resource://"+getPackageName()+"/raw/myvideo";
Uri uri = Uri.parse(uriPath);
mVideoView.setVideoURI(uri);
我测试过,它对我有用。如果视频可以从SD卡播放,那么只有它可以从原始文件夹播放,否则它会显示一个对话框,上面写着“无法播放视频”
试试看,让我知道发生了什么。我找到了解决办法,但不是一条直截了当的道路
首先,文件未找到的问题不是路径问题,这是因为权限问题
为了解决这个问题,许多人建议将文件复制到FileInputStream中。但仍然存在文件未找到的问题
但是文件可以写入Inputstream,但是Mediaplayer类的setDataSource()不接受Inputstream,因此需要通过BufferedOutputStream将Inputstream写入临时文件
最后,setDataSource(tempfile_path)没有错误。这个问题很老了,仍然没有得到很好的回答,所以我将在这里回答
首先,不要将视频放在资产文件夹中。这是一种不好的做法。请创建另一个文件夹(最好是名为raw的文件夹)
第二件事是,请不要使用m4v格式。请使用mp4视频
以下是插入视频的代码:
//Here it is assumed here that the file name of video in raw folder is demo
VideoView video = (VideoView) findViewById(R.id.videoView);
video.setVideoPath("android.resource//" + getPackageName() + "/" + R.raw.demo);
video.start();
希望这能澄清你的疑问!用这种方式“Uri myUri=Uri.parse”(“android.resource://“+getPackageName()+“/”+R.drawable.a);videoHolder.setVideoURI(myUri)'但将您的视频作为Mayani ans放入资产或原始文件夹的正确方法。我尝试了许多方法,但仍然获得一个setDataSourceFD失败:状态=0x80000000确定,然后发布您的代码和日志?谢谢。但我仍然无法在这两个文件夹中播放视频。我尝试了您的方法,仍然不起作用。使用API级别10。我甚至无法通过VideoVi从SD卡播放视频ew.我正在使用MediaPlayer。无论如何,谢谢!我终于能够播放我的本地视频了!Thks但别忘了删除uri路径中的文件扩展名,不知道为什么,直到我删除了。mp4 extensionFile tempfile=file.createTempFile(“MediaPlayer”,“temp”);String tempfilepath=tempfile.getAbsolutePath();FileOutputStream fo=新的FileOutputStream(tempfile);BufferedOutputStream bis=新的BufferedOutputStream(fo);字节buf[]=新字节[128];do{int numread=is.read(buf);如果(numread请使用帖子下方的“编辑链接”按钮添加更多信息,而不是使用评论部分。阅读起来要困难得多。