【问题标题】:Android - Video Playback from internal memoryAndroid - 从内部存储器播放视频
【发布时间】:2013-11-13 23:19:52
【问题描述】:

我需要能够从内存中保存和播放视频。这些文件混合了 .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 类。

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

【问题讨论】:

    标签: android video


    【解决方案1】:

    当您将视频保存到内部存储时,该视频只能由该应用访问,其他应用无法使用该视频。就您而言,您已经展示了两种将视频保存到文件中的方法。

      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());
    

    我想这应该可行。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 2013-10-24
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多