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);



你可能感兴趣的:(音视频与多媒体)