如何从资产文件夹加载视频? (用 VideoView 播放它们)
Posted
技术标签:
【中文标题】如何从资产文件夹加载视频? (用 VideoView 播放它们)【英文标题】:How to load videos from assets folder? (to play them with VideoView) 【发布时间】:2012-01-06 08:21:48 【问题描述】:我需要从 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 打开视频,它可以完美运行,那么问题是当我尝试从资产文件夹加载视频时。
我做错了什么?
谢谢
【问题讨论】:
【参考方案1】:我不知道如何从资产文件夹加载视频。但我知道如何从 /res/raw/ 文件夹加载它们:
String uriPath = "android.resource://yourapplicationpackage/raw/videofilenamewithoutextension";
Uri uri = Uri.parse(uriPath);
video.setVideoURI(uri);
【讨论】:
我没有使用原始文件夹,我正在使用资产 只需将 raw 部分更改为 ** assets** .... 晚了,但对现在正在查看它的人会有所帮助 您好,我使用 VideoView 播放原始文件夹中的视频,但低于 2.3 的较低版本无法播放视频。它显示错误“无法播放视频”请指导我哪里有问题,因为视频在其他版本中播放。 @NidhiGondhia 试试这个:String uriPath = "android.resource://" + getPackageName() + "/" + R.raw.my_video_file; 是 com.abc.xyz 或类似 com/abc/xyz 的包名称吗?【参考方案2】:已编辑
试试:
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();
【讨论】:
我没有使用 MediaController,因为我需要隐藏 videoview 的控件....然后我不知道如何将文件描述符分配给 videoView 对象。 also.... 方法 setDataSource(FileDescriptor, long, long) 对于 MediaController 类型未定义 当你第一次问这个问题时,MediaController
。现在我很困惑你的代码实际上是什么样的
我现在尝试使用 MC 并且... 方法 setDataSource(FileDescriptor, long, long) 对于 MediaController 类型未定义
我试图让你的代码工作,但我做不到,我不明白如何用我的代码来识别你的代码....我不知道我做错了什么。我编辑了我的问题,检查一下。【参考方案3】:
无法从\assets
播放.mp4 文件,您必须从\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();
【讨论】:
经过几个小时的搜索,这是解决我问题的唯一答案!非常感谢! 问题是关于assets
。不是raw
。
这是不可能的,所以我给了另一个选择。
有可能!刚刚给了asset:///youvideo.mp4以上是关于如何从资产文件夹加载视频? (用 VideoView 播放它们)的主要内容,如果未能解决你的问题,请参考以下文章
无法从嵌套组件中的资产文件夹加载图像(Vue.js 2.0 / Webpack)
如何让 Flutter 的 webview 处理从本地 html 加载的本地资产?