شما هم از آن دسته از افرادی هستید که دوست دارید پخش زنده ی شما به تمامی شبکه های اجتماعی داخلی و خارجی ارسال بشه؟
آیا مشکل سرعت اینترنت دارید و پهنای باند کافی برای ارسال همه ی اونها ندارید؟
میخواهید این کار را تنها با ارسال استریم به یک سرور ساده انجام دهید؟ پس این مطلب را از دست ندهید!
دنیای جدید یعنی دنیای آنلاین، یعنی دنیایی که تمامی اخبار و اتفاقات به لحظه و با بهترین کیفیت و بصورت لایو به دست همه میرسه. شما دیگه مانند قدیم مشکلات ارسال ویدئو بصورت زنده و غیر زنده به دلیل قطعی و کم بودن سرعت اینترنت ندارید و همه حتی با گوشی ساده خودشون میتونن بروز ترین تصاویر رو بصورت زنده برای همه مخابره کنند.
شبکه های مجازی هم از این پیشرفت تکنولوژی عقب نموندن و یکی یکی پخش زنده رو به سرویس های خودشون اضافه کردن. فقط کافیه شما صفحه ای داشته باشید که تعدادی فالور داشته باشه موبایلتون رو روشن کنید اپلیکیشن اون شبکه اجتماعی رو باز و شروع کنید به لایو رفتن. خیلی عالیه ولی مشکلی هست. اغلب افراد و برندهای معروف فقط در یک شبکه اجتماعی فعالیت ندارن و تغریبا هر جا که مطرح باشه فالور و دنبال کننده دارن. اونها دوست ندارن که پخش زندشون رو فقط یکجا منتشر کنن. دوست دارن تمامی بینندها و فالورها تویه هر شبکه ی اجتماعی که دارن بتونن تصاویر زندشون رو مشاهده کنند.
اغلب اونها میان و دستگاه ها و تجهیزات گرون قیمتی رو میخرن و یا از برنامه های مختلفی (رایگان و غیر رایگان) برای این کار استفاده میکنن. بیشتر این روش ها سخت و هزینه بره و ممکنه موفقیت آمیز نباشه و از این بدتر اینکه اغلب اون ها طوری عمل میکنن که از مبدا باید برای همه بفرستید.
برای مثال اگر بخواید برای آپارات، یوتیوب، فیس بوک و وبسایت خودتون پخش زنده ارسال کنید مجبورید از اینترنتی استفاده کنید که همه اینها رو پشتیبانی کنه بطور مثال اگر بیت ریت تصویر رو 2mbps در نظر بگیرید، برای چهارتا ارسال باید سرعت آپلودی معادل 8mbps داشته باشید که بتونید به تمامی شبکه های اجتماعیتون پخش زنده رو ارسال کنید. با این حال هستن وبسایت هایی که تصاویر زنده رو دریافت کنه و به چندتا مقصد بفرسته ولی مشکلاتی داره، ممکنه بهش اعتماد نداشته باشد، یا هزینه بالایی باید براش بپردازید و یا باید با دلار پرداخت داشته باشید که برای همه آسان نیست.
من در این مقاله با استفاده از سرویس nginx به شما آموزش میدهم که با ارسال یک استریم بتونید، پخش زندتون رو براحتی به تمامی شبکه های اجتماعی ارسال کنید.
مقدمه
سرویس nginx یک وب سرویس منبع باز میباشد که برای سیستم عامل های لینوکس، ویندوز و ... منتشر شده است. ماژولی به نام nginx-rtmp-module در گیت هاب وجود دارد که توسط آن میتوان یک مدیا سرور با پروتکل های rtmp و hls در کنار وب سرویس راه اندازی کرد. پیش از این مقالات مختلفی در مورد نصب و راه اندازی و تنظیم این وب سرویس در وبلاگ منتشر کرده ام.
در این مقاله میخواهم به معرفی قابلیت Relay در این ماژول بپردازم. با استفاده از این قابلیت میتوان پخش زنده ای را دریافت و یا ارسال کرد به این معنی که اگر لینکی دارید که بخواهید تصاویر آن را دریافت و از سرور خود مشاهده نمایید از حالت دریافت pull آن استفاده و اگر بخواهید استریم ارسالی به سرور خود را به سرور دیگر باز ارسال re-stream نمایید از حالت ارسال push آن استفاده کنید.
برای شروع شما نیاز به یک سرور لینوکس یا ویندوز دارید. پیشنهاد من به شما سیستم عامل لینوکس توضیع Ubuntu میباشد.
در مرحله بعد لازم است سرویس nginx به همراه ماژول nginx-rtmp را روی سرور خود نصب نمایید. برای آموزش نصب این سرویس روی سیستم عامل ویندوز و لینوکس از آموزش های موجود در وبلاگ استفاده نمایید.
تنظیمات در nginx.conf
طبق توضیحات قبلی شما باید از حالت push برای باز ارسال re-stream پخش زنده به سرور های شبکه های اجتماعی دیگر استفاده کنید. برای ارسال استریم باید اطلاعات استریم اعم از آدرس و یا آی پی سرور، پورت، نام اپلیکیشن، استریم نیم یا استریم کی و درصورت وجود یوزر و پسورد را دریافت کرد و آنها را در فایل اصلی کانفیگ و تنظیمات به نام nginx.conf موجود در پوشه conf در شاخه اصلی nginx در اپلیکیشن مورد نظر به صورت زیر وراد کرد:
push rtmp://server_name:1935/app/stream_name;
در این صورت تمامی استریم های ارسال شده به اپلیکیشن تنظیم شده به آدرس اعلام شده ارسال خواهد شد. اگر بیش از دو استریم در یک اپلیکیشن دارید و یا میخواهید استریم با استریم نیم خاصی به لینک خاصی ارسال شود در انتها استریم نیم را با پارامتر name مشخص کنید، مانند زیر:
push rtmp://server_name:1935/app/stream_key name=test;
در این حالت فقط استریم نیم test به آدرس معرفی شده ارسال خواهند شد. همچنین دقت داشته باشید که تنظیمات push باید حتما در کروشه {}application زیر مجموعه {}server که در کروشه ی اصلی {}rtmp قرار دارد اضافه نمایید مانند زیر:
application hls { live on; hls on; hls_path temp/hls; hls_fragment 8s; push rtmp://a.rtmp.youtube.com/live2/1a2b-3c4d-5e6f-7g9h name=ali; }
همچنین بعد از ذخیره تنظیمات باید سرویس nginx را ریستارت نمایید. اگر میخواهید به چندین سرور همزمان استریم ارسال نمایید تعداد خط های متعددی با پارامتر push و آدرس شبکه های اجتماعی مختلف ایجاد کنید. شما با آموزش دریافت اطلاعات ارسال پخش زنده از شبکه های اجتماعی مختلف، تمامی اطلاعات ارسال آنها را دریافت و در فایل قرار دهید.
سرویس پخش زنده آپارات aparat.com
برای دریافت اطلاعات ارسال پخش زنده در آپارات یک حساب کاربری ایجاد کرده و شماره تلفن همراه خود را تایید نمایید و سپس روی پروفایل خود در گوشه سایت سمت چک کلیک کرده و وارد گزینه شروع پخش زنده شوید.
در انتهای صفحه پخش زنده آپارات قسمتی به نام تنظیمات پخش وجود دارد که اطلاعات سرور و استریم کی را میتوانید از آن دریافت نمایید.
بعد از کپی آنها را پشت سر هم قرار دهید، اطلاعات دریافتی به احتمال زیاد به شکل زیر خواهد بود.
push rtmp://rtmp.cdn.asset.aparat.com:443/event/abcdefghklmnopqrstuvwxyz123456789?s=abcdfgh123456789 name=source;
برای ارسال پخش زنده به آپارات کافی است این قسمت را در تنظیمات nginx.conf قرار دهید.
سرویس پخش زنده لحظه نگار LahzeNegar
برای دریافت اطلاعات ارسال پخش زنده در لحظه نگار یک حساب کاربری ایجاد کرده و سپس روی پروفایل خود در گوشه سایت سمت چک کلیک کرده و وارد اتاق فرمان شوید.
در اتاق فرمان، در منوی راست وارد قسمت تنظیمات کانال شده و آدرس سرور و کد استریم را دریافت نمایید.
بعد از کپی آنها را کنار هم گذاشته و اطلاعات را در فایل nginx.conf قرار دهید، اطلاعات دریافتی از لحظه نگار به احتمال زیاد به شکل زیر خواهد بود:
push rtmp://rtmp.lahzecdn.com:443/pro/abcdefghjy name=source;
سرویس پخش زنده ابری ابرآروان
ابروآوران یک شرکت جامع بر پایه پردازش ابری میباشد که میتواند فشار وارد بر سرور ناشی از تماشای پخش زنده توسط تعداد زیادی از کاربرانتان را تقسیم و کنترل نماید. سرویس پخش زنده این شرکت رایگان نمیباشد. برای ارسال پخش زنده از طریق سرور nginx به سرور های ابرآروان در قسمت پخش زنده وارد شده و سپس یک دامین مخصوص پخش زنده ایجاد نمایید.
سپس در قسمت استریم روی افزودن استریم کلیک کنید.
در مرحله بعد تنظیمات دلخواه خود را باتوجه به بیت ریت و تعداد کیفیت های خود انجام نمایید.
در مرحله ی بعد به صفحه استریم برگشته و روی دکمه علمیات کلیک کنید.
در صفحه جدید آدرس موجود در قسمت Input URL را برداشته و در تنظمات nginx.conf سرور خود قرار دهید. به احتمال زیاد آدرس شبیه به آدرس زیر باشد:
push rtmp://push.ir-thr-mn-cluster.arvanlive.com:1935/aBcDeFgHjY/KlmNoPqRsT name=source;
سرویس پخش زنده یوتیوب YouTube
یوتیوب یکی از قدیمی ترین شبکه های اجتماعی است که سرویس پخش زنده خود را ارائه داد. یوتیوب این سرویس رو با پخش زنده از کنسرت U2 و یک پخش زنده از پرسش و پاسخ با اوباما در 2010 تست کرد. این سرویس در سال 2013 برای عموم مردم باز شد و در سال 2017 نیز قابلیت هایی نظیر پخش زنده از اپلیکیشن موبایل و پخش زنده °360 و کیفیت 4K را به آن افزود. هم اکنون سرویس پخش زنده یوتیوب به یکی از پرطرفدار ترین سرویس های رایگان لایو تبدیل شده است.
برای شروع پخش زنده به یوتیوب رفته و در قسمت بالا سمت راست روی پروفایل کلیک کرده و وارد YouTube Studio شوید.
سپس در منوی سمت چپ صفحه ی یوتیوب استودیو روی قسمت Other Furthers کلیک کرده و وارد Live Stream now شوید. فرق Live Stream now و Live event در این است که لایو ایونت برنامه های پخش زنده ای است که زمان خاصی شروع خواهد شد و میتوان لینک نمایش عمومی آن را قبل از برنامه تولید و منتشر کرد.
سپس در این صفحه به قسمت آخر Encoder Setup مراجعه کرده و آدرس سرور و استریم نیم یا استریم کد را دریافت نمایید.
در انتها آدرس تولید شده شبیه به آدرس زیر خواهد شد.
push rtmp://a.rtmp.youtube.com/live2/a1b2-c3d4-e5f6-g7h8 name=source;
نکته : ممکن از شما بخواهید از سرور ایران استریم خود را به یوتیوب ارسال نمایید. در ایران دامین یوتیوب فیلتر میباشد، شما میتوانید با دریافت ای پی/سرور نیم اصلی آن با ابزار nslookup در ویندوز و لینوکس براحتی استریم را به سرور یوتیوب بدون استفاده از پروکسی ارسال نمیایید.
کافی است دستور زیر را در CMD ویندوز یا terminal لینوکس وارد کنید:
ali@linux$ nslookup a.rtmp.youtube.com
خروجی آن در ویندوز بصورت زیر خواهد بود:شما میتوانید از هر یک از این ای پی و هاست هایی که در این خروجی نمایش داده میشود استفاده کنید. بدین صورت آدرس استریم در nginx به صورت زیر تغییر میکند :
push rtmp://bartmp.l.google.com/live2/a1b2-c3d4-e5f6-g7h8 name=source;
سرویس پخش فیس بوک facebook
فیس بوک یکی از شبکه های اجتماعی معرف است که در زمینه ی لایو عقب نیوفتاده و این امکان را برای کاربران و صفحه های تجاری بصورت ایجاد یک پست لایو قرار داده. فرق این شبکه اجتماعی با شبکه سرویس های دیگر این است که برای مثال اگر در یوتیوب تنظیمات را در سرور و همچنین خود صفحه لایو یوتیوب انجام داده باشید، بلافاصله بعد از ارسال استریم، لایو در یوتیوب آنلاین خواهد شد و کاربران قادر به تماشای آن هستند. ولی در فیس بوک شما باید به صفحه ارسال پست رفته و حتی درصورتی که لایو در حال ارسال باشد تا دکمه منتشر کردن را فشار ندهید پست لایو در صفحه شما ظاهر نخواهد شد. و این خبر برای کاربرانی که بخواهند لایو دسته جمعی با nginx بروند کمی خبر بدی است.
البته فیس بوک API های خاصی رو برای پست مواد مختلف گذاشته و ویدئو لایو هم جزو این مواد است و این یعنی این که شما با نوشتن یک اسکریپت ساده میتونید بعد از ارسال استریم پست رو اتوماتیک publish کنید، ولی خبر بد بعدی اینه که این API رو به هر کسی نمیده و تا تایید نشید که پلتفرم شما چیه و برای چی این API رو میخواد ، دسترسی برای پست اتوماتیک ویدیوی لایو ندارید.
پس بهتره بریم سراغ آموزش همین روش سخت.
ابتدا باید به تایم لاین خودتون یا پیجی که میخواید استریم رو بهش ارسال کنید رفته و بعد از کلیک روی ... روی Live Video کلیک کنید:
سپس در صفحه ای که باز شده به تب Connect رفته و آدرس سرور و استریم کی رو از اونجا کپی کنید. اگر هم میخواهید هر دفعه آدرس و کی استریم رو کپی نکنید تیک Use a persistent stream key رو بزنید که بهتون یه استریم کی ثابت بده.
در انتها این صفحه رو نگه دارید و منتظر شد که استریم ارسال بشه و دکمه شیر را فشار دهید.
نکته : همون طور که میدونید دامین فیس بوک در ایران فیلتر هست و برای اینکه بتونید از سرور های ایرانی به فیس بوک استریم کنید باید همانند یوتیوب از دستور nslookup استفاده کنید، که خروجی این دستور بصورت تصویر زیر است:
اگر در آدرس سرور یا همون Server URL فیس بوک دقت کرده باشید، میبینید که با بقیه کمی فرق داره، مخصوصا تویه Port.
فیس بوک از یکم می ماه 2019 سرویس SSL رو برای پروتکل rtmp اعمال میکنه و از نوامبر هم اونو اجباری میکنه. و خبر بد اینه که nginx relay از rtmps پشتیبانی نمیکنه و باید از راه حل های جایگذین استفاده کنید. برای مثال میشه از ویژگی exce در nginx استفاده کرد و باهاش ffmpeg رو فراخوانی کرد ولی متاسفانه در ویندوز این ویژگی پشتیبانی نمیشه.
برای همین باید از یک نرم افزار tunnel استفاده کنید که rtmp رو با یک اتصال ssl از سرور خارج کنه. Stunnel نرم افزار پروکسی هست که یک رمز نگاری TLS رو به اتصال بین کاربر و سرور اضافه میکنه بدون اینکه در محتوی اونا دستکاری کنه. پس کافیه Stunnel نصب کنیم، استریم رو به اون ارسال و اون استریم رو با اتصال SSL به فیس بوک میفرسته.
Stunnel برای رمزنگاری از OpenSSL استفاده میکنه و خوشبختانه برای اغلب سیستم عامل ها دولپ شده. نصب Stunnel در ویندوز و لینوکس فرق میکنه که اونو در ادامه توضیح میدم ولی تنظیمات داخل اون یکیه.
نصب و تنظیم Stunnel در لینوکس
برای نصب نرم افزار در لینوکس ubuntu از دستور زیر استفاده کنید:
ali@linux$ sudo apt-get install stunnel4
سپس فایلی در آدرس /etc/stunnel/ با دستور زیر ایجاد کرده:
ali@linux$ sudo nano /etc/stunnel/stunnel.conf
تنظیمات زیر را در آن قرارداده و فایل را ذخیره نمایید:
setuid = stunnel4 setgid = stunnel4 pid=/tmp/stunnel/stunnel.pid output = /tmp/stunnel/stunnel.log [fb-live] client = yes accept = 127.0.0.1:19350 connect = live-api-s.facebook.com:443
دقت نمایید در صورتی که از سرور ایران استفاده میکنید به جای live-api-s.facebook.com یکی از خروجی های nslookup را قرار دهید برای مثال edgetee-upload.xx.fbcdn.net .
در مرحله ی بعدی به فابل اصلی تنظیمات رفته و نرم افزار را فعال کنید، برای فعال سازی فایل را با دستور زیر باز کرده و مقدار ENABLED را 1 قرار دهید:
ali@linux$ sudo nano /etc/stunnel/stunnel.conf
ENABLED=1
الان باید سرویس stunnel را اجرا نمایید، قبل از اجرا فولدر لاگ آن را ساخته و سطح دسترسی را 777 قراردهید. برای ساخت و اعطای سطح دسترسی از دو دستور زیر استفاده نمایید:
ali@linux$ sudo mkdir /tmp/stunnel
ali@linux$ sudo chmod 777 /tmp/stunnel
در پایان با دستور زیر سرویس stunnel را ریستارت نمایید:
ali@linux$ sudo systemctl restart stunnel4
نصب و تنظیم Stunnel در ویندوز
برای نصب Stunnel در ویندوز آن را از وبسایت رسمی آن به آدرس stunnel.org ، دانلود کرده و سپس نصب نمایید. دقت فرمایید که برای ویندوز نسخه stunnel-x.xx-win64-installer.exe دانلود شود.
سپس به منوی استارت رفته و برنامه stunnel GUI Start را اجرا کنید:
سپس به منوی Configuration رفته و روی Edit configuration کلیک کنید.
فایلی با برنامه notepad باز خواهد شد، در این فایل تنظیمات زیر را در انتهای آن قرار داده و فایل را ذخیره نمایید:
[fb-live] client = yes accept = 127.0.0.1:19350 connect = live-api-s.facebook.com:443
دقت نمایید در صورتی که از سرور ایران استفاده میکنید به جای live-api-s.facebook.com یکی از خروجی های nslookup را قرار دهید برای مثال edgetee-upload.xx.fbcdn.net .
سپس در نرم افزار به منوی Configuration و روی Reload Configuration کلیک نمایید.
تنظیمات نهایی در nginx
اکنون شما Stunnel را نصب و تنظیم کرده اید. برای ارسال استریم باید در فایل nginx.conf مقدار push برای فیس بوک را 127.0.0.1:19350 قرار دهید و اپلیکیشن و استریم کی را بعد از آن بصورت زیر قرار دهید:
push rtmp://127.0.0.1:19350/rtmp/1234567890123456?s_bl=1&s_ps=1&s_sml=0&s_sw=0&s_vt=api-s&a=AbCdEfGhKlmN-O12 name=source;
سرویس پخش زنده تویتر با نام پریسکوپ Periscope
تویتر یکی از شبکه های اجتماعی معروفی است که سرویس پخش زنده خود را بصورت مستقیم راه اندازی نکرده و با وبسایتی به نام Periscope همکاری کرده است. برای شروع کافی است با اکانت تویتر خود در این وبسایت ثبت نام کنید و از منوی سمت راست بالا وارد صفحه ی Producer شوید. در این صفحه روی Create New Source کلیک کنید.
در این قسمت کافی است اطلاعات استریم سرور و استریم نیم را برداشته و با قرار دادن پشت سره هم آدرس زیر را تولید نمایید:
push rtmp://fr.pscp.tv:80/x/ympqar94n6ui name=source;
نکته: دقت نمایید که وبسایت pscp.tv همانند یوتیوب و فیس بوک در ایران فیلتر میباشد و برای ارسال مستقیم باید از ای پی و یا آدرس اصلی آن استفاده کنید که برای بدست آوردن آن از دستور nslookup میکنیم، که خروجی این دستور بصورت تصویر زیر است:
همانطور که پیداست نیم سرور اصلی هم فیلتر است و شما باید در این وبسایت از IP به جای دومین استفاده نمایید.
push rtmp://35.180.143.91:80/x/ympqar94n6ui name=source;
درصورتی که نیاز به آموزش سرویس خاصی دارید در کامنت اعلام نمایید ، بزودی آن را به این مطلب اضافه خواهیم کرد.
امیدوارم این مطلب براتون مفید بوده باشه.
آقای قائمی سلام وقت بخیر
مطالب ارزشمندی رو به اشتراک میگذارید ممنونم از شما
خدا خیرتون بده .
موفق باشید.
میشه لطفا درباره ارسال به اینستا وتلگرام هم بنویسید.
سلام دوست عزیز،
برای تلگرام کافیه یه پلیر HTML با قابلیت ساپورت HLS استفاده کنید و لینک HLS رو داخل اون بگذارید و لینک وبی که پلیر داخل اون فول اسکرین شده هست رو منتشر کنید داخل تلگرام.
تلگرام اونو پخش میکنه
برای اینستاگرام هم بزودی آموزشی در این رابطه جداگانه میگذارم.
سلام علیکم
ممنون از آموزش های بسیار خوبتون
یه سوال داشتم چطور میشه مثلا ۲ تا push کنیم و بعد در حین استریم اون دو تا، یه جای دیگه هم push کرد یعنی همزمان استارت نکرد
و سوال دیگر هم اینکه مثلا 3 تا push کنیم و بعد در حین استریم سه تا، یکی را کنسل کرد یعنی همزمان stop نکرد
ممنون
سلام ممنون، اگر مطالب براتون مفید بود حتما برای دوستانتان منتشر کنید.
شما برای کنترل استریم و قطع و وصلی اون در هنگام استریم میتونید از Control module استفاده کنید.
مثلا برای قطع یک استریم پلی شده:
curl http://localhost:8080/control/drop/client?app=myapp&name=mystream&clientid=1
اگر نیاز داشتید بگید که مطلبش رو براتون منتشر کنم.
اگر لطف کنید مطلب را بگذارید که کمک بزرگی کردید
ممنون
آقای قائمی سلام وقتتون بخیر درباره ی ارسال به تلگرام که گفتین یه پلیر html میشه از همین پلیری که خودتون داخل سایت قرار دادین استفاده کنیم ؟
جایگذاری وب پلیر پخش زنده در وبسایت با plyr.io
باسلام،
بله امکانش هست، شما میتوانید از نسخه های قدیمی jwplayer هم استفاده نمایید.
میشه توضیح بدین نسخه قدیمی jwplayer رو چه کنیم؟
متوجه منظور سوالتون نشدم، ولی میتوانید لینک hls را در هر پلیری که از این پروتکل پشتیبانی میکند قرار دهید.
مهندس جان سلام
ممنون از پست عالی
من تمامی مراحل رو بخوبی میرم اما از Pushکردنم خطا میگیره
nginx: [emerg] "push" directive unsuppored parameter in /usr/local/nginx/conf/nginx.conf:219
چیکار باید بکنم
ممنون
محتوای خط 219 فایل nginx.conf موجود در فولدر conf را قرار دهید.
سلام برای پخش زنده روی تلفن همراه در قالب یک اپلیکیشن هم مطلبی دارید توی سایتتون؟
اگر زحمت بکشید اون مورد رو هم آموزشش رو بگذارید ممنون میشم
خیر، متاسفانه در برنامه ی وبلاگ نیست.
اگر نیاز به راهنمایی بیشتر دارید با ایمیل من در تماس باشید.
سلام
ممنون از آموزش خوبتون. من استفاده کردم خیلی خوب و روان توضیح داده بودید.
سپاس گذاریم.
فقط اگه امکانش هست آموزش pull کردن رو هم بزارید ممنون میشم.
با تشکر.
سلام براي ژخش اينستا گرام راهكاري نداريد؟