【问题标题】:How to load videos from assets folder? (to play them with VideoView)如何从资产文件夹加载视频? (用 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 打开视频,它可以完美运行,那么问题是当我尝试从资产文件夹加载视频时。

我做错了什么?

谢谢

【问题讨论】:

    标签: android mp4 assets


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多