安卓 - 从内部存储器播放视频



我要求能够保存和播放内部存储器中的视频。这些文件混合了.mp4和.3gp格式。我的问题有两个部分 - 保存文件和播放。

保存文件

我知道有两种方法可以将视频保存到内部存储器中:

1. FileOutputStream f = context.openFileOutput(videoName, MODE_WORLD_READABLE);
2. FileOutputStream f = new FileOutputStream(internalFilePath+File.separator+videoName);
        where internalFilePath is obtained separately by using getFilesDir() function.

问题:我只能播放使用#1而不是上面的#2保存的视频。为什么?我收到错误,例如: "无法播放此视频"

是因为 #2 存储的文件无法被视频播放应用程序读取,因为它们是我的应用程序私有的吗?但是,如何同时使我的文件私密且可播放呢?我想这就是问题的第二部分适合的地方。

回放

我知道在应用中播放视频的三种方法:

  1. 使用 ACTION_VIEW 构建 Intent,将数据类型设置为适当的 MIME 类型,startActivity(intent) 并让已安装的应用程序负责播放。
  2. 使用视频视图。尽管我个人不喜欢这种方法,因为涉及的编码量很大。
  3. 使用媒体播放器类。

问:考虑到我将文件存储在内部存储器中,以下哪种方法最适合播放?

当您将

视频保存到内部存储时,该视频只能由该应用程序访问,其他任何应用程序都无法使用该视频。在您的情况下,您已经展示了两种将视频保存到文件的方法。

  FileOutputStream f = context.openFileOutput(videoName, MODE_WORLD_READABLE);

这样您就可以播放文件,因为您已将模式设置为MODE_WORLD_READABLE。MODE_PRIVATE 使你的应用专用。这就是为什么您可以通过这种方式使用其他应用程序的视频文件,因为您的模式mode_world_readable并且当您以第二种方式保存文件时,它不会播放,因为该文件再次仅对您的应用程序私有。

要播放从第二种方法保存的视频,您可以尝试以下代码:

  FileInputStream fileInputStream = new FileInputStream(filePath);
   mediaPlayer.setDataSource(fileInputStream.getFD());

我想这应该有效。

编辑:请根据您的项目需要更改上述代码片段变量。

来源: http://developer.android.com/guide/topics/data/data-storage.html#filesInternal

最新更新