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项目assets目录中的内容?

如何在 android 的 videoview 中播放 .mp4 视频?

Flutter 加载本地文件在Android设备报错

如何使用远程 URL 在 Android 模拟器中播放 mp4 视频?

android mediaplayer 播放 mp4 的问题

Android应用开发中的Pre-Load或Pre-Buffer .mp4视频