使用VideoView从内部存储android播放视频文件

bar*_*das 9 android media-player android-videoview

我试图播放存储在Android内部存储中的视频.但是,无论我做什么,它都会以-1错误或-38错误返回.两者似乎都是相当普遍的错误,因此不太清楚.

我想知道是否可以使用VideoView而不是MediaPlayer实例来播放本地存储中的视频文件.

我的应用程序涉及的步骤包括,

  1. 从远程URL下载文件
  2. 将文件存储在内部存储中(注意我使用约定来确保它具有全局读取权限.即

    openFileOutput(file_name, Context.MODE_WORLD_READABLE);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 稍后从此位置读取媒体文件,然后在videoView中播放.

    String filePath = "file://" + getFilesDir()+File.separator+file_name;
    Uri videoUri = Uri.parse(filePath);
    Log.d("Video Player", filePath);
    videoPlayer.setVideoURI(videoUri);
    
    Run Code Online (Sandbox Code Playgroud)

我还浏览了StackOverflow中的其他链接,指出我需要实现CustomContentProvider才能读取这些文件.是否有直接访问文件uri并将其设置为videoView的方法,而无需使用创建自定义内容提供程序并使用mediaPlayer而不是videoView.

使用其他StackOverflow引用

  1. Android - 从应用的私人文件夹加载视频
  2. 视频视频可以播放存储在内部存储中的视频吗?

Bas*_*sil 5

请试试这个.我已经解释了在此链接上播放来自原始文件夹的视频的过程:视频播放器不工作!.在那,如果你修改

Uri uri = Uri.parse("android.resource://" + getPackageName() + "/"+R.raw.VideoName);
Run Code Online (Sandbox Code Playgroud)

Uri uri = Uri.parse(Environment.getExternalStorageDirectory()+"<path to your video>");
Run Code Online (Sandbox Code Playgroud)

例如:

Uri uri = Uri.parse(Environment.getExternalStorageDirectory()+"/dcim/camera/2012-05-15_17-50-39_319.3gp");
Run Code Online (Sandbox Code Playgroud)

我想会解决你的问题.请记住在清单上提供必要的权限.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)

  • 嗨,这很好,当我将视频存储在外部存储设备上时,如何访问存储在设备内部存储器中的路径中的视频.**注意**我没有将视频存储在应用程序的原始文件夹中. (2认同)

Jos*_*ter 5

将其复制到外部存储(暂时)

我遇到了和你一样的问题,只是简单地将文件临时复制到外部存储器,然后播放它,然后删除临时文件.

以下是我用来执行此操作的示例代码:

try {
  // Copy file to temporary file in order to view it.
  temporaryFile = generateTemporaryFile(file.getName());
  FileUtils.copyFile(file, temporaryFile);
  previewVideo(temporaryFile, videoView);

} catch (IOException e) {
  e.printStackTrace();
}


# Helpers

protected File generateTemporaryFile(String filename) throws IOException {
  String tempFileName = "20130318_010530_";

  File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);

  File tempFile = File.createTempFile(
      tempFileName,       /* prefix     "20130318_010530" */
      filename,           /* filename   "video.3gp" */
      storageDir          /* directory  "/data/sdcard/..." */
  );

  return tempFile;
}

protected void previewVideo(File file, VideoView videoView) {
  videoView.setVideoPath(file.getAbsolutePath());

  MediaController mediaController = new MediaController(this);

  videoView.setMediaController(mediaController);

  mediaController.setMediaPlayer(videoView);

  videoView.setVisibility(View.VISIBLE);

  videoView.start();
}
Run Code Online (Sandbox Code Playgroud)

  • 唯一对我有用的东西 (2认同)