在很多語音視訊軟體系統中,經常有将實時的音頻或視訊錄制為檔案儲存到磁盤的需求,比如,視訊監控系統中錄制監控到的視訊、視訊會議系統中錄制整個會議的過程、語音通話系統中錄制完整的對話内容、等等。
最近正在做的一個網絡招聘平台的項目,其中有一個子產品是這樣的,應聘者可以通過該系統的用戶端錄制自己的視訊(自我介紹)上傳到伺服器,而後,招聘者會在合适的時候浏覽這些應聘者的視訊。該子產品涉及到的主要技術就是語音視訊錄制技術,它需要把從麥克風采集到的語音資料和從攝像頭采集到的視訊資料編碼并寫到.mp4檔案中。要完成這些功能,具體來說,需要解決如下幾個技術問題:
(1)麥克風資料采集
(2)攝像頭資料采集
(3)音頻資料編碼
(4)視訊資料編碼
(5)将編碼後的資料按.mp4檔案格式寫入到檔案容器中。
(6)保證音頻視訊播放的同步。

接下來,我們來說說在這個demo中是如何一個個解決上述問題的。
1.語音資料采集
我們可以使用OMCS的MicrophoneConnector元件連接配接到自己的麥克風裝置,這樣,揚聲器就會播放采集到的語音,而且,我們可以通過通過IMultimediaManager暴露的AudioPlayed事件,來捕獲正在播放的語音資料。
2.視訊資料采集
同樣的,我們可以使用CameraConnector控件連接配接到自己的攝像頭裝置,然後,定時器每隔100ms(假設幀頻為10fps)調用其GetCurrentImage方法獲得正在繪制的Bitmap。
3.後續步驟
後續的4步都可以交由MFile元件搞定,我們大概看一下MFile元件中VideoFileMaker類的簽名,就知道怎麼做了:
首先調用Initialize方法完成初始化,然後,循環調用AddAudioFrame和AddVideoFrame方法,當完成視訊錄制時,則調用Close方法,即可。很簡單,不是嗎?
4.主要代碼
首先,我們以aa01使用者登入到OMCS伺服器,然後,在拖拽一個CameraConnector控件和一個MicrophoneConnector元件到主窗體上,然後,讓它們都連到自己的攝像頭和麥克風。
接下來,我們初始化VideoFileMaker元件:
參數中設定,使用h.264對視訊進行編碼,使用aac對音頻進行編碼,并生成mp4格式的檔案。然後,我們可以通過OMCS擷取實時的音頻資料和視訊資料,并将它們寫到檔案中。
當想結束錄制時,則調用Close方法:
這樣錄制生成的test.mp4檔案就可以直接用我們的QQ影音或暴風影音來播放了。
更多細節,請檢視demo源碼。
2015.6.18 整理全部相關demo如下: