Android开发:如何播放assets下的mp4文件
Posted 页子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发:如何播放assets下的mp4文件相关的知识,希望对你有一定的参考价值。
1.
public class CustomVideoView extends VideoView public CustomVideoView(Context context) super(context); public CustomVideoView(Context context, AttributeSet attributeSet) super(context,attributeSet); public CustomVideoView(Context context,AttributeSet attributeSet,int defStyle) super(context,attributeSet,defStyle); @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) int width=getDefaultSize(0,widthMeasureSpec); int height=getDefaultSize(0,heightMeasureSpec); setMeasuredDimension(width,height);
2.
<com.for3ms.et.widget.CustomVideoView android:id="@+id/videoView" android:layout_width="match_parent" android:layout_height="200dp" />
3.
4.
String file_path=mActivity.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString()+"/video"; //使用VideoView播放视频 VideoView videoView = mBind.videoView; String path=file_path+"/dota_montage_02.mp4"; Log.d("播放地址",path); videoView.setVideoPath(path); //创建MediaController对象 MediaController mediaController = new MediaController(mActivity); //绑定mediaController videoView.setMediaController(mediaController); videoView.requestFocus(); videoView.start(); mBind.videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() @Override public void onCompletion(MediaPlayer mp) mBind.videoView.start(); );
ending~
如何从资产文件夹加载视频? (用 VideoView 播放它们)
【中文标题】如何从资产文件夹加载视频? (用 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以上是关于Android开发:如何播放assets下的mp4文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 android 的 videoview 中播放 .mp4 视频?
如何使用远程 URL 在 Android 模拟器中播放 mp4 视频?