一切始于使用我,使用OBS Studio和某种动画桌面墙纸程序时,我从徽标中制作了视频徽标(该徽标在当前播放的音乐下也具有动画效果)。 那时,我意识到OBS Studio可以提供的不仅仅是流媒体游戏。 与OBS Studio进行了近距离接触后,她声称这是我见过的最酷的程序。
我不得不为朋友举办一场小型活动,但是由于我拥有良好的声音和渴望做凉的设备,因此我对由单独的声音和几台摄像机组成的直播感到困惑。 由于种种原因,结果似乎是马马虎虎,但是经过这段经历,我似乎在想象它应该如何。 我想分享。 在这里

什么啊
这个想法是要找到2-3个无线运营商,他们可以去活动的不同地点,与人交流,减少交通流量等。 (嗯,简而言之,就像认真的家伙一样)。 然后有人坐在对讲机上与他们交流,然后从所有这些内容(以及其他任何形式,例如任何受约束的窗户/监视器/投影仪)中形成有趣的视频内容,这些内容不会让人讨厌。
您也可以将多台计算机的屏幕合并为一个流,这可能对游戏有用。 尽管很可能还有其他专门用于此任务的技术。
怎么了
因为它可以让您做得很酷,并且几乎完全没有改变流质量的技术上限。
当使用一堆视频流时,视频流的凉爽程度将取决于创意和组织组成部分(以及连接的质量)。
什么啊
- 手提电脑
1.1。 Obs工作室
1.2。 带有rtmp 模块的 nginx - 运营商使用智能手机
2.1。 发出请求“ stream rtmp”的某种应用程序,例如Larix Broadcaster或(如果有一点额外的钱) Ace Live Streaming或BitStream - 稳定的Wi-Fi,最好为5GHz
- 稳定的上行链路
如果还有其他问题,至少可以在固定摄像机(可以是任何相对高质量的网络)上发出良好的声音。
并且如果还有另一台Linux计算机(他们说即使Raspberry Pi也可以使用≤3个流),则可以稍微卸载主计算机及其网络以处理和发送流。
怎么了
公认的视频流协议是RTMP 。 尝试使用其他东西会导致巨大的滞后,这是我的主要错误。
公平地讲,值得注意的是专有技术NewTek NDI (感谢Alexsey ),它似乎比RTMP凉爽。 但是,对于我们的用户情况,使用NDI 将需要很多额外的钱。
事实证明,接受RTMP流并将其重定向到OBS Studio就像炮击梨一样容易。 您只需要使用自定义模块编译nginx并编写配置即可。 但是稍后会更多。
以一种好的方式,您需要执行以下操作:

