如題,通過檔案映射把加密后的本地視頻檔案映射進記憶體,然后解密后直接在記憶體中播放,不想做成解密后存盤再播放,雖然media player控制元件播放本地檔案很簡單,但是我要做成 對解密后的記憶體視頻資料直接播放,有比較好的辦法嗎?
加、解密已有開源庫可以使用,主要問題是如何直接播放記憶體中解密后的視頻資料
uj5u.com熱心網友回復:
將記憶體中的資料轉換成rgb,然后直接傳到界面上進行繪制uj5u.com熱心網友回復:
這要看第三方的播放器支不支持資料流的方式進行播放,如果支持最好,直接將資料傳給播放器插件就行。如果播放器只支持以路徑形式的方式的介面,那么可以把檔案釋放到一個隱藏目錄然后播放,完了洗掉。或者,給播放器加密后的檔案路徑,但是HOOK播放器的相關函式,比如HOOK readfile,在讀取時解密。
或者像樓上說的那樣,自己解碼幀資料,然后自己畫出來。
uj5u.com熱心網友回復:
如果用VC中的media player 控制元件實作解密播放,具體需要hook 哪些函式呢?
uj5u.com熱心網友回復:
我沒有用過這個控制元件,大致說下我的猜測,首先需要HOOK CreateFile函式,當呼叫控制元件相關介面函式設定需播放檔案路徑后,控制元件應該會呼叫CreateFile函式打開檔案,HOOK這個函式,然后當檔案名為需播放檔案時,正常打開檔案并保存得到的檔案句柄。然后需HOOK ReadFile,當控制元件呼叫ReadFile時,并且檔案句柄為需播放檔案句柄時,你就知道控制元件此時需要讀取需播放檔案的內容,然后根據ReadFile的引數值讀取檔案相應的內容并且解密,然后回傳給控制元件。
比如控制元件呼叫ReadFile獲取檔案前10個位元組,首先你要知道ReadFile讀取的是不是加過密的播放檔案,控制元件也有可能是讀取其他檔案,這就不需要解密,所以你需要首先得到CreateFile打開播放檔案的句柄,然后與ReadFile中的句柄進行比較。如果兩個句柄一樣,說明ReadFile是讀取的播放檔案,但是播放檔案是經過加密的,讀取出來的比如是1234567890,你就需要解密,解密過后的比如是0987654321,然后再回傳給控制元件,這樣控制元件得到的就是正常的播放檔案資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/121853.html
標籤:基礎類
