برای پخش زنده لازم نیست حتماً Stream را مستقیماً از OBS به YouTube یا سرویسهای مشابه بفرستید. میتوانید روی VPS خودتان یک Live Streaming Server بسازید، OBS را به آن متصل کنید و Stream را از طریق HLS یا WebRTC روی سایت خودتان پخش کنید.
در این آموزش با OBS Studio 32.2.2 و MediaMTX 1.21.1 یک سرور پخش زنده راهاندازی میکنیم. OBS تصویر را از طریق RTMP به VPS ارسال میکند، MediaMTX Stream را دریافت میکند و کاربران میتوانند همان Stream را از HLS، WebRTC، RTSP یا پروتکلهای دیگر مشاهده کنند.
📌 معماری نهایی:
OBS → RTMP → MediaMTX → HLS → Browser
OBS → RTMP → MediaMTX → WebRTC → Browser
OBS → RTMP → MediaMTX → RTSP/SRT → Client
MediaMTX چیست؟
MediaMTX یک Media Server متنباز است که میتواند Stream را با پروتکلهای مختلف دریافت و دوباره منتشر کند. در نسخههای فعلی RTMP، RTSP، SRT، WebRTC، HLS و Media-over-QUIC را در یک سرویس واحد در اختیار دارید.
این یعنی لازم نیست برای RTMP یک سرویس، برای HLS یک سرویس و برای WebRTC یک برنامه جدا نصب کنید.
نسخه بررسیشده MediaMTX: 1.21.1
نسخه پایدار OBS Studio: 32.2.2
RTMP، HLS و WebRTC چه تفاوتی دارند؟
| پروتکل | کاربرد در این پروژه | Latency تقریبی |
|---|---|---|
| RTMP | ارسال OBS به سرور | کم تا متوسط |
| HLS | پخش ساده و مقیاسپذیر در وب | بیشتر |
| WebRTC | پخش با تأخیر پایینتر | کم |
| SRT | انتقال مقاومتر روی شبکه نامطمئن | قابل تنظیم |
برای Live Streaming چه VPSای لازم است؟
اگر MediaMTX فقط Stream را بدون Transcoding دریافت و توزیع کند، CPU زیادی مصرف نمیشود. عامل مهمتر پهنای باند است.
مثلاً اگر Stream شما ۶Mbps باشد و ۱۰۰ کاربر مستقیماً از همان VPS آن را ببینند، ترافیک خروجی لحظهای میتواند حدود ۶۰۰Mbps شود. به همین دلیل برای تعداد Viewer بالا معمولاً HLS را پشت CDN قرار میدهند.
Live Streaming روی VPS ایران
برای پخش زنده کاربران داخل ایران میتوانید Ingest Server را روی VPS ایران اجرا کنید. اگر Viewer زیادی دارید، ظرفیت پورت و ترافیک پلن را قبل از راهاندازی بررسی کنید.
مرحله اول: نصب Docker
مستندات فعلی MediaMTX استفاده از Docker را برای محیط Production پیشنهاد میکنند، چون محیط اجرا قابل پیشبینی و ایزولهتر است.
sudo apt update sudo apt install ca-certificates curl -y sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc
سپس Docker Engine و Compose Plugin را از Repository رسمی Docker نصب کنید.
مرحله دوم: ساخت پوشه MediaMTX
sudo mkdir -p /opt/mediamtx cd /opt/mediamtx
مرحله سوم: فایل mediamtx.yml
یک Password قوی برای Publisher بسازید:
openssl rand -hex 24
سپس فایل Configuration:
logLevel: info
rtmp: yes
rtmpAddress: :1935
hls: yes
hlsAddress: :8888
webrtc: yes
webrtcAddress: :8889
webrtcAdditionalHosts:
- stream.example.com
authInternalUsers:
- user: obs
pass: CHANGE_THIS_LONG_PASSWORD
permissions:
- action: publish
path: live
- user: any
pass:
permissions:
- action: read
path: live
- action: playback
path: live
- user: any
pass:
ips:
- 127.0.0.1
- ::1
permissions:
- action: api
- action: metrics
- action: pprof
paths:
live:
در این تنظیم فقط کاربر obs اجازه Publish روی مسیر live دارد، اما مشاهده Stream برای کاربران آزاد است.
⚠️ پسورد را ساده انتخاب نکنید. اگر Publish بدون Authentication باشد، هر کسی که IP و Path سرور را بداند میتواند Stream خودش را روی سرور شما منتشر کند.
مرحله چهارم: Docker Compose
services:
mediamtx:
image: bluenviron/mediamtx:1.21.1
restart: unless-stopped
ports:
- "1935:1935"
- "8888:8888"
- "8889:8889"
- "8189:8189/udp"
- "8890:8890/udp"
volumes:
- ./mediamtx.yml:/mediamtx.yml:ro
اجرا:
sudo docker compose up -d sudo docker compose logs -f
مرحله پنجم: تنظیم Firewall
برای RTMP و HLS حداقل پورتهای زیر لازم هستند:
sudo ufw allow 1935/tcp sudo ufw allow 8888/tcp sudo ufw allow 8889/tcp sudo ufw allow 8189/udp
اگر SRT نیز استفاده میکنید:
sudo ufw allow 8890/udp
مرحله ششم: تنظیم OBS Studio
در OBS وارد Settings → Stream شوید.
Service: Custom
Server:
rtmp://stream.example.com/live?user=obs&pass=YOUR_PASSWORD
Stream Key: خالی
MediaMTX برای RTMP، Username و Password را از Query Parameterهای user و pass میپذیرد.
تنظیم Bitrate در OBS
برای شروع با 1080p30 میتوانید Bitrate حدود ۴۵۰۰ تا ۶۰۰۰kbps را آزمایش کنید. برای 720p معمولاً مقدار کمتر کافی است.
مهمتر از عدد دقیق این است که Upload اینترنت فرستنده پایدار باشد. اگر Upload واقعی ۵Mbps است، Stream ششمگابیتی انتخاب خوبی نیست.
شروع Live
روی Start Streaming در OBS بزنید. سپس Logهای MediaMTX را بررسی کنید:
sudo docker compose logs -f
مشاهده Stream با HLS
MediaMTX برای مسیر live بهصورت خودکار HLS تولید میکند.
صفحه Player داخلی:
http://stream.example.com:8888/live
Playlist مستقیم:
http://stream.example.com:8888/live/index.m3u8
مشاهده با WebRTC
http://stream.example.com:8889/live
WebRTC معمولاً Latency پایینتری نسبت به HLS دارد، اما تنظیم شبکه و NAT آن کمی حساستر است.
پخش Live داخل سایت
سادهترین روش HLS با iframe:
<iframe src="https://stream.example.com/live" scrolling="no" allow="autoplay; fullscreen" style="width:100%;aspect-ratio:16/9;border:0;" ></iframe>
برای کنترل کامل Player بهتر است Playlist را با hls.js داخل video element اجرا کنید.
RTMPS؛ رمزنگاری OBS تا سرور
RTMP معمولی رمزنگاریشده نیست. اگر Stream از اینترنت عمومی عبور میکند، استفاده از RTMPS یا یک تونل امن ارزش بررسی دارد.
MediaMTX از RTMPS پشتیبانی میکند، اما OBS برای TLS انتظار Certificate معتبر دارد. در محیط Production از Domain و Certificate معتبر استفاده کنید.
HLS یا WebRTC؛ کدام برای سایت بهتر است؟
اگر پخش برای صدها یا هزاران Viewer و Latency چندثانیهای قابل قبول است، HLS مدیریت و CDN کردن سادهتری دارد.
اگر تأخیر بسیار پایین برای کلاس آنلاین، حراجی یا تعامل دوطرفه مهم است، WebRTC انتخاب جذابتری است.
پخش چندکیفیتی Live
MediaMTX بهتنهایی کیفیتهای جدید را از یک Stream H.264 تولید نمیکند. اگر OBS فقط 1080p ارسال کند و بخواهید HLS چندکیفیتی داشته باشید، باید Transcoding انجام شود.
دو روش اصلی دارید: OBS چند Rendition بفرستد یا یک FFmpeg Transcoder میان Ingest و Delivery قرار دهید. برای معماری بزرگتر مقاله Adaptive Video Streaming با HLS را هم ببینید.
امنیت Live Streaming Server
✅ Publish را بدون Authentication باز نگذارید.
✅ Password طولانی و تصادفی استفاده کنید.
✅ API و Metrics را فقط روی localhost یا شبکه مدیریت قرار دهید.
✅ از HTTPS/RTMPS یا VPN برای اطلاعات حساس استفاده کنید.
✅ Portهای غیرضروری را در Firewall باز نکنید.
✅ Container Image و MediaMTX را بهروز نگه دارید.
خطاهای رایج
OBS وصل نمیشود
IP، DNS، پورت 1935، Firewall و Username/Password را بررسی کنید.
OBS Connected است اما HLS باز نمیشود
Log MediaMTX را بررسی کنید و مطمئن شوید Stream واقعاً روی Path مورد انتظار Publish شده است.
HLS تأخیر زیادی دارد
HLS ذاتاً نسبت به WebRTC Latency بیشتری دارد. اگر تعامل زنده مهم است WebRTC را بررسی کنید.
WebRTC فقط داخل شبکه کار میکند
webrtcAdditionalHosts، UDP Port و Public IP/NAT را بررسی کنید.
سؤالات متداول
آیا میتوان با OBS سرور پخش زنده شخصی ساخت؟
بله. OBS Stream را به Media Server روی VPS ارسال میکند و Media Server آن را با HLS، WebRTC یا پروتکلهای دیگر منتشر میکند.
MediaMTX چیست؟
Media Server متنبازی است که دریافت و انتشار Stream با RTMP، RTSP، SRT، WebRTC و HLS را پشتیبانی میکند.
آیا MediaMTX روی Docker اجرا میشود؟
بله و مستندات رسمی Docker را برای محیطهای Production پیشنهاد میکنند.
برای OBS بهتر است RTMP یا WebRTC استفاده کنیم؟
MediaMTX برای OBS استفاده از RTMP را روش پیشنهادی استاندارد معرفی میکند. برای سناریوهای خاص WHIP/WebRTC نیز قابل استفاده است.
آیا میتوان Live را روی سایت پخش کرد؟
بله. خروجی HLS یا WebRTC را میتوان داخل Player سایت قرار داد.
جمعبندی
با OBS و MediaMTX میتوانید بدون سرویس واسط یک Ingest Server شخصی بسازید. OBS از طریق RTMP Stream را ارسال میکند و MediaMTX همان Stream را برای HLS، WebRTC، RTSP و سایر Protocolها آماده میکند.
برای تعداد Viewer بالا بهتر است Delivery را از Ingest جدا و HLS را پشت CDN قرار دهید. برای Latency پایینتر نیز WebRTC گزینه مناسبی است.






دیدگاهها (۰)