最近一个师姐做AR项目,老师想要实现录屏直播,就让我做一下。
我就写下这个博客记录整合一下。

实现方式是nginx+ffmpeg+rtmp直播推流。

网上有很多单独介绍搭建nginx服务器或介绍ffmpeg推流方法的,我把这些整合一下,感谢文中参考的博客链接。

首先是在Windows上搭建nginx流媒体服务器

1、下载 nginx 1.7.11.3 Gryphon
[下载链接](http://nginx-win.ecsds.eu/download/nginx%201.7.11.3%20Gryphon.zip)
2、下载完成后解压,在conf文件夹下找到nginx-win.conf

android后台录屏推流 录屏 推流_android后台录屏推流


android后台录屏推流 录屏 推流_Windows_02

以文本形式打开nginx-win.conf文件,添加rtmp的内容如下:

android后台录屏推流 录屏 推流_Windows_03


rtmp {
 server {
 listen 1935;
 chunk_size 4000;
 application live {
 live on;
 allow play all;
 }
 }
 }
3、启动nginx

进入Windows的cmd终端,cd 进入解压的文件夹nginx-1.7.11.3-Gryphon

输入 nginx.exe -c conf\nginx-win.conf 命令

android后台录屏推流 录屏 推流_nginx_04


此时打开网页,输入“localhost”,如显示Welcome to nginx! 那么说明配置成功啦!

android后台录屏推流 录屏 推流_Windows_05


nginx搭建参考链接

接下来就要使用ffmpeg进行录屏推流

1、下载ffmpeg
[下载地址](http://ffmpeg.org/download.html#build-windows)

进入网站后,点击Windows图标,再点击Download Build开始下载,将下载的文件解压至指定目录。

2、配置环境变量

右键“我的电脑”,点击“属性”,点击“高级系统设置”,点击“环境变量”,将解压后ffmpeg文件夹下的bin文件添加至Path。

打开cmd命令提示符窗口。输入命令“ffmpeg –version”。如果命令提示窗口返回FFmpeg的版本信息,那么就说明安装成功了,你可以在命令提示行中任意文件夹下运行FFmpeg。

android后台录屏推流 录屏 推流_Windows_06


ffmpeg安装参考链接

3、运用ffmpeg录屏推流

Windows下ffmpeg采集设备的主要方式是dshow、vfwcap、gdigrab.

其中dshow可以用来抓取摄像头、采集卡、麦克风等,vfwcap主要用来采集摄像头类设备,gdigrab则是抓取Windows窗口程序。

我用的是gdigrab实现对桌面的录制,也是最简单的。
gdigrab通过设定不同的输入URL,支持两种方式的屏幕抓取:
(1)“desktop”:抓取整张桌面。或者抓取桌面中的一个特定的区域。
(2)“title={窗口名称}”:抓取屏幕中特定的一个窗口。

-i 设定输入流
-f 设定输出格式

在终端输入
ffmpeg -f gdigrab -i desktop -f flv rtmp://本机IP地址:1935/live
即可开始录制并推流(注意需要先启动nginx服务

出现下图则成功!

android后台录屏推流 录屏 推流_nginx_07


录屏推流参考链接

ffmpeg常用基本命令参考链接

最后是播放

我是下载了VLC播放器进行播放,PC、安卓和苹果都可以安装。

[下载链接](https://www.videolan.org/vlc/)

打开VLC播放器,点击菜单里的“媒体”,点击“打开网络串流”,输入自己推流的IP地址,点击播放,就可以接收视频啦!

android后台录屏推流 录屏 推流_nginx_08

这是我在自己电脑上播放自己桌面的录制视频

android后台录屏推流 录屏 推流_IP_09


手机上也是在串流里输入IP地址即可观看,可多个设备同时观看。

--------------------------------------更新---------------------------------------------

老师想要双显示屏展示AR,但只推流第二个显示屏的内容,安排。。。

首先,将第二台显示器HDMI接口或VGA接口插入

在显示设置里 多显示器设置 下,选择“扩展这些显示器”,此时鼠标可以从当前屏幕移动到第二台显示器上。

android后台录屏推流 录屏 推流_ffmpeg_10


接着,选择主屏幕,根据所选主屏幕来确定分辨率。我将第二台显示器设置为主显示器,根据第二台显示器的分辨率来设置录制桌面的分辨率,我连接的显示器分辨率为2560x1440,

android后台录屏推流 录屏 推流_Windows_11


那么在原来命令行

ffmpeg -f gdigrab -i desktop -f flv rtmp://本机IP地址:1935/live

基础上,在 -i dessktop 之前添加命令 -s 2560x1440-s 表示分辨率

android后台录屏推流 录屏 推流_android后台录屏推流_12

此时,屏幕录制便是在(0,0)(2560,1440)录制,即录制第二显示器。
(如果不添加该命令,则会同时录制两个显示屏,播放的视频是两个桌面同时出现在播放器上)
录屏分辨率参考

至此,大功告成!