0

我需要能够保存和播放内部存储器中的视频。这些文件混合了 .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 构建意图,将数据类型设置为适当的 mime 类型 startActivity(intent) 并让已安装的应用程序负责播放。
  2. 使用视频视图。虽然我个人不喜欢这种方法,因为涉及的编码量很大。
  3. 使用 MediaPlayer 类。

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

4

1 回答 1

0

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

  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

于 2013-11-13T15:19:52.527 回答