راه اندازی capture card و استریم کردن آن

یه capture card  دانشگاه داره که از اون برای استریم ویدئو کنفرانس‌ها استفاده میکرد و میخواستن وقتی ویدئو داره استریم میشه، یه لوگوی دانشگاهم گوشش باشه و خب اگه لازم شد بتونن متنی چیزی هم به تصویر اضافه کنن. توی این پست سعی میکنم مرحله به مرحله نحوه استریم کردن از این دستگاه خاص و ارسال به یه استریم سرور و درنهایت نشون دادنش توی یه صفحه وب رو بنویسم تا بلکه بعدا به درد کسی بخوره و برای منم یه داکیومنتی باشه.

سخت افزار کامپیوتر سرویس دهنده capture card

این کامپیوتر که روش capture card رو تنظیم کردم ۴ گیگ رم داره، یه پردازنده intel core i3 داره و ۱۰۰ گیگ هارد داره که برای استریم کردن هیچ مشکلی نداره و عملا هیچ فشاری روی سیستم نیست

دانلود درایورهای capture card

capture cardی که استفاده شده اینجا یه مدل قدیمیه به اسم matrox mxo2 mini که درایوراشو از سایتش دانلود کردم. از اونجایی که حدودا ۳ ساله برای این سخت افزار آپدیت نیومده، منم ویندوز ۷ نصب کردم که با این درایور مشکل خاصی نداشته باشم. درایور رو میشه از صفحه دانلود درایور از اینجا دانلود کرد. توی صفحه‌ای که باز میشه، تیک show legacy products رو بزنید و دستگاه mxo2 mini رو انتخاب کنید و بعد next رو بزنید. در مرحله بعد سیستم عامل رو انتخاب کنید که من ویندوز ۷ رو انتخاب میکنم. مرحله بعد supported applicationها رو میگه انتخاب کنید که نیازی به انتخاب نیست و Skip supported applications (none) رو انتخاب کنید و به مرحله بعد برید. توی صفحه بعد چندتا لینک دانلود میاره که ما فقط اولی رو لازم داریم. لینک دوم کتابخونه‌های برنامه نویسیه و لینک سوم هم داکیومنت این سخت‌افزاره:   روی لینک دانلود نرم‌افزار که کلیک میکنید یه صفحه لاگین باز میشه، برای بار اول باید ثبت‌نام انجام بدید و دستگاه رو رجیستر کنید، برای دفعات بعد یا با نام کاربری و رمز عبور باید وارد بشید و یا با شماره سریال دستگاه. شماره سریال دستگاه پشت اون نوشته شده. بعد از وارد کردن اطلاعات وارد صفحه دانلود میشید که شما باید MtxUtils رو دانلود کنید:

تنظیمات capture card

بعد از نصب درایور، نرم‌افزار matrox AV Tools رو از منوی استارت باز کنید و تنظیمات رو به این شکل اعمال کنید: روی دکمه OK بزنید تا صفحه بعدی باز بشه. توی صفحه بعد روی دکمه CAM بزنید تا خروجی تصویر توی صفحه نشون داده بشه (من اینجا یه ست تاپ باکس به کپچر کارت وصل کردم). بعد از اینکه مطمعن شدیم خروجی تصویر به درستی نشون داده میشه، وارد مرحله بعد میشیم تا روی استریم تصویر بتونیم تغییرات اعمال کنیم.

دانلود OBS

خب حالا برای اینکه بتونیم خروجی رو ببینیم و قبل از اینکه برای بیننده ارسال کنیم تغییراتی روش اعمال کنیم، مثلا لوگو و متن بهش اضافه کنیم، یا مثلا از چندتا دوربین تصویر بگیریم و … به یه نرم‌افزار احتیاج داریم. من برای این کار از OBS استفاده میکنم. برای دانلود کافیه که اینجا برید و بسته به سیستم عاملتون فایل نصب رو دانلود کنید. بعد از اینکه پروسه نصبو طی کردید، بعد از بازکردن OBS یه همچین صفحه‌ای میبینید:

وصل کردن capture card به OBS

توی قسمت sources روی + کلیک کنید و Video Capture Device رو انتخاب کنید. توی صفحه‌ای که باز میشه یه اسم برای دستگاه انتخاب کنید و OK رو بزنید: توی صفحه بعد، برای Device مقدار Matrox A/V Input رو انتخاب کنید: حالا با زدن دکمه OK، خروجی کارت کپجر روی صفحه نمایش داده میشه:   خب حالا مثلا اگه بخوایم یه لوگو به استریم اضافه کنیم کافیه تا مجدد توی قسمت Sources روی + بزنیم و Image رو انتخاب کنیم و توی صفحه بعد، یه اسم برای عکس انتخاب کنیم و توی صفحه‌ای که باز میشه عکس رو انتخاب میکنید: حالا توی صفحه اصلی میشه نسبت source های متخلفو تنظیم کرد:   حالا که با موفقیت تونستیم اتصال این دوتا رو برقرار کنیم میتونیم هم خروجی capture card رو ضبط کنیم و هم استریمش کنیم روی یه سرور که بقیه بتونن از طریق شبکه اونو تماشا کنن. که من راه دومو انجام میدم.

نصب Nginx

خب برای نصب وب سرور nginx احتیاج به یه سرور لینوکسیه که من از اوبونتو استفاده میکنم. پیشنیازهای نصب رو با این دستور دانلود کنید:
$ sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
  آخرین نسخه nginx رو از اینجا دانلود کنید. مثلا زمانی که من این مطلبو مینویسم آخرین نسخه  ۱.۱۵ هست
