用几台摄像机从即兴材料中播放

一切始于使用我,使用OBS Studio和某种动画桌面墙纸程序时,我从徽标中制作了视频徽标(该徽标在当前播放的音乐下也具有动画效果)。 那时,我意识到OBS Studio可以提供的不仅仅是流媒体游戏。 与OBS Studio进行了近距离接触后,她声称这是我见过的最酷的程序。


我不得不为朋友举办一场小型活动,但是由于我拥有良好的声音和渴望做凉的设备,因此我对由单独的声音和几台摄像机组成的直播感到困惑。 由于种种原因,结果似乎是马马虎虎,但是经过这段经历,我似乎在想象它应该如何。 我想分享。 在这里



什么啊


这个想法是要找到2-3个无线运营商,他们可以去活动的不同地点,与人交流,减少交通流量等。 (嗯,简而言之,就像认真的家伙一样)。 然后有人坐在对讲机上与他们交流,然后从所有这些内容(以及其他任何形式,例如任何受约束的窗户/监视器/投影仪)中形成有趣的视频内容,这些内容不会让人讨厌。


您也可以将多台计算机的屏幕合并为一个流,这可能对游戏有用。 尽管很可能还有其他专门用于此任务的技术。


怎么了


因为它可以让您做得很酷,并且几乎完全没有改变流质量的技术上限。


当使用一堆视频流时,视频流的凉爽程度将取决于创意和组织组成部分(以及连接的质量)。


什么啊


  1. 手提电脑
    1.1。 Obs工作室
    1.2。 带有rtmp 模块的 nginx
  2. 运营商使用智能手机
    2.1。 发出请求“ stream rtmp”的某种应用程序,例如Larix Broadcaster或(如果有一点额外的钱) Ace Live StreamingBitStream
  3. 稳定的Wi-Fi,最好为5GHz
  4. 稳定的上行链路

如果还有其他问题,至少可以在固定摄像机(可以是任何相对高质量的网络)上发出良好的声音。


并且如果还有另一台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服务器 。 自由泳的简要介绍:


  1. 我们把依赖性:


    sudo apt install build-essential libpcre3 libpcre3-dev libssl-dev 

  2. 从此处下载源的最新Mainline版本:


     wget http://nginx.org/download/nginx-1.15.2.tar.gz # Check for newer versions tar xzf nginx-* && cd !$ 

  3. 下载最新版本的RTMP模块


     wget https://github.com/arut/nginx-rtmp-module/archive/master.zip -O rtmp-module.zip unzip !$ -d . 

  4. 创建一个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来更改。


  5. 我们编译:


     make -j4 

  6. 安装:


     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是安全的,但仍然没有必要


  7. 检查一下


     $ /usr/local/nginx/sbin/nginx -v nginx version: nginx/1.15.2 

  8. 自订


     sudo vim /usr/local/nginx/conf/nginx.conf 

    最后,添加RTMP服务器配置:


     rtmp { server { listen 1935; application live { live on; record off; } } } 

    如果需要,可以配置HTTP服务器以显示统计信息
    扩展坞描述了您还可以配置什么,确实有很多东西。 如果您知道如何做得更好,我将很乐意在注释中添加有关服务器配置的部分。


  9. 我们方便


     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服务器怎么办?


  1. rtmp://< IP>:1935/live/habr处从移动应用程序向其发送流rtmp://< IP>:1935/live/habr其中live是nginx配置中RTMP应用程序的名称,而habrStream Key ,必须为不同的摄像机更改。


  2. 如果已配置为显示统计信息 (并且没有忘记更改stat.xsl文件的路径),请检查流是否已到达(位于http:// localhost:8080 / stat )。


  3. 连接到所有OBS Studio流。




  4. 利润!!!



显然,该服务器不仅可以是本地服务器,还可以从外部访问,这将使您可以执行此操作,但不能通过Wi-Fi,而是可以通过Internet。 您可以制作自己的Instagram群组流的模拟,并且一般来说,无限的可能性))


这就是全部吗?


我还从错误中学到了很多东西,并希望分享:


  1. 有可能而且有必要在广播过程中更改最终流的目标比特率,并调整连接性。 例如,重播会绘制很酷的图形,显示您需要降低多少。 有一个拉取请求可以自动选择一个比特率 ,但是它停滞了((
  2. 有一个这样的“ 关键帧间隔”参数,并且必须大于一秒(必须在“ 输出”设置的“ 高级”版本中手动设置)。 Restream仅在流结束后才讨论此问题,UX处于最佳状态! )))
  3. 还有一个非常有用的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 ...

总计,我得到这样的东西:


 #cmd: "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" #cmd: set PATH=%PATH%;%ProgramFiles(x86)%\Windows Kits\10\bin\10.0.16299.0\x64 #cmd: C:\MinGW\msys\1.0\msys.bat #bash: cd nginx-1.15.3 ./auto/configure \ --with-cc=cl \ --with-debug \ --prefix= \ --conf-path=conf/nginx.conf \ --pid-path=logs/nginx.pid \ --http-log-path=logs/access.log \ --error-log-path=logs/error.log \ --sbin-path=nginx.exe \ --http-client-body-temp-path=temp/client_body_temp \ --http-proxy-temp-path=temp/proxy_temp \ --http-fastcgi-temp-path=temp/fastcgi_temp \ --http-scgi-temp-path=temp/scgi_temp \ --http-uwsgi-temp-path=temp/uwsgi_temp \ --with-cc-opt=-DFD_SETSIZE=1024 \ --with-pcre=objs/lib/pcre-8.42 \ --with-zlib=objs/lib/zlib-1.2.11 \ --with-openssl=objs/lib/openssl-1.1.1 \ --with-openssl-opt=no-asm \ --with-select_module \ --with-http_ssl_module \ --add-module=nginx-rtmp-module-master nmake 

Source: https://habr.com/ru/post/zh-CN420037/


All Articles