WebRTC源碼分析1視頻顯示

來源: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);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章