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