曹伟 2015年毕业于华中科技大学后入职网易,先后参与过易信PC版、云信PC demo以及教育直播产品的研发,目前在云信音视频组PC端组从事开发。 作者简介 ●●● 概要 当今,视频直播和实时音视频技术已经是很多行业必需的,典型的应用场景有教育直播、远程视频会议、互联网娱乐等。在移动端发起直播,其画面源的种类是十分有限的,无非是取摄像头、截屏等。PC端由于其系统资源充足,应用程序丰富,画面源种类多样,更适合作为主播程序运行的平台。在实际应用中,经常有一些场景是需要将不同的画面源合在一起,然后推流出去的。本文粗浅介绍一些我们在开发过程中总结的一些获取不同画面源的画面并将其合并的方法。 ●●● 各类画面源的截取 1) 摄像头画面 Windows下采集摄像头画面,DShow是最常用的方法之一。通过DShow采集摄像头数据,创建视频采集Filter,将其加入到图表IGraphBuilder中,用IMediaControl接口来控制流媒体在Filter Graph中的流动,再通过Render来获取视频的原始数据。以上流程封装在了我们的SDK中,用户可以直接调用SDK接口。 2) 桌面取屏及应用程序窗口截取 在Windows系统中,桌面和所有应用程序窗口一样,本身也是一个HWND窗口,因此可以放在一起讨论。获取一个窗口的位图数据,最常用的方法是:创建一个用来接收窗口画面的HBITMAP位图对象以及一个HDC设备上下文对象,用SelectObject将两者绑定ÿ