背景随着国产操作系统的推进,传统行业对Linux平台的呼声和需求越来越大,之前几年,我们发布了Linux平台运营商级的RTSP转RTMP推送模块、RTMP推送模块和RTSP、RTMP播放模块,前段时间, 有开发者问我们,是不是可以在Linux平台实现轻量级RTSP服务,通过采集摄像头或者屏幕,在Linux平台实现类似于IPC的功能,便于第三方系统对接。 4000kbps push_api->SetVideoEncoderSpecialInt32Option(push_handle, "usage_type", 0); //0是摄像头编码, 1是屏幕编码 g_is_exit) { while (MY_X11_Pending(display, 10)) { XEvent xev; NT_PB_E_VIDEO_OPTION{ NT_PB_E_VIDEO_OPTION_NO_VIDEO = 0x0, NT_PB_E_VIDEO_OPTION_SCREEN = 0x1, // 采集屏幕
其实基于开源软件Linux二次开发的操作系统,近年来的发展趋势非常迅猛。 Linux已经有20年历史,尤其近十年经过突飞猛进的发展,Linux桌面操作系统已经远远摆脱了“具备与主流桌面操作系统的可比性”阶段,基于拥有众多优秀的开源应用软件的基础,在软件多样性、硬件兼容性、用户体验等各方面做了大量的改进 在欧美,我们不时听到一些政府部门将采用Linux桌面办公:慕尼黑市政府用十年的时间,成功的“赶走”了微软;伯明翰市政府、法国国会、瑞士、挪威和南非政府部门也都采用了Linux桌面办公。 国产操作系统|Linux下RTMP同屏推送 在发布国产操作系统|Linux平台的RTMP直播推送SDK之前,大牛直播SDK(官方)的RTMP推送模块已稳定运行在Windows、Android和iOS平台几年了 相对Windows、Android和iOS平台,Linux在桌面采集等方面,资料非常少,数据采集可以采用调用XLib相关接口实现,本Demo实现的是Linux上实现桌面和系统声音采集,然后使用RTMP协议推出去的一个
在这样的背景下,我们实现了Linux平台下的以屏幕采集、摄像头采集、麦克风扬声器采集为数据源的RTMP推送模块、轻量级RTSP服务模块,和RTMP播放器和RTSP播放器模块,并同时覆盖了x86-64架构和 技术实现xrandr本文我们要讨论的是,如何在Linux平台实现多显示器的屏幕采集录制。我们知道,Linux下,X Window Sysem支持多显示器的配置和显示器列表获取。 XRRMonitor id, 采集X屏幕时使用* xrr_monitor_id: -1:采集所有屏幕, SDK默认为-1. NT_PB_SetCaptureXRRMonitor()设置要采集的XRRMonitor id, 采集X屏幕时使用。 /纯视频/音视频推送;支持X11屏幕采集;支持部分V4L2摄像头设备采集;[屏幕/V4L2摄像头]支持帧率、关键帧间隔(GOP)、码率(bit-rate)设置;[V4L2摄像头]支持V4L2摄像头设备选择
VirtualDisplay,这个VirtualDisplay会捕获屏幕内容并将其发送到指定的Surface;资源释放:当屏幕捕获不再需要时,确保释放MediaProjection和VirtualDisplay 如果音频播放采集和采集麦克风都打开,可以通过右侧下拉框,推送过程中,音频播放采集和麦克风采集实时切换。 需要注意的是,Android采集音频播放的audio,音频播放采集是依赖屏幕投影的,屏幕投影关闭后,音频播放也就采不到了。 支持帧率、关键帧间隔(GOP)、码率(bit-rate)设置;支持RTMP推送 live|record模式设置;支持前置摄像头镜像设置;支持软编码、特定机型硬编码;支持横屏、竖屏推送;支持Android屏幕采集推送 总结以上是Android平台屏幕采集、音频播放声音采集、麦克风采集编码打包推送到RTMP和轻量级RTSP服务的相关技术实现,做成高稳定低延迟的同屏系统,还需要有配套好的RTMP、RTSP直播播放器,整体部署
而屏幕采集则是实现实时屏幕共享流程中的第一步,本篇技术分享就来跟大家讲讲拍乐云在 Andorid 端屏幕采集的经验实践。 鉴于目前市面上5.0以下的 Android 手机占比很低且屏幕采集需要 root 权限实现复杂,接下来我们主要介绍 Android5.0 及以上版本的屏幕采集原理。 屏幕采集流程 介绍完以上关键角色,我们大致可以画出一套屏幕采集流程图: ? 下面逐步介绍代码实现。 屏幕采集帧率的上限取决以 Android 设备的屏幕刷新率,下限是0,即丢弃所有返回数据不处理。采集帧率并不是越高越好,够用就行。 比如在低端机上,就算以较高帧率采集屏幕数据,但受限于机器编解码能力,实际上屏幕传输的帧率达不到采集帧率,反而会消耗过多系统资源导致发热、卡顿等现象。这时候就需要适当降低采集帧率。
主要功能: 可设置要录制屏幕的宽高,支持右下角直接拉动改变.
技术背景随着国产化操作系统的推进,市场对国产化操作系统下的生态构建,需求越来越迫切,特别是音视频这块,今天我们讨论的是如何在linux平台实现屏幕|摄像头采集,并推送至RTMP服务。 我们知道,Linux平台,如果需要采集摄像头,可使用V4L2相关接口,屏幕采集用X相关接口实现,如果是Wayland协议, 用PipeWire相关接口实现采集就好。 FFmpeg VS SmartPublisher今天我们探讨的是,两种技术选型下的linux平台同屏摄像头RTMP推送实现:FFmpeg技术方案在Linux平台上采集屏幕和摄像头内容,并将其推送到RTMP :指定输入格式为X11屏幕捕获。 X11屏幕采集;支持部分V4L2摄像头设备采集;[屏幕/V4L2摄像头]支持帧率、关键帧间隔(GOP)、码率(bit-rate)设置;[V4L2摄像头]支持V4L2摄像头设备选择(设备文件名范围:[/dev
image.png 越来越多的App需要共享手机屏幕给他人观看,特别是在线教育行业。 本库对屏幕采集编码进行了封装,简单的调用即可实现MediaProjection权限申请,H264硬编码,错误处理等功能。 ScreenShareKit.init(this) .onH264{ buffer, isKeyFrame, ts -> }.start() Github 源码地址 实现 1 请求用户授权屏幕采集 其实,可以结合一些第三方的音视频SDK,直接将编码后的屏幕流数据通过第三方SDK推流,就能实现屏幕共享功能。 Resources.getSystem().displayMetrics.widthPixels }) }.start() 几行代码就可以实现屏幕采集编码传输
Linux桌面系统屏幕信息获取(Qt、X11、Xrandr、Xinerma) 最近在项目测试中,发现了关于Qt - UI分辨率自适应的问题。从大小屏幕互相切换的问题。也引发了关于屏幕检测的问题。 Windows下的获取调用WindowsAPI进行设置,网上大多也给出了解决方案,但是linux在怎么获取,大多都没有提到,所以在这进行讨论。 调用X11通用的方法,获取Display,window等信息,然后获取 XRRMonitorInfo 列表。 一些基础信息资料不做说明,只说明简单使用,通用X11调用方法, #include <X11/extensions/Xinerama.h> Display *display = XOpenDisplay 并不如X11这些C接口直接调用来的准确。以后劲量避免使用Qt接口来设置屏幕相关属性了。 Xrandr 笔者目前使用的获取屏幕信息方法,xrandr。
如何在 Windows 11 中禁用锁定屏幕 在更新到 Windows 11 之后,在 Windows 10 下对 Windows 注册表文件进行的许多调整仍然存在,但是,许多其他调整已恢复为默认设置。 这就是为什么我们必须重新审视在 Windows 11 中禁用锁定屏幕所需的过程。 免责声明:编辑 Windows 注册表文件是一项严肃的工作。 要在 Windows 11 注册表文件中进行编辑,我们将在 Windows 11 搜索工具中键入“regedit”。从结果中,选择 Regedit 应用程序,然后使用左侧窗口导航到该键(图 A)。 要测试您的编辑是否成功,请按键盘组合 Windows + L 手动锁定您的 Windows 11 PC。您现在应该看到登录屏幕,而不是您通常会看到的锁定屏幕,耐心等待您输入访问凭据. 参见:Windows 徽标键盘快捷键:完整列表(TechRepublic) 如果您想将 Windows 11 锁定屏幕添加回您的设置,只需再次编辑 Windows 注册表文件并将 NoLockScreen
本文以Windows平台为例,数据源分别为Unity的窗口、摄像头或整个屏幕,编码传输模块,还是调用大牛直播SDK(官方)的原生接口,简单界面先睹为快: win_publisher_unity2.png 初始化参数配置 这里需要注意下,如果要采集unity窗口,需要设置图层模式,先填充一层RGBA黑色背景,然后再添加一层,用于叠加外部数据。 数据采集 摄像头和屏幕的数据采集,还是调用原生的SDK接口,本文不再赘述,如果需要采集Unity窗体的数据,可以用参考以下代码: if ( texture_ == null || video_width ; publisher_handle_ = IntPtr.Zero; } } 总结 经测试,Unity环境下,通过高效率的数据采集
正则表达式 ^word 搜索word这个字符串,并且word必须为这一行的行首 [root@192 ~]# cat 1.txt 统支持的所有变量 I love you linux [root@192 ~]# vim 1.txt [root@192 ~]# grep '^[a-z]' 1.txt linux word$ 搜索word这个字符串,并且word必须为这一行的行尾
目录 背景说明 实际效果 安装步骤 安装 x11vnc 配置 x11vnc 配置 x11vnc 作为系统服务 使用 VNC 客户端连接 背景说明 通常vnc-server是单独开一个桌面 ,并不会同步到屏幕。 安装步骤 安装 x11vnc 更新系统包列表: sudo apt-get update 安装 x11vnc 及其依赖包: 尝试安装 x11vnc,并处理可能的依赖问题: sudo apt-get install x11vnc 修复依赖问题:如果安装 x11vnc 时遇到依赖问题,可以尝试运行以下命令来修复依赖关系: sudo apt-get -f install 配置 x11vnc 设置 VNC 密码: 为了安全起见,可以设置一个 VNC 连接密码: x11vnc -storepasswd 创建启动脚本: 创建一个脚本来启动 x11vnc
智慧教室等场景的普及,好多企业或者开发者开始寻求更高效稳定低延迟的RTMP同屏方案,本文以大牛直播SDK(Github)的同屏demo(对应工程:SmartServicePublisherV2)为例,介绍下如何采集编码推送 libPublisher = new SmartPublisherJniV2(); private void InitAndSetConfig() { //开始要不要采集音频或视频 last_image.close(); last_image = null; } } } 关闭采集推送 } libPublisher.UnInitRtspServer(); super.onDestroy(); } 以上就是Android平台数据采集
辨别阀用来表示听觉器官辨别声音某种特性最小差异的能力 声音的采集是在一段连续的信号中, 采取离散的信号, 采集密度用采样率来表示。香浓采样定理表明,采样频率必须大于被采样信号带宽的两倍。 在数字领域中,经常采用的采样率: 8,000 Hz - 电话所用采样率, 对于人的说话已经足够 11,025 Hz 22,050 Hz - 无线电广播所用采样率 32,000 Hz - miniDV 如果采样率越高,单位信号的采集的样本信号就越多,信号还原度也就越高。 从上面的不同的采样率可以看到, 采样率越高的信号清晰度就越高,当然也要求更多的存储空间。 除了采集率, 采样位数也是一个重要的采样指标, 它是对一个采样精确度的表示。 它和采样率共同影响信号的采集的质量。 采样位数是用来表示一个采样信号的长度。
上一期介绍了一下tinkerboard2 Android11下面的bootloader,这一期来介绍一下tinkerboard2在Android11下面适配DSI屏幕的方式。 电源要用12V 2A的,不然带不动屏幕,屏幕电源要由主板提供,且电源质量要比较好,不然会干扰屏幕显示。 目前Android全部采用的都是Linux DRM框架进行显示,在DRM框架中,其显示通路如下图所示 4.png 图中的几个组成部分 Framebuffer:显存,嵌入式系统使用的是内存的一部分 CRTC 11.png 到这里,这款风火轮为tinkerboard2定制的DSI屏幕的调试就完成了,且支持了HDMI+DSI的双屏异显。 总结 本文以tinkerboard2对接7寸1024*600分辨率的DSI屏幕为例,介绍了在tinkerboard2在Android11下面适配DSI屏幕的方式。此方法对于其他分辨率的屏幕同样适用。
5.1 LCD 操作原理 在 Linux 系统中通过 Framebuffer 驱动程序来控制 LCD。
2配置屏幕选择方向以及关闭息屏模式 在/etc/X11修改xorg.conf文件,如果没有,自行创建; 修改完后可使用xset -q查看设置和当前配置。 Section "Monitor" Identifier "DSI-1" Option "Rotate" "left" #left为屏幕向左旋转
故事的背景是我有一个带来两个屏幕的设备。我计划使用 X11 创建两个窗口,分别让这两个窗口在两个屏幕上。 在不做任何处理的情况下,会受到 X 窗口管理器的影响,导致全部都在鼠标最后一次命中的屏幕上显示窗口 我的需求是双屏双窗口,即一个屏幕显示一个窗口。 在 X 中将最左边的显示器屏幕当成 X 坐标的 0 点,将最上方的显示器屏幕当成 Y 坐标的 0 点。 testX11Window1.Draw(); Console.WriteLine($"X11Window1={testX11Window1.X11Window}"); var testX11Window2 会根据鼠标最后停留在哪个屏幕上,选择对应的屏幕设置给到窗口坐标。
例1:time越短,网络越好。同时在ping时我们重点关注packet loss,如果丢包率非常高,即使ping通了,说明网络状态也很差。