1

我无法使用 VideoView 中的 MediaController 播放资产文件夹中的视频。我查看了许多堆栈溢出答案,但没有一个有效。当我使用原始文件夹或 SD 卡文件夹路径时,它可以完美运行。

下面是我的代码:

    private void getVideoFromAssets() {

    try {
        // Start the MediaController
        MediaController mediacontroller = new MediaController(
                VideoViewActivity.this);
        mediacontroller.setAnchorView(videoview);
        // Get the URL from String VideoURL
        Uri video = Uri.parse("file:///android_asset/test.mp4");
        videoview.setMediaController(mediacontroller);
        videoview.setVideoURI(video);


    } catch (Exception e) {
        Log.e("Error", e.getMessage());
        e.printStackTrace();

    }

    videoview.requestFocus();
    videoview.setOnPreparedListener(new OnPreparedListener() {
        // Close the progress bar and play the video
        public void onPrepared(MediaPlayer mp) {

            videoview.start();

        }
    });


}

相同的代码适用于 raw 和 sd 卡文件夹,同时更改各自的路径。但它不适用于资产。任何帮助将不胜感激。谢谢。

4

2 回答 2

1

“file:///android_asset/...”仅适用于 WebView,您需要传递一个像“content://your.authority/path.to.resource”这样的 Uri,这是您需要创建自定义 ContentProvider 和覆盖其 openAssetFile

于 2013-11-11T10:47:01.963 回答
1

尝试:

   AssetFileDescriptor afd = getAssets().openFd(fileName);
   player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
于 2013-11-11T10:29:22.883 回答