Android - 从内存中播放视频

时间:2013-11-13 14:56:30

标签: android video

我要求能够从内存中保存和播放视频。这些文件混合了.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存储的文件无法被视频播放应用程序读取,因为它们对我的应用是私有的?但是,如何让我的文件同时保密并可播放?这是我猜的问题的第二部分。

PLAYBACK

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

  1. 使用ACTION_VIEW构建一个intent,将数据类型设置为适当的mime类型,startActivity(intent)并让安装的应用程序负责播放。
  2. 使用VideoView。虽然我个人不喜欢这种方法,因为涉及的编码量很大。
  3. 使用MediaPlayer类。
  4. 问题:考虑到我将文件存储在内部存储器中,哪种方法最适合播放?

1 个答案:

答案 0 :(得分:0)

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

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

这样您就可以播放文件,因为您已将模式设置为MODE_WORLD_READABLE。 MODE_PRIVATE使其适用于您的应用。这就是为什么你可以通过这种方式使用来自其他应用程序的视频文件,因为你的模式是mode_world_readable,当你以第二种方式保存文件时,它不会播放,因为该文件只对你的应用程序是私有的。 / p>

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

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

我想这应该有效。

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

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