一、概述

在Windows平台下的视频播放技术主要有以下三种:GDI,Direct3D和OpenGL;也经常看到DirectDraw这个技术,根据维基介绍,DirectDraw是微软弃用的一个API,曾经是DirectX API的一部分。

二、GDI

图形设备接口(英语:Graphics Device Interface,缩写GDI)是微软视窗系统提供的应用程序接口,也是其用来表征图形对象、将图形对象传送给诸如显示器、打印机之类输出设备的核心组件。GDI是视窗操作系统(Microsoft Windows)的三大核心部件(也称“子系统”)之一。

GDI用来完成一些和绘制有关的工作,像直线或曲线的绘制,文字渲染,调色板控制。它不能用来直接绘制一些界面元素,像窗口、菜单等等,这些工作由用户子系统来完成,位于user32.dll中,它是创建在GDI之上的一个软件层。其他系统也有类似GDI的东西,比如Macintosh的Quartz(传统的QuickDraw),和GTK的GDK/Xlib。

GDI最大的好处是它有可以直接访问硬件设备的能力。通过GDI可以非常容易的在不同类型的设备上绘制图形,像显示屏和打印机或类似的显示设备。这些能力是微软Windows系统“所见即所得”程序的核心。

简单的不需要快速图形渲染的游戏可能会用到GDI。但是GDI对一些高级的动画制作无能为力,它缺少显卡中帧的概念,还缺少3D图形硬件光栅化的支持等等。现代的游戏通常使用DirectX和OpenGL而不是GDI,因为这些技术能更好的让程序员利用硬件的特性来加速图形图像的显示。

GDI主要用于软件开发调试时使用,性能和效果不及Direct3D和OpenGL。

webrtc的main_wnd.cc文件void MainWnd::OnPaint()函数有GDI示例代码。

三、Direct3D

Direct3D(简称:D3D)是微软公司在Microsoft Windows操作系统上所开发的一套3D绘图编程接口,是DirectX的一部分,当前广为各家显卡所支持。与OpenGL同为计算机绘图软件和计算机游戏最常使用的两套绘图编程接口之一。

1995年2月,微软收购了英国的Rendermorphics公司,将RealityLab2.0技术发展成Direct3D标准,并集成到MicrosoftWindows中,Direct3D在DirectX3.0开始出现。后来在DirectX8.0发表时与DirectDraw编程接口合并并改名为DirectXGraphics。

四、OpenGL

OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。

OpenGL的高效实现(利用图形加速硬件)存在于Windows,部分UNIX平台和Mac OS。这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬件。开放源代码库Mesa是一个纯基于软件的图形API,它的代码兼容于OpenGL。但是,由于许可证的原因,它只声称是一个“非常相似”的API。

OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。ARB由一些对创建一个统一的、普遍可用的API特别感兴趣的公司组成。根据OpenGL官方网站,2002年6月的ARB投票成员包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans & Sutherland、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和Sun Microsystems,Microsoft曾是创立成员之一,但已于2003年3月退出。

五、Direct3D VS OpenGL

1、可以看出Direct3D和OpenGL都是协议接口,各大显卡厂商,需要根据这个接口协议,实现具体细节。操作GPU等硬件。

比方说英伟达显卡商,就在官网上说明提供opengl和directx两种API接口。

https://developer.nvidia.com/opengl
https://developer.nvidia.com/directx

Intel集成显卡也会在官网上说明支持的opengl和directx版本号。

2、Direct3D仅支持Window操作系统,opengl可以支持多个操作系统,比方说Linux、Mac OS等。

3、至于在window操作系统上,谁更好一些,这里看到一篇有趣的介绍Direct3D和OpenGL相爱相杀的博客。

《为什么选择OpenGL-and-not-DirectX》http://blog.wolfire.com/2010/01/Why-you-should-use-OpenGL-and-not-DirectX

六、SDL

SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。当前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。

说白了,就是opengl也好,direct 3D也好,你们把底层音视频交互工作搞的太复杂了,SDL在Direct3D和OpenGL协议接口上,再定义一套协议接口,无论什么系统平台,只要用SDL这一套接口,就能实现音视频渲染+游戏功能。

SDL应用框架如下图:不过这张图有个地方不准确,SDL在window下也可以调用opengl,参数要特殊配置一下。

ffmpeg的ffplay.c文件下的main函数,有SDL示例代码。

七、参考

SDL系列讲解(一)简介

https://blog.csdn.net/leixiaohua1020/article/details/40246783

https://en.wikipedia.org/wiki/DirectDraw

https://zh.wikipedia.org/wiki/GDI%2B

