您的位置:首页 > 其它

WebRTC源码分析1视频显示

2012-07-22 21:16 190 查看
来源: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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: