背景随着国产操作系统的推进,传统行业对Linux平台的呼声和需求越来越大,之前几年,我们发布了Linux平台运营商级的RTSP转RTMP推送模块、RTMP推送模块和RTSP、RTMP播放模块,前段时间, 有开发者问我们,是不是可以在Linux平台实现轻量级RTSP服务,通过采集摄像头或者屏幕,在Linux平台实现类似于IPC的功能,便于第三方系统对接。 技术实现轻量级RTSP服务实际上前几天我们在做Linux模块的时候,已经实现了,只是没有在demo上加这块,原因很简单,这块诉求一方面比较少,另一方面,我们windows、Android和iOS平台都有相关的接口和 4000kbps push_api->SetVideoEncoderSpecialInt32Option(push_handle, "usage_type", 0); //0是摄像头编码, 1是屏幕编码 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屏幕采集;支持部分V4L2摄像头设备采集;[屏幕/V4L2摄像头]支持帧率、关键帧间隔(GOP)、码率(bit-rate)设置;[V4L2摄像头]支持V4L2摄像头设备选择(设备文件名范围:[/dev ]支持基于libpulse接口采集本机PulseAudio服务音频;[预览]支持推送端实时预览;[对接服务器]支持自建标准RTMP服务器或CDN;支持断网自动重连、网络状态回调;屏幕和摄像头合成/多层合成
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分辨率自适应的问题。从大小屏幕互相切换的问题。也引发了关于屏幕检测的问题。 并不是预想中,小屏幕与大屏幕的DPI值是按照正比例来进行缩放的。不同品牌,不同年代的DPI也可能会发生,小屏幕的DPI大于大屏幕的DPI,所以字体没有如预期一样变小,反而变大了。 Windows下的获取调用WindowsAPI进行设置,网上大多也给出了解决方案,但是linux在怎么获取,大多都没有提到,所以在这进行讨论。 //获取当前屏幕的相关信息,首先获取App所在屏幕索引,然后根据索引或者当前屏幕的指针。 以后劲量避免使用Qt接口来设置屏幕相关属性了。 Xrandr 笔者目前使用的获取屏幕信息方法,xrandr。
本文以Windows平台为例,数据源分别为Unity的窗口、摄像头或整个屏幕,编码传输模块,还是调用大牛直播SDK(官方)的原生接口,简单界面先睹为快: win_publisher_unity2.png 初始化参数配置 这里需要注意下,如果要采集unity窗口,需要设置图层模式,先填充一层RGBA黑色背景,然后再添加一层,用于叠加外部数据。 数据采集 摄像头和屏幕的数据采集,还是调用原生的SDK接口,本文不再赘述,如果需要采集Unity窗体的数据,可以用参考以下代码: if ( texture_ == null || video_width ; publisher_handle_ = IntPtr.Zero; } } 总结 经测试,Unity环境下,通过高效率的数据采集
智慧教室等场景的普及,好多企业或者开发者开始寻求更高效稳定低延迟的RTMP同屏方案,本文以大牛直播SDK(Github)的同屏demo(对应工程:SmartServicePublisherV2)为例,介绍下如何采集编码推送 libPublisher = new SmartPublisherJniV2(); private void InitAndSetConfig() { //开始要不要采集音频或视频 last_image.close(); last_image = null; } } } 关闭采集推送 } libPublisher.UnInitRtspServer(); super.onDestroy(); } 以上就是Android平台数据采集
辨别阀用来表示听觉器官辨别声音某种特性最小差异的能力 声音的采集是在一段连续的信号中, 采取离散的信号, 采集密度用采样率来表示。香浓采样定理表明,采样频率必须大于被采样信号带宽的两倍。 如果采样率越高,单位信号的采集的样本信号就越多,信号还原度也就越高。 从上面的不同的采样率可以看到, 采样率越高的信号清晰度就越高,当然也要求更多的存储空间。 除了采集率, 采样位数也是一个重要的采样指标, 它是对一个采样精确度的表示。 它和采样率共同影响信号的采集的质量。 采样位数是用来表示一个采样信号的长度。
5.1 LCD 操作原理 在 Linux 系统中通过 Framebuffer 驱动程序来控制 LCD。
2配置屏幕选择方向以及关闭息屏模式 在/etc/X11修改xorg.conf文件,如果没有,自行创建; 修改完后可使用xset -q查看设置和当前配置。 Section "Monitor" Identifier "DSI-1" Option "Rotate" "left" #left为屏幕向左旋转
我的工作用电脑的桌面环境是 Ubuntu 17.10,作为一个 Linux 用户,一直困扰我的一个问题是没有找到一个比较理想的可以取词划词的英语词典,之前我尝试过几种方法: 有道:有道是有 Linux
linux c++ 通过xcb库获取屏幕大小 #include <stdio.h> #include <xcb/xcb.h> /** clang++ main.cpp -o main `pkg-config
ytkah刚开始想着用NGINX进行限制,但是没有起到很好的效果,那就用防火墙吧,服务器一般都会有防火墙功能,如果是linux服务器可以用iptables命令,也有一些第三方的服务器控制面板如wdcp,
4.2.2 系统环境: win10 64位 下载地址: https://download.csdn.net/download/xiaolong1126626497/13328939 说明: 采用GDI方式录制屏幕 可以采用DXGI 、WGC采集。 输出结果: PS D:\linux-share-dir\video_file> C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f gdigrab -i desktop /video_file/test/202108161456.mp4 2.4 采集桌面指定区域(无音频) C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f gdigrab test/202108161448.mp4 2.5 采集桌面指定区域+音频 //录制指定范围--采集图像+音频 C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f
操作1,从驱动读取屏幕大小 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <linux/fb.h> #include <sys/mman.h> #include <math.h> int w,h ,bpp; int *fbmem; int main(int argc , char ,h,bpp); fbmem = mmap (0,w*h*bpp/8,PROT_WRITE|PROT_READ, MAP_SHARED,fd,0); return 0; } 操作2,通过xcb库读取屏幕大小
GNOME 的内置屏幕录像机 可以工作,但它是隐藏的,没有 GUI,也没有办法配置和控制记录内容。此外,还有一个叫 Kooha 的工具,但它一直在屏幕上显示一个计时器。 但即使是这样,也不是很简单,因此我将向你展示使用 OBS Studio 在 Wayland 上录制屏幕的步骤。 使用 OBS 在 Wayland 上进行屏幕录制 让我们来看看它是如何完成的。 要在 Ubuntu 18.04、20.04、Linux Mint 20 等系统上安装 OBS Studio 27,请使用 官方的 OBS Studio PPA。 选择 PipeWire 作为源,然后它要求你选择一个显示屏幕。选择它并点击分享按钮。 现在它应该无限次递归地显示你的屏幕。如果你看到了,你现在就可以开始在 Wayland 中录制屏幕了。 现在 OBS 会自动开始使用这个参数,你可以用它来录制 Wayland 的屏幕。
文章目录 一、Android 与 iOS 屏幕宽高比种类 二、屏幕像素密度 参考文档 : 设备兼容性概览 屏幕兼容性概览 支持不同的像素密度 声明受限屏幕支持 一、Android 与 iOS 屏幕宽高比种类 ---- Android 屏幕尺寸类型如下 , 安卓设备的屏幕尺寸复杂性远远高于 iOS 设备 , Android 设备有两万种屏幕类型 , iOS 只需要适配五种分辨率即可 ; iOS 屏幕尺寸如下 , 只需要适配有限的几种屏幕类型即可 ; 二、屏幕像素密度 ---- 屏幕像素密度 的单位是 DPI , 是 Dots Per Inch 的缩写 , 也就是每 英寸 的 像素点 个数 ; 屏幕尺寸 指的是 屏幕 斜对角的 英寸 长度 ; 假设屏幕尺寸为 6.5 寸 , 屏幕的宽高分辨率为 1080 \times 1920 , 计算该屏幕的 屏幕像素密度 ( DPI , Dots Per Inch 3253 ② 然后计算每英寸的像素个数 : DPI = \cfrac{对角线像素个数}{屏幕尺寸} = \cfrac{3253}{6.5} \approx 500