2012-02-13 31 views
3

我試圖修改(擴展)FileInputStream類,以便我可以打開加密文件並將該流用於MediaPlayer的setDataSource(FileDescriptor)。問題是我不知道應該重寫哪個方法來進行流內的解密。我嘗試覆蓋所有的read()方法,但mediaPlayer似乎沒有使用它們。修改mediaPlayer的FileInputStream setDataSource

有什麼建議嗎?

+0

你正在使用什麼樣的加密? – st0le 2012-02-24 09:06:24

+0

我使用RC4。據說當從FileInputStream中讀取()時,我可以即時解密它。我已經實現了與文件服務器相同的即時體系結構,因此我可以在媒體播放器上提供網址,但是我想在不使用服務器的情況下執行此操作。 – josephus 2012-02-24 09:13:30

+0

可能是一個愚蠢的問題,但你試過'新的FileInputStream(新的CipherInputStream(),)'ofcourse配置RC4的CipherInputStream – st0le 2012-02-24 09:24:00

回答

5

我不認爲MediaPlayer接受任何種類的InputStream。您無法修改在MediaPlayer中使用的文件讀取數據。

MediaPlayer接受FileDescriptor(在本機代碼中處理爲真實文件讀取,不回叫Java)。 MediaPlayer支持http URL。

如果您確實需要修改傳遞的數據,請考慮使用local http server和帶有URI的setDataSource。

+0

你是對的,經過數小時的嘗試和失敗,我終於放棄了爲MediaPlayer定製輸入流。根據您和大多數其他來源的建議,回退計劃創建一個本地http服務器,可以在數據發送給播放器時對其進行加密。這並不像我想象的那麼容易,因爲您必須處理可恢復的下載以支持連接到它的android MediaPlayer(提示:範圍)。最後,這是唯一的方法(除了將視頻分成一口大小,削弱了系統的安全性) – josephus 2012-02-27 10:00:33

+0

@JosephusVillarey所以你使用這個解決方案,它的工作正常嗎?你能分享你的部分代碼嗎?你正在修改你的數據字節並將它寫在本地HTTP服務器上嗎?在你爲這個HTTP服務器創建一個URI並且MediaPlayer讀取它之後?謝謝。 – Derzu 2013-02-02 22:20:06

+0

是的,確切地說。我無法與你分享我的代碼,但是我可以將你指向基於我的代碼的http服務器代碼:http://elonen.iki.fi/code/nanohttpd/ – josephus 2013-02-03 11:59:56

相關問題