ios快速將顯卡中數據讀出壓縮成視頻--cocos2dx擴展

手機平臺性能是個關鍵問題。 ios

壓縮視頻分紅3個步驟: git

讀取顯卡數據, 使用編碼器壓縮,保存文件。 github

使用libav 壓縮的時候,軟件編碼器效率不夠,在itouch5上面只能作到5-6 fps。  iphone

所以使用ios平臺自帶的AVFoundtion庫來作,硬件加速編碼,具體作法參考 ide

http://stackoverflow.com/questions/9661259/record-the-drawing-as-a-m4v-video-file-opengl/9672890#9672890 函數

使用corevideo 庫提供的函數, 在itouch5上能作到12-13fps。 性能

接下來的瓶頸主要在從顯卡中讀取數據上面 即glReadPixel  編碼

ios 提供一種texturecache 能夠將cpu存儲器和顯卡存儲 map到一塊兒,可是就不能像操做cpu存儲同樣方便的改動這塊區域的數據了, 具體硬件機制不是很瞭解, 可是這樣能夠大大下降 消耗的時間,只作獲取數據 壓縮視頻任務的話 能夠達到60fps的效率。 具體參考 視頻

http://stackoverflow.com/questions/9550297/faster-alternative-to-glreadpixels-in-iphone-opengl-es-2-0 遊戲

這兩個回答是一我的,這位仁兄的項目:

https://github.com/BradLarson/GPUImage

主要參考其中的 MovieWrite 類。


所以要在cocos2dx上面擴展遊戲視頻錄製的功能,則須要改動

CCDirector 添加錄製遊戲狀態,將當前遊戲場景繪製到texture 中

接着將這個texture內容繪製到屏幕上用於顯示

接着將這個texutre繪製到 視頻cache 的framebuffer中 用於生成視頻。

這塊的代碼能夠參考CCRenderTexture 部分的代碼。


github樣例代碼:

https://github.com/liyonghelpme/iosNozomiVideo

相關文章
相關標籤/搜索