【问题标题】:Modifying FileInputStream for mediaPlayer setDataSource为 mediaPlayer setDataSource 修改 FileInputStream
【发布时间】:2012-02-13 08:18:34
【问题描述】:

我正在尝试修改(扩展)FileInputStream 类,以便我可以打开加密文件并将流用于 MediaPlayer 的setDataSource(FileDescriptor)。问题是我不知道应该重写哪个方法来在流中进行解密。我尝试覆盖所有 read() 方法,但 mediaPlayer 似乎没有使用它们。

有什么建议吗?

【问题讨论】:

  • 您使用的是哪种加密方式?
  • 我正在使用 RC4。据说在从 FileInputStream 读取()时,我可以即时解密它。我已经为文件服务器实现了相同的动态架构,所以我可以在媒体播放器上提供 url,但我想在不使用服务器的情况下做到这一点。
  • 可能是一个愚蠢的问题,但你试过new FileInputStream(new CipherInputStream(),)当然为RC4配置CipherInputStream
  • 如果程序无法对数据进行任何修改,则加密类型无关紧要。首先考虑主要问题 - 如何修改正在读取的数据。
  • @st0le 我也尝试过使用 cipherinputstream。一个问题是一些 android 版本/手机没有 RC4 的本机实现,所以我必须自己实现它。此外,FileInputStream 没有允许您使用另一个输入流实例化它的构造函数。我也无法将 CipherInputStream 设置为 dataSource,因为它没有 getFD() 方法。

标签: android media-player fileinputstream


【解决方案1】:

我认为 MediaPlayer 不接受任何类型的 InputStream。您不能修改从 MediaPlayer 中使用的文件读取的数据。

MediaPlayer 接受 FileDescriptor(在本机代码中处理为从真实文件中读取,不回调 Java)。并且 MediaPlayer 接受 http URL。

如果您确实需要修改传递的数据,请考虑使用 local http server 和带有 URI 的 setDataSource。

【讨论】:

  • 你说得对,经过数小时的尝试和失败,我终于放弃了为 MediaPlayer 提供自定义输入流。正如您和大多数其他消息来源所建议的那样,后备计划是创建一个本地 http 服务器,该服务器可以在将数据发送到播放器时对其进行加密。这并不像我想象的那么容易,因为您必须处理可恢复下载以支持连接到它的 android MediaPlayer(提示:范围)。最后它是唯一的方法(除了将视频分成小块,削弱系统的安全性)
  • @JosephusVillarey 所以你使用了这个解决方案,它工作正常吗?你能分享你的部分代码吗?您是否正在修改数据字节并将其写入本地 HTTP 服务器?在你为这个 HTTP 服务器创建一个 URI 并且 MediaPlayer 从中读取之后呢?谢谢。
  • 是的,完全正确。我无法与您分享我的代码,但我可以将您指向我所基于的 http 服务器代码以使我的工作:elonen.iki.fi/code/nanohttpd
  • @JosephusVillarey 好的,我只使用了由 Mice 回答的本地 http 服务器,它可以工作。没有必要使用 nanohttpd 代码。谢谢。
  • @JosephusVillarey 在当前下载的文件由服务器提供给媒体播放器的情况下,我可以使用鼠标提到的本地 http 服务器吗
猜你喜欢
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
相关资源
最近更新 更多