就是说,不要让手机上网,这样就不会在流之外花费任何资源。
但是,如果Internet已经有了良好的Wi-Fi(并且在5GHz处没有额外的接入点),那么您就不能轻视和使用现有的连接。 但是,仍然希望从另一连接发送最终流,或者在极端情况下,从另一连接通过电线发送最终流。
如果需要从摄像机接收流并通过同一wifi发送最终流,请仔细测试稳定性(请注意,如果有很多设备跳到该wifi上,稳定性会大大降低)。
如何提高RTMP服务器?
最好在Linux上执行此操作,以免遇到各种MINGW / MSYS问题。 并在单独的硬件上(不一定功能强大)。 或者在docker中 ,您可以跳过此部分,因为dockerfile已经存在 。 通过WSL也可以,但是有必要在防火墙中手动转发TCP端口1935。
这是一本很棒的手册,该手册介绍了如何使用nginx设置自己的私有RTMP服务器 。 自由泳的简要介绍:
我们把依赖性:
sudo apt install build-essential libpcre3 libpcre3-dev libssl-dev
从此处下载源的最新Mainline版本:
wget http://nginx.org/download/nginx-1.15.2.tar.gz
下载最新版本的RTMP模块 :
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip -O rtmp-module.zip unzip !$ -d .
创建一个Makefile:
./configure --with-http_ssl_module --add-module=./nginx-rtmp-module-master
如果您在进入“ Configuration summary
之前陷入困境,我们将解决问题。
此命令将配置流媒体nginx到/usr/local/nginx/
并使用命令sudo /usr/local/nginx/sbin/nginx
。 因此,来自存储库的nginx不会有任何感觉。 这可以通过检查./configure --help
来更改。
我们编译:
make -j4
安装:
echo "nginx with RTMP module" > description-pak sudo checkinstall --pkgname nginx-rtmp --provides nginx --nodoc --deldesc -y sudo mkdir /usr/local/nginx/logs/ # Doesn't start without it
原则上,在这种情况下使用make install
是安全的,但仍然没有必要 。
检查一下
$ /usr/local/nginx/sbin/nginx -v nginx version: nginx/1.15.2
自订
sudo vim /usr/local/nginx/conf/nginx.conf
最后,添加RTMP服务器配置:
rtmp { server { listen 1935; application live { live on; record off; } } }
如果需要,可以配置HTTP服务器以显示统计信息 。
扩展坞描述了您还可以配置什么,确实有很多东西。 如果您知道如何做得更好,我将很乐意在注释中添加有关服务器配置的部分。
我们方便
alias rtmp-start="sudo /usr/local/nginx/sbin/nginx" alias rtmp-stop="sudo /usr/local/nginx/sbin/nginx -s stop" alias rtmp-status="cat /usr/local/nginx/logs/nginx.pid"
使用RTMP服务器怎么办?
在rtmp://< IP>:1935/live/habr
处从移动应用程序向其发送流rtmp://< IP>:1935/live/habr
其中live
是nginx配置中RTMP应用程序的名称,而habr
是Stream Key ,必须为不同的摄像机更改。
如果已配置为显示统计信息 (并且没有忘记更改stat.xsl
文件的路径),请检查流是否已到达(位于http:// localhost:8080 / stat )。
连接到所有OBS Studio流。


利润!!!
显然,该服务器不仅可以是本地服务器,还可以从外部访问,这将使您可以执行此操作,但不能通过Wi-Fi,而是可以通过Internet。 您可以制作自己的Instagram群组流的模拟,并且一般来说,无限的可能性))
这就是全部吗?
我还从错误中学到了很多东西,并希望分享:
- 有可能而且有必要在广播过程中更改最终流的目标比特率,并调整连接性。 例如,重播会绘制很酷的图形,显示您需要降低多少。 有一个拉取请求可以自动选择一个比特率 ,但是它停滞了((
- 有一个这样的“ 关键帧间隔”参数,并且必须大于一秒(必须在“ 输出”设置的“ 高级”版本中手动设置)。 Restream仅在流结束后才讨论此问题,UX处于最佳状态! )))
- 还有一个非常有用的Pull Request ,我参与了其中,但我主动淹没了它,但是它似乎也停滞了,尽管维护者最近记得并重新考虑了它。 像pliz一样,如果您还认为音频通道上缺少Monitor(监视)按钮,那就太糟糕了。
现在一切都确定了,谢谢您的关注^ _ ^
聚苯乙烯
对于那些仍在尝试为无处不在的Venda构建nginx的人,这是我所走过的耙子,那个任务竟然是,我不惧怕这个过程:
- 必须完全从Mercurial获取源代码(最好有一个“下载zip”按钮),该站点的存档中没有
src\os\win32
文件夹。 如果您从站点获取源代码,则将出现错误don't know how to make 'src/os/win32/ngx_win32_config.h'
。 - 需要一个古老的MinGW 从这里而不是
远不那么古老 MSYS2。 - 安装
mingw-developer-toolkit
需要从Perl中删除该复选框。 Perl必须是Windows。 - 这个答案很有帮助。
- 编译时,从
%ProgramFiles(x86)%\Windows Kits\10\bin\10.0.16299.0\x64
使用rc.exe
,您需要在PATH中手动添加此文件夹 - 有必要从Makefile中的
CFLAGS
中删除-WX
标志,以使voring不会中断编译,在1.15.3中有voring ...
总计,我得到这样的东西: