來源:http://blog.csdn.net/lezhiyong
WebRTC是google一項在瀏覽器內部進行實時視頻和音頻通信的技術,其他關於WebRTC具體介紹和來源,大家google一下基本能知道,Webrtc裏面的系統架構清晰精妙,代碼風格良好,如此好的東西能開源出來,無論是學習還是使用,我們受益匪淺。
Webrtc的底層的結構相當清晰,就視頻來說分視頻採集、視頻處理、視頻編解碼、視頻顯示、視頻錄製幾個典型模塊。
所屬模塊:video_render_module
接口路徑:webrtc\trunk\src\modules\video_render\main\interface\video_render.h
代碼路徑:webrtc\trunk\src\modules\video_render\main\source
通過video_render.hVideoRender提供的對外接口完成render的創建和調用,代碼結構如下圖所示:
可見video_render模塊通過繼承IVideoRender實現多操作系統以及第三方數據的支持,通過繼承IVideoRenderWin實現D3D和DirectDraw支持。最後通過VideoRender提供的接口給應用層調度。
video_render提供的功能挺強大的,支持插入字幕,支持插入圖片、支持一個視頻窗口顯示多路視頻,支持D3D,DDRAW,支持多操作系統,這些功能足夠勝任日常使用了。
關於video_render模塊VideoRender的使用方法,可以從webrtc\trunk\src\modules\video_render\main\test\testAPI目錄下的testAPI.cpp文件瞭解得清清楚楚。
大致步驟:
1、 創建VideoRender對象:
VideoRender* renderModule= NULL;
renderModule =VideoRender::CreateVideoRender(myId, window, false, windowType);
VideoRenderCallback* renderCallback0 = renderModule->AddIncomingRenderStream(streamId0,0, 0.0f, 0.0f, 1.0f, 1.0f);
assert(renderCallback0 != NULL);
2、獲取VideoRenderCallback並通過renderModule->StartRender啓動render
const int streamId0 = 0;
VideoRenderCallback* renderCallback0 = renderModule->AddIncomingRenderStream(streamId0,0, 0.0f, 0.0f, 1.0f, 1.0f);
error = renderModule->StartRender(streamId0);
3、調用RenderFrame逐幀顯示
renderCallback0->RenderFrame(streamId0, videoFrame0);
4、停止render
error = renderModule->StopRender(streamId0);
error = renderModule->DeleteIncomingRenderStream(streamId0);