دفق مع عدة كاميرات من المواد المرتجلة

بدأ كل شيء عندما قمت باستخدام OBS Studio ونوع من البرامج لخلفيات سطح المكتب المتحركة ، قمت بعمل شعار فيديو من الشعار (الذي تم تحريكه أيضًا تحت موسيقى التشغيل الحالية). في تلك اللحظة ، أدركت أن OBS Studio يمكنه أكثر من مجرد بث الألعاب. بعد التعرف على OBS Studio ، تدعي أنها أروع برنامج قابلته على الإطلاق .


اضطررت إلى بث حدث صغير للأصدقاء ، ولكن نظرًا لأنني أملك المعدات اللازمة للحصول على صوت جيد والرغبة في القيام بالهدوء ، فقد كنت محيرًا من تنظيم البث بصوت منفصل وعدة كاميرات. لأسباب مختلفة ، تبين أن الدفق كان كذلك ، ولكن بعد هذه التجربة ، يبدو لي أن أتخيل كيف يجب أن يكون. وأريد المشاركة. هنا.



ماذا؟


تتمثل الفكرة في العثور على 2-3 مشغلي شبكات لاسلكية يذهبون إلى أماكن مختلفة من الحدث ، ويتواصلون مع الناس ، ويقطعون حركة المرور ، وما إلى ذلك. (حسنا ، مثل الرجال الجادين ، باختصار). ويجلس شخص ما ويتواصل معه على الراديو ، ويستند إلى كل هذا (وأي شيء آخر ، على سبيل المثال ، أي نوع من نوافذ تسجيل الوصول / الشاشات / أجهزة العرض) محتوى فيديو مثير للاهتمام لا يكون مملًا لمشاهدته.


يمكنك أيضًا الجمع بين شاشات العديد من أجهزة الكمبيوتر في دفق واحد ، قد يكون هذا مفيدًا للألعاب. على الرغم من أن هناك على الأرجح تقنيات أخرى خاصة بهذه المهمة.


لماذا؟


لأنها تسمح لك بالقيام بعمل رائع للغاية وتحويل السقف التكنولوجي لجودة البث بشكل كبير من أجل لا شيء تقريبًا.


عند استخدام مجموعة من تدفقات الفيديو ، سيتم تحديد برودة الدفق بواسطة المكون الإبداعي والتنظيمي (جيدًا ، وجودة الاتصالات).


ماذا؟


  1. كمبيوتر محمول
    1.1. ستوديو اوبس
    1.2. nginx مع وحدة rtmp
  2. مشغلي مع هواتفهم الذكية
    2.1. نوع من التطبيقات من إصدار الطلب "stream rtmp" ، على سبيل المثال Larix Broadcaster ، أو (إذا كان هناك القليل من المال الإضافي) Ace Live Streaming أو BitStream
  3. واي فاي مستقر ، يفضل 5 جيجا هرتز
  4. وصلة صاعدة مستقرة

إذا كان لديك أي شيء آخر ، يمكنك إنشاء صوت جيد ، على الأقل على الكاميرات الثابتة (التي يمكن أن تكون أي شبكة ويب عالية الجودة نسبيًا).


وإذا كان هناك كمبيوتر Linux آخر (يقولون أنه حتى Raspberry Pi مناسب لـ stream3 للتدفقات) ، يمكنك إلغاء تحميل الكمبيوتر الرئيسي وشبكته قليلاً لمعالجة البث وإرساله.


كيف؟


البروتوكول المعترف به لدفق الفيديو هو RTMP . محاولة استخدام شيء آخر يؤدي إلى تأخيرات جامحة ، كان هذا خطأي الرئيسي.


في الإنصاف ، من الجدير بالذكر تقنية الملكية NewTek NDI (بفضل Alexsey ) ، والتي تبدو أكثر برودة من RTMP. ومع ذلك ، بالنسبة لحالة مستخدمنا ، سيتطلب استخدام NDI الكثير من المال الإضافي.

اتضح أن قبول تيار RTMP وإعادة توجيهه إلى OBS Studio أمر سهل مثل قصف الكمثرى. تحتاج فقط إلى تجميع nginx باستخدام وحدة مخصصة وكتابة التكوين. لكن المزيد عن ذلك لاحقًا.


بطريقة جيدة ، تحتاج إلى القيام بشيء مثل هذا:



أي ، لا تعطي الهواتف المحمولة الإنترنت حتى لا تنفق الموارد على أي شيء آخر غير الدفق.
ولكن إذا كان هناك بالفعل شبكة Wi-Fi جيدة مع الإنترنت (ولا توجد نقطة وصول إضافية عند 5 جيجا هرتز) ، فلا يمكنك ازدراء واستخدام الاتصالات الحالية. ومع ذلك ، لا يزال من المستحسن إرسال الدفق النهائي من اتصال آخر ، أو ، في الحالات القصوى ، من نفس ، ولكن عبر سلك.


إذا كانت هناك حاجة لتلقي تدفقات من الكاميرات وإرسال البث النهائي عبر نفس شبكة wifi ، فاختبر الاستقرار بعناية (ولاحظ أنه سينخفض ​​بشكل كبير إذا قفز حشد من الأجهزة على شبكة wifi هذه).


كيفية رفع خادم RTMP؟


من الأفضل القيام بذلك على Linux ، حتى لا تواجه مشاكل مع جميع أنواع MINGW / MSYS. وعلى جهاز منفصل (ليس بالضرورة قويًا). أو في الرصيف ، يمكنك تخطي هذا القسم ، لأن ملف الرصيف موجود بالفعل . من خلال WSL ، من الممكن أيضًا ، ولكن سيكون من الضروري إعادة توجيه منفذ TCP 1935 يدويًا في جدار الحماية.


إليك دليل رائع حول كيفية إعداد خادم RTMP الخاص بك باستخدام nginx ، كما تم كتابته في المرسى . رواية مختصرة عن الأسلوب الحر:


  1. نضع التبعيات:


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

  2. قم بتنزيل أحدث نسخة من المصدر من هنا :


     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 حيث live هو اسم تطبيق RTMP في nginx config ، و habr هو Stream Stream ، الذي يجب تغييره لكاميرات مختلفة.


  2. إذا قمت بتكوين عرض الإحصائيات (ولم تنس تغيير المسار إلى ملف stat.xsl ) ، فتحقق من وصول الدفق (في http: // localhost: 8080 / stat ).


  3. الاتصال بجميع تدفقات OBS Studio.




  4. الربح !!!



من الواضح أن الخادم لا يمكن أن يكون محليًا فحسب ، بل يمكن الوصول إليه أيضًا من الخارج ، مما سيسمح لك بالقيام بنفس الشيء ، ولكن ليس عبر Wi-Fi ، ولكن عبر الإنترنت. يمكنك إنشاء النظير الخاص بك لتدفقات مجموعة Instagram ، وإمكانيات غير محدودة بشكل عام))


هل هذا كل شيء؟


هناك بعض الأشياء الأخرى التي تعلمتها من الأخطاء وأود أن أشاركها:


  1. من الممكن والضروري تغيير معدل البت المستهدف للدفق النهائي أثناء البث ، والتكيف مع الاتصال. الاستعادة ، على سبيل المثال ، يرسم رسومات باردة توضح مقدار ما تحتاج إلى خفضه. يوجد طلب سحب لتحديد معدل البت تلقائيًا ، ولكنه توقف ((
  2. توجد معلمة Keyframe Interval ، ويجب أن تكون أكثر من ثانية (يجب تعيينها يدويًا في الإصدار المتقدم من إعدادات الإخراج ). محادثات الاستعادة حول هذا فقط بعد نهاية الدفق ، UX في أفضل حالاتها! )))
  3. هناك طلب سحب آخر مفيد للغاية ، شاركت فيه ، وغرقت فيه بنشاط ، ولكن يبدو أيضًا أنه متوقف ، على الرغم من أن المشرف قد تذكره مؤخرًا وأعاد التفكير فيه. مثل pliz ، إذا كنت تعتقد أيضًا أن غياب زر الشاشة على القنوات الصوتية أمر مروع.

الآن كل شيء مؤكد ، شكرا لكم على اهتمامكم ^ _ ^


ملاحظة


بالنسبة لأولئك الذين لا يزالون يحاولون بناء nginx من أجل Venda في كل مكان ، إليكم أشعل النار ، لقد اتضح أن هذا المسعى كان ، لم أكن خائفاً من هذه العملية من أجل لا شيء:


  • من الضروري أخذ شفرة المصدر تمامًا من Mercurial (من الجيد وجود زر "download 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.
  • ساعد هذا الجواب بشكل جيد.
  • عند rc.exe ، rc.exe استخدام rc.exe من %ProgramFiles(x86)%\Windows Kits\10\bin\10.0.16299.0\x64 ، تحتاج إلى إضافة هذا المجلد يدويًا في PATH
  • من الضروري إزالة علامة -WX من CFLAGS في Makefile بحيث لا تقاطع vorings الترجمة ، هناك vorings في 1.15.3 ...

المجموع ، لدي شيء مثل هذا:


 #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/ar420037/


All Articles