最近一个师姐做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
以文本形式打开nginx-win.conf文件,添加rtmp的内容如下:
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 命令
此时打开网页,输入“localhost”,如显示Welcome to nginx! 那么说明配置成功啦!
nginx搭建参考链接
接下来就要使用ffmpeg进行录屏推流
1、下载ffmpeg
[下载地址](http://ffmpeg.org/download.html#build-windows)
进入网站后,点击Windows图标,再点击Download Build开始下载,将下载的文件解压至指定目录。
2、配置环境变量
右键“我的电脑”,点击“属性”,点击“高级系统设置”,点击“环境变量”,将解压后ffmpeg文件夹下的bin文件添加至Path。
打开cmd命令提示符窗口。输入命令“ffmpeg –version”。如果命令提示窗口返回FFmpeg的版本信息,那么就说明安装成功了,你可以在命令提示行中任意文件夹下运行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服务)
出现下图则成功!
录屏推流参考链接
ffmpeg常用基本命令参考链接
最后是播放
我是下载了VLC播放器进行播放,PC、安卓和苹果都可以安装。
[下载链接](https://www.videolan.org/vlc/)
打开VLC播放器,点击菜单里的“媒体”,点击“打开网络串流”,输入自己推流的IP地址,点击播放,就可以接收视频啦!
这是我在自己电脑上播放自己桌面的录制视频
手机上也是在串流里输入IP地址即可观看,可多个设备同时观看。
--------------------------------------更新---------------------------------------------
老师想要双显示屏展示AR,但只推流第二个显示屏的内容,安排。。。
首先,将第二台显示器HDMI接口或VGA接口插入
在显示设置里 多显示器设置 下,选择“扩展这些显示器”,此时鼠标可以从当前屏幕移动到第二台显示器上。
接着,选择主屏幕,根据所选主屏幕来确定分辨率。我将第二台显示器设置为主显示器,根据第二台显示器的分辨率来设置录制桌面的分辨率,我连接的显示器分辨率为2560x1440,
那么在原来命令行
ffmpeg -f gdigrab -i desktop -f flv rtmp://本机IP地址:1935/live
基础上,在 -i dessktop 之前添加命令 -s 2560x1440-s 表示分辨率
此时,屏幕录制便是在(0,0)(2560,1440)录制,即录制第二显示器。
(如果不添加该命令,则会同时录制两个显示屏,播放的视频是两个桌面同时出现在播放器上)
录屏分辨率参考
至此,大功告成!