手機平臺性能是個關鍵問題。 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