Android 螢幕錄製(Surface\ Texture 錄製)工具庫
你是否常常因為產品需要錄製螢幕而不要狀態列而煩悶 ??
你是不是常常因為產品需要錄製直播視訊而加班 ??
你是不是常常因為要對一個surface同時錄製兩種Texture 分別存在的視訊 (!!???)而噁心致死?
嗯。。。我是第三種。於是便誕生了下面這個工具庫。也希望能夠解決對OpenGLES 和 視訊編碼不熟悉的同學的噩夢
ZTextureRecorder 的核心功能是,接收一個紋理,然後在每一幀繪製這個紋理(同時和外界的聲音)最後編碼成為一個視訊檔案。
先上程式碼:戳我看原始碼
目前ZTextureRecorder 支援 使用MediaRecorder 和MediaCodec(硬編碼API) 進行錄製。支援 Texture_2D普通紋理和 Texture_Ext Android擴充套件紋理作為輸入。
需要注意的是,由於庫本身不建立GL執行緒,因此需要傳入GLContext 或者 在一個GL執行緒中初始化(以便通過Android EGL API 獲取當前執行緒的 GLContext)。 這裡會推薦使用GLSurfaceView 去承載和初始化GL上下文,當然如果是離屏渲染,可能需要自行建立GL執行緒及上下文。
怎麼使用?
只需要五步就可以管理對texture 的錄製,並輕鬆生成mp4 檔案。
- init capturing params: 用紋理的寬高, 檔案地址、以及 紋理型別
capturingManager.initCapturing(textureWidth, textureHeight, toSaveFilePath, Texture2dProgram.ProgramType.TEXTURE_EXT, encoderType, eglContext);
- start capturing manager:
capturingManager.startCapturing()
- pass texture of each frame into it
capturingManager.captureFrame(textureId)
- stop at proper time
capturingManger.stop();
- release on component destroyed
capturingManger.release();
結構和核心技術點
結構
主要由GL圖片幀產生執行緒原始碼 和編碼核心模組組成。
這裡主要是通過OpenGL 再次將Texture 渲染到編碼核心模組提供的Surface 上,由於OpenGL 相關資訊自成體系,並且較多,感興趣的同學可以通過這篇文章 學習
其中編碼核心模組分為mediaRecorder模組和mediaCodec 模組。
前者是高度整合的API,只包含簡單呼叫。原始碼
後者中集成了音訊錄製核心原始碼 和幀錄製核心原始碼 。兩個執行緒錄製的同時需要通過Muxer 進行合成,以得到包含畫面和聲音的mp4 檔案
That's all