https://zh.wikipedia.org/wiki/Direct3D

https://zh.wikipedia.org/wiki/OpenGL

https://zh.wikipedia.org/wiki/SDL

windows平台视频渲染技术小结相关推荐

  1. 百家号基于AE的视频渲染技术探索

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nm0WWHSi-1657593629762)(https://p3-juejin.byteimg.com/tos-cn- ...

  2. Windows平台OpenGL渲染视频

    我之前写过一个简单的RTSP播放器(https://github.com/greenjim301/rtsp),当时的视频渲染是用D3D实现的.一直想尝试一下用OpenGL来渲染视频,但却不得空,最近有 ...

  3. windows平台桌面开发技术

    MFC 传统的windows平台win32应用开发技术 最大的缺点:设计和代码不能分离,不符合现在的主流开发技术 DirectUI 目前windows平台主流的开发技术. 开源类库duilib. WP ...

  4. Windows下Hook API技术小结 (转)

    1.基本概念 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到达后,在目标窗口处理函数之前 ...

  5. Unity3D windows平台视频录制录屏插件 UnityRecorder

    1:Asset Store 搜索下载 :UnityRecorder 2.打开 Window-> General-> Recorder -> Recorder Window 3.添加新 ...

  6. Windows平台音频采集技术介绍

    音频处理的相关技术: 采集麦克风输入 采集声卡输出 将音频数据送入声卡进行播放 对多路音频输入进行混音处理 在Windows操作系统上,音频处理技术主要是采用微软提供的相关API:Wave系列API函 ...

  7. Flutter 用Texture控件在Windows平台实现视频渲染

    提示:阅读此文章之前需要有C++开发经验,知道如何利用channel在C++和Dart之间做通信. 前言 一.PlatformView与Texture是什么? 二.使用步骤 1.在Flutter需要显 ...

  8. D3D还是GDI? Windows平台播放RTSP或RTMP渲染模式比较

    先说结论,Windows平台播放渲染这块,支持D3D的前提下,优先D3D,如果检测到不支持D3D,数据回调上来,GDI模式绘制. 相比GDI模式,D3D绘制更细腻,绘制效率更高,CPU占用低,只要是系 ...

  9. 常见几种视频渲染模式介绍

    1.视频覆盖: 大概在1995年,当mpeg1(VCD)回放在PC上开始流行的时候,pc的处理能力还么有强大到实时播放的地步.显卡制造厂商适时的推出了"video overlay(视频覆盖) ...

最新文章

  1. c语言生成文件可以删,C语言-文件操作下
  2. 字节流与字符流基本操作
  3. 360极速浏览器安装.crx扩展(postman)
  4. osmnx 补充笔记:get_edge_colors_by_attr get_node_colors_by_attr
  5. python优先队列_python 多线程优先队列Queue详解
  6. SharePoint 2013 术语和术语集介绍
  7. VTK:几何对象之OpenVRSphere
  8. Oracle--SQL技巧之二(多行记录用逗号拼接在一起)
  9. pytorch 查看当前学习率_pytorch实现查看当前学习率
  10. 计算机组装与维修预习,《计算机组装与维修》预习报告、实习报告撰写要求.docx...
  11. insert into select语句锁表故障
  12. CentOS6.4将MySQL5.1升级至5.5.36
  13. vertical-align的使用及解决图片底部默认空白缝隙问题和图像与文本垂直方向居中对齐
  14. 最棒的 JavaScript 学习指南(2018版)
  15. ip地址自动获取背后的机制(udhcpc)
  16. mac画图工具 OmniGraffle (四)化繁为简
  17. 使用手机模拟NFC加密门禁卡
  18. AR培训丨零基础制作第一个AR应用——AR绘本
  19. 【语音识别】动态时间规整算法(RTW)语音识别系统【含GUI Matlab源码 341期】
  20. 听书是怎样的一种体验

热门文章

  1. Android 数据线连接单反相机读取照片
  2. 基于AD的用户组织目录树选择工具的解决方案
  3. SVN服务器连不上——svn:E170013,svn:E1700113
  4. PyCharm中安装库失败 ERROR: Could not find a version that satisfies the requirement (from version None)
  5. Torch的编程方式示例以及必备知识
  6. IOS唤起键盘后--导致页面底部空白问题
  7. Mac电脑键盘(ujmiko)不能使用问题记录
  8. Netty核心功能与线程模型精讲
  9. 关于iphone、QQ通讯录、飞聊联系人排序设计的思考
  10. svchost|dllhost系统进程与系统安全——“其实我们很无辜”