wget https://nginx.org/download/nginx-1.15.2.tar.gz
حالا سورس کد ماژول RTMP رو دانلود کنید:
$ wget https://github.com/sergey-dryabzhinsky/nginx-rtmp-module/archive/dev.zip
فایل دانلود شده رو unzip کنید :
$ tar -zxvf nginx-1.15.1.tar.gz
$ unzip dev.zip
$ cd nginx-1.15.2
حالا nginx رو buid میکنیم:
$ ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-dev
$ make
$ sudo make install
حالا که nginx نصب شده، با دستور زیر اون رو شروع میکنیم:
$ sudo /usr/local/nginx/sbin/nginx
همونطور که مشخصه، nginx توی مسیر /usr/local/nginx نصب شده. حالا اگه http://<your server ip>/ رو باز کنید باید صفحه خوش آمد nginx رو ببینید. ( به جای your serverip آدرس سرور رو قرار بدید)

تنظیم nginx برای کار با RTMP

فایل تنظیمات که توی /usr/local/nginx/conf/nginx.conf هست رو باز کنید و تنظیمات اولیه زیر رو آخر فایل وارد کنید:
rtmp {
        server {
                listen 1935;
                chunk_size 4096;

                application live {
                        live on;
                        record off;
                }
        }
}
توی این تنظیمات من یک اپلیکیشن به اسم live تعریف کردم که قراره استریم RTMP رو برای هرکس که درخواست میده ارسال کنم. لیست تنظیمات کامل توی این لینک هست. سرویس Nginx رو ری‌استارت کنید:
$ sudo /usr/local/nginx/sbin/nginx -s stop
$ sudo /usr/local/nginx/sbin/nginx

تست کردن خروجی

برای اینکه استریم رو از OBS روی سرور Nginx ارسال کنید، OBS رو باز کنید و توی قسمت controls روی settings بزنید. توی صفحه‌ای که باز میشه توی تب stream برید و stream type  رو custom stream server قرار بدید و َURL رو به شکل زیر وارد کنید:

rtmp://<server ip>/live

که به جای server ip باید آدرس ip سروری که nginx روش نصبه رو بدید و برای stream key هم فعلا عبارت test رو بزارید و OK رو بزنید. حالا توی همون قسمت controls توی صفحه اصلی روی start streaming کلیک کنید. برای اینکه با یه کلاینت بتونید این خروجی استریم رو ببینید میتونید از VLC استفاده کنید. برنامه رو از اینجا دانلود کنید و نصبش کنید. بعد که برنامه رو باز کردید از منوی media گزینه open network stream رو بزنید و توی صقحه باز شده آدرس رو به صورت زیر وارد کنید:

rtmp://<server ip>/live/test

توی آدرس بالا اگه دقت کنید live اسم اپلیکیشنی بود که توی سرور تعریف کردیم و test هم برای stream keyتوی OBS وارد کردیم. حالا روی دکمه Play بزنید و خروجی رو مشاهیده کنید: خب تا اینجای کار ما یه استریم سرور داریم که میتونه خروجی هر دستگاه (دوربینی) که به کپچر کارت وصل میشه رو برای مخاطبین broadcast کنه. یه مشکلی که تو این مرحله ممکنه وجود داشته باشه اینه که  ما از پروتکل RTMP استفاده کردیم و معمولا دوست داریم که استریم‌ها از طریق HTTP قابل نمایش باشن و استفاده از RTMP توی صفحه وب چالش‌های خودشو داشت برای من و از همه مهمتر اینکه حتما نیاز به فلش داشت تا بتونه اجرا بشه. در نتیجه نیاز به سرویسی داریم که این RTMP ما رو به  HTTP تبدیل کنه.

مشاهده خروجی روی صفحه وب

برای این کار من از کتابخونه streaming-room استفاده کردم که با nodejs کار میکنه. من این سرویسو توی همون سروری که nginx نصبه راه انداختم. قبلش لازمه که شما ffmpegو nodejs رو نصب کنید. برای نصب nodejs کافیه به این صفحه برید تا بتونید آخرین نسخه رو نصب کنید و برای نصب ffmprg دستور زیر رو زدم:
sudo apt install ffmpeg
حالا آخرین نسخه streaming-room  رو از اینجا دانلود کنید. بعد از دانلود وارد فولدرش بشید و با زدن دستور npm install نیازمندی‌های اونو دانلود کنید. بعد فایل config.json رو باز کنید و مشخصات استریم رو داخلش وارد کنید، مثلا برای من این شکلی شد: برای شروع کافیه فقط تا همین دوتا خط رو تغییر بدید. بعد از اون  با زدن npm start اون رو اجرا کنید. آدرس زیر رو توی مرورگر باز کنید:

http://<server ip>:3000

وارد یه همچین صفحه‌ای میشید: به طور پیشفرض میتونید نام کاربری رو هرچیزی وارد کنید و رمز عبور رو room1 بزنیدو وارد صفحه زیر بشید: حالا میتونید استریم رو تحت صفحه وب و بدون نیاز به برنامه دیگه مثل VLC مشاهده کنید. تنظیمات بیشتر streaming-room مثل ساختن نام کاربری و غیره رو میتونید توی همون فایل config.json انجام بدید.

منابع

  • https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmp-server-using-nginx.50/
  • https://github.com/brunnolou/streaming-room

پاسخ دهید