此部分为webrtc视频渲染显示,代码结构如下:

其实此部分代码与《webrtc视频引擎之vedio_capture_module介绍》的代码结构一样

1,图中能够直接看到的.h和.cc文件也是一个适配作用,用于根据系统平台适配采用某部分进行视频渲染;

2, android文件夹用于在android平台渲染显示视频图像;

3, IOS文件夹用于在IOS平台渲染显示视频图像;

4, linux文件夹用于在linux平台渲染显示视频图像;

5, mac文件夹用于在mac平台渲染显示视频图像;

6,windows文件夹用于在windows平台渲染显示视频图像;

render图像显示模块的接口类:

在调用该接口类创建实例对象的时候需要从构造函数传入 相关的显示参数, 如下:

const int32_t id,  //本路显示视频的ID,用户自定义,用于唯一区分本路视频即可
const VideoRenderType videoRenderType, // 此定于如下枚举<pre name="code" class="cpp">enum VideoRenderType
{kRenderExternal = 0, // ExternalkRenderWindows = 1, // WindowskRenderCocoa = 2, // MackRenderCarbon = 3,kRenderiOS = 4, // iPhonekRenderAndroid = 5, // AndroidkRenderX11 = 6, // LinuxkRenderDefault
};void* window, //用于显示视频的窗口对象指针
const bool fullscreen //是否需要全屏显示ModuleVideoRenderImpl(const int32_t id, const VideoRenderType videoRenderType, void* window, const bool fullscreen);

该接口还是StartRender 、StopRender等接口供外部调用控制视频渲染

</pre><pre code_snippet_id="1842801" snippet_file_name="blog_20160821_7_7573210" name="code" class="cpp">
class ModuleVideoRenderImpl: public VideoRender
{
public:/**   VideoRenderer constructor/destructor*/ModuleVideoRenderImpl(const int32_t id,const VideoRenderType videoRenderType,void* window, const bool fullscreen);virtual ~ModuleVideoRenderImpl();/**   Change the unique identifier of this object*/virtual int32_t ChangeUniqueId(const int32_t id);virtual int32_t TimeUntilNextProcess();virtual int32_t Process();/**   Returns the render window*/virtual void* Window();/**   Change render window*/virtual int32_t ChangeWindow(void* window);/**   Returns module id*/int32_t Id();/****************************************************************************   Incoming Streams****************************************************************************//**   Add incoming render stream*/virtual VideoRenderCallback* AddIncomingRenderStream(const uint32_t streamId,const uint32_t zOrder,const float left, const float top,const float right, const float bottom);/**   Delete incoming render stream*/virtual int32_tDeleteIncomingRenderStream(const uint32_t streamId);/**   Add incoming render callback, used for external rendering*/virtual int32_tAddExternalRenderCallback(const uint32_t streamId,VideoRenderCallback* renderObject);/**   Get the porperties for an incoming render stream*/virtual int32_tGetIncomingRenderStreamProperties(const uint32_t streamId,uint32_t& zOrder,float& left, float& top,float& right, float& bottom) const;/**   Incoming frame rate for the specified stream.*/virtual uint32_t GetIncomingFrameRate(const uint32_t streamId);/**   Returns the number of incoming streams added to this render module*/virtual uint32_t GetNumIncomingRenderStreams() const;/**   Returns true if this render module has the streamId added, false otherwise.*/virtual bool HasIncomingRenderStream(const uint32_t streamId) const;/***/virtual int32_tRegisterRawFrameCallback(const uint32_t streamId,VideoRenderCallback* callbackObj);virtual int32_t GetLastRenderedFrame(const uint32_t streamId,I420VideoFrame &frame) const;virtual int32_t SetExpectedRenderDelay(uint32_t stream_id,int32_t delay_ms);/****************************************************************************   Start/Stop****************************************************************************//**   Starts rendering the specified stream*/virtual int32_t <span style="color:#ff0000;">StartRende</span>r(const uint32_t streamId);/**   Stops the renderer*/virtual int32_t <span style="color:#ff0000;">StopRender</span>(const uint32_t streamId);/**   Sets the renderer in start state, no streams removed.*/virtual int32_t ResetRender();/****************************************************************************   Properties****************************************************************************//**   Returns the prefered render video type*/virtual RawVideoType PreferredVideoType() const;/**   Returns true if the renderer is in fullscreen mode, otherwise false.*/virtual bool IsFullScreen();/**   Gets screen resolution in pixels*/virtual int32_tGetScreenResolution(uint32_t& screenWidth,uint32_t& screenHeight) const;/**   Get the actual render rate for this stream. I.e rendered frame rate,*   not frames delivered to the renderer.*/virtual uint32_t RenderFrameRate(const uint32_t streamId);/**   Set cropping of incoming stream*/virtual int32_t SetStreamCropping(const uint32_t streamId,const float left, const float top,const float right, const float bottom);virtual int32_t ConfigureRenderer(const uint32_t streamId,const unsigned int zOrder,const float left, const float top,const float right, const float bottom);virtual int32_t SetTransparentBackground(const bool enable);virtual int32_t FullScreenRender(void* window, const bool enable);virtual int32_t SetBitmap(const void* bitMap,const uint8_t pictureId,const void* colorKey,const float left, const float top,const float right, const float bottom);virtual int32_t SetText(const uint8_t textId,const uint8_t* text,const int32_t textLength,const uint32_t textColorRef,const uint32_t backgroundColorRef,const float left, const float top,const float right, const float bottom);virtual int32_t SetStartImage(const uint32_t streamId,const I420VideoFrame& videoFrame);virtual int32_t SetTimeoutImage(const uint32_t streamId,const I420VideoFrame& videoFrame,const uint32_t timeout);virtual int32_t MirrorRenderStream(const int renderId,const bool enable,const bool mirrorXAxis,const bool mirrorYAxis);private:int32_t _id;CriticalSectionWrapper& _moduleCrit;void* _ptrWindow;bool _fullScreen;IVideoRender* _ptrRenderer;typedef std::map<uint32_t, IncomingVideoStream*> IncomingVideoStreamMap;IncomingVideoStreamMap _streamRenderMap;
};

有兴趣的同学朋友可以自行去研究每个设备是怎么显示视频,  至于每个设备如何显示视频这个后面都单独介绍,这里只做个整体的介绍。

webrtc视频引擎之video_render(视频渲染)介绍相关推荐

  1. 从0到1 构建实时音视频引擎

    最近几年,实时音视频领域越来越热,今年的疫情更是"火上浇油"了一把.网易智企旗下产品网易云信在实时音视频领域深耕多年,积累了不少实践经验.在本文里,笔者将以烹饪为比喻,深入浅出地将 ...

  2. anyRTC加持AI,打造下一代实时音视频引擎

    前言: 伴随着音视频技术高速发展,直播行业异军突起,在社交.娱乐.电商.教育.医疗等领域高歌猛进.当下,5G和AI时代已至,音视频技术已经上升到一个全新的高度,新场景.新应用.新标准也必将出现.any ...

  3. VE视频引擎短视频sdk支持的AE模板功能列表

    VE视频引擎短视频sdk,可以用来搭建模块化短视频制作平台(APP,小程序,网站).设计师使用After Effects(专业的视频制作软件,简称AE)将视频模板制作完成,并使用我们提供的导出工具将需 ...

  4. 浅析WebRtc中视频数据的接收和渲染流程

    前言 本文基于PineAppRtc开源项目https://github.com/thfhongfeng/PineAppRtc 因为一个需求,我们需要将WebRtc发送过来的视频流中转出去,所以就研究一 ...

  5. cocos creator 方法数组_基于 Cocos 游戏引擎的音视频研发探索

    本文转载自公众号:流利说技术团队(lls_tech) 版权归原作者所有 本文主要介绍了流利说团队基于 Cocos 游戏引擎进行音视频相关需求开发过程中所遇到的问题和解决方案.文章中将依次阐述 Coco ...

  6. 声网下一代视频引擎架构探索与实践

    为应对愈发多样化的音视频互动场景下的挑战,Agora 开始设计自己的下一代视频处理引擎,在过程中关于引擎架构.性能调优.插件系统设计等方面总结了很多经验,希望与各位音视频领域的爱好者.行业从业者分享. ...

  7. WebRTC:并非解决音视频应用所有问题的银弹

    WebRTC1.0标准虽然已经定稿,但各个浏览器的实现都还不成熟,处于快速迭代中,网易云信CTO赵加雨针在接受LiveVideoStack采访时,针对实时通信技术演进.WebRTC国内外发展与趋势.以 ...

  8. webrtc 入门第二章 音视频录制

    webrtc 入门第二章 音视频录制 一.介绍 1.媒体录制原理 ​ 在很多场景中回放音视频资源的需求是非常重要的例如会议,直播授课等.任何媒体形式的表情都可进行录制,如 ,,等.其中内容更加自由用户 ...

  9. WebRTC重要API和音视频分析

    重要API WebRTC原生APIs文件是基于WebRTC规格书撰写而成,这些API可分成Network Stream API. RTCPeerConnection.Peer-to-peer Data ...

最新文章

  1. android.view.InflateException: Binary XML file line #16: Binary XML file line #16: Error inflating
  2. 图像有损压缩matlab程序,基于Matlab的灰度图像DCT与RLE的混合有损压缩
  3. 怎样才能高效的在家办公或者远程办公呢?
  4. 基于re模块的计算器
  5. angularjs获取上一个元素的id_三男子非法获取苹果ID账号买卖,交易数万条,价格从一毛到上百元不等...
  6. json对象和json字符串之间的转化
  7. QT的QSpinBox类的使用
  8. iBatis.Net实现返回DataTable和DataSet对象
  9. Java中的观察者设计模式
  10. java读取yaml配置文件,snakeyaml读取yaml配置文件
  11. 【毕业设计】基于情感分析的网络舆情热点评估系统 - 大数据 python可视化 数据分析
  12. 一次网易游戏测试(外包)面试
  13. 显示seata连接不上127.0.0.1:2181
  14. textRNN textCNN(及代码实现)
  15. 企业局域网管理软件_为何要进行内部局域网管理
  16. 激光测距仪的发展与介绍——TFN 10K KI 双目远距离激光测距仪
  17. 一种常规的四芯或多芯排线的线序检测电路
  18. UniSwap V3协议浅析(上)
  19. python蒙特卡洛算法求积分_python中实现蒙特卡洛算法
  20. MyBatis-Plus代码生成器,如何自定义代码生成路径

热门文章

  1. tc command gives Error: Specified qdisc not found on RHEL 8
  2. 微信小程序---授权保存图片或视频,拒绝后不在出现弹窗---自定义组件弹窗
  3. Vue 状态管理与与SSR详解
  4. 计算机游戏如何产生娱乐效果,浅谈电脑游戏与信息技术教学
  5. STM32单片机扩展下的IPUS SQPI PSRAM应用领域
  6. 哈啰:学拼多多的套路,走美团的老路
  7. html中span跟div属性,HTML 的 div 和 span 标签
  8. SpringBoot项目目录结构(工程结构)
  9. 知乎高赞!怎么自学 python,大概要多久?
  10. Cisco:DHCP自动获取IP地址