Z6官网

网站进行了升级 ,有所变动 ,请使用 搜索 查找更多内容

浅谈多平台音视频同屏开发技术(二)

Z6官网 2026-01-14 13:22:06 289 0

实现流程

一、同屏推流端

同屏推流端实现的职能蕴含:

1.屏幕截图

屏幕截图职能蕴含对鼠标、光标地位和状态的捕获 。

(1)Linux系统的获取屏幕图片步骤:

A. framebuffer方式

接见由显卡显存映射(mmap)的内存帧缓冲区 ,使用特殊的设备节点:/dev/fb* 。framebuffer是一种比力老的渲染方式 ,由于只能实现单一的整张位图输入输出 ,必要耗费较多的CPU处置 ,目前仅依然在一些输出单一显示界面或者对显示机能要求不高的嵌入式设备上使用 。现代Linux系统在XWindowSystem加载后便将其收受 ,相应地 ,这种获取屏幕图片方式也就失效 。

B.OpenGL方式

一种跨平台的图形编程接口 ,在Linux系统中最终依然是通过XWindowSystem的和谈库Xlib实现各类图形操作 。

C.XCB方式

XWindowSystem由MIT在1984年颁布的一种窗口系统 ,宽泛使用于类UNIX操作系统上 。X包,括Xserver和Xclient,它们之间通过X和谈通讯 。Xserver接管Xclient的显示要求 ,挪用底层的显示设备驱动法式 ,输出到显示设备上;同时 ,把输入设备的输入事务 ,传递给相应的Xclient 。X和谈是网络通明的 ,server和client能够位于统一机械上、统一操作系统中 ,也能够位于分歧机械、分歧操作系统中(因而X是跨平台的) 。这为远端GUI登录提供了方便 。Xclient的实现大将X和谈封装为号令原语 ,以库的大局(xlib或者xcb)向表部利用提供接口 。表部利用作为Xclient挪用这些API ,向Xserver提议要求 。Xserver的实现几经演变为此刻的Xorg 。目前的主流版本是X11R6(R7) 。这也是目前在Linux系统常用的获取屏幕截图方式 。

(2)Windows系统的获取屏幕图片步骤:

A.GDI方式

在Windows10以前的版本使用GDl(Graphics DeviceInterface)接口从系统中获取屏幕截图 ,但这种方式机能比力差 ,获取操作的耗时时时超过40ms ,无法保障25帧的截图快率 ,也就无法保障同屏视频的流畅性 ,视觉成效不是太好 。

B.DXGI方式

DXGI (Microsoft DirectXGraphics Infrastructure)是随 Windows Vista 引入的新子系统, 从Windows10起头能够通过DXGI接口从系统中获取屏幕截图 ,耗时大幅缩短 ,可能保障25帧的截图快率 ,大幅提升了同屏视频的视觉成效 。

2.声音采集

声音采集职能用于获取本机上其他利用产生的声音 。

(1)Linux系统的采集声音步骤:

A.OSS声卡系统

OSS(Open Sound System)是一个类Unix和POSIX兼容系统上一个可选的声音架构 ,提供了源代码级的可移植性 。OSSv3是Linux下原始的声音系统并集成在内核里 ,但是OSSv4在2002年OSS成为贸易软件时它的职位被ALSA所取代 。OSSv4在2007年又成为开源软件 ,4Front Technologies以GPL和谈颁布了它的源码 。OSS的设备节点在/dev目录下 ,类型为字符设备 ,其主设备号为14: /dev/dsp: Digital audio.

B.ALS声卡系统

ALSA提供了Playback和Capture两种方式对声卡进行操作 ,利用法式通过asound库挪用ALSA对声卡进行操作 ,但在默认情况下Capture方式只能对声卡的输入通路进行采集 ,不能进行内录 。通过配置ALSA环回(Loopback虚构声卡)路由 ,将真实的物理声卡和Loopback输入通路归并为一个逻辑声卡设备 ,实现对Loopback输出通路进行采集 。

(2)Windows系统的采集声音步骤:

使用MMDevice API来枚举和获取指定设备 ,用WASAPI来处置当用法式和音频设备之间的音频流数据 。

3.音视频编码

音视频编码职能将屏幕截图的bmp数据编码压缩成H264/H265数据 ,将声音采集的pcm数据编码压缩成G711/aac/mp3等体式数据 。

使用最为宽泛的音视频编解码开源软件项目是fmpeg ,这是一套能够职能壮大、可运行于好多软硬件平台的音视频处置软件 ,支持险些市面上绝大无数音视频编解码、采集、转码、纪录、推拉流等处置,支持IntelQSV、LinuxVAAPl、AndroidMediaCode蹬撞件编解码处置加强 。同时 ,ffmpeg也可由开发者自行开发代码对接新的编解码和谈、实现和硬件编解码加强 。

4.音视频传输

音视频传输职能将编码压缩后的音视频码流数据通过网络传输和谈推送给流媒体服务器 ,常用的网络传输和谈蕴含:RTMP、RTP、RTSP、HLS等 。

A. RTP/RTCP

RTP/RTCP(Real-time Transport Protocol, RTPControl Protocol)用于在网络中传输音视频数据的IETF RFC尺度和谈 ,可工作在TCP或UDP上 ,可单播也可组播 ,通常和RTCP一路使用 。

B. RTSP

RTSP(Real Time Streaming Protocol)是哥伦比亚大学、 Netscape和RealNetworks公司提交的IETF RFC尺度 。RTSP在系统结构上位于RTP/RTCP之上 ,语法和HTTP1.1类似 ,默认使用端标语554或8554 。RTSP节造新闻协商实现后可使用RTP/RTCP传输流媒体数据 。

常用的RTSP客户端和流媒体转发服务器有:live555、ZLMediaKit 。

C. RTMP

RTMP(Real Time MessagingProtocol)是Adobe公司为Flash播放器和服务器之间音视频数据传输开发的盛开和谈 。工作在TCP之上 ,默认使用端标语1935 ,并衍生出:RTMPE、RTMPT、RTMPS ?墒迪肿远扑, ,常用的RTMP流媒体转发服务器有:Nginx(rtmp-module)、SRS、ZLMediaKit 。

D. HLS

HLS(HTTPLiveStreaming)是苹果公司基于HTTP的流媒体传输和谈 ,重要利用于iOS设备提供音视频直播和点播服务 。

结合前述的介绍 ,同屏推流端在Linux操作系统的软件架构如下图所示:

02.png

03.png


图文起源:四川湖山电器股份有限公司

版权申明:凡注明起源的文章 ,版权均属原网站作者所有 ,转载需注明出处 。非本站出处的文章为转载 ,概想仅供业内参考 ,进建互换 。如涉及侵权 ,请实时联系Z6官网 ,感激!


×

扫码登录网站

【网站地图】