مجله ایرانیکاسرورآموزش سرور، هاست، وردپرس و شبکه
دسته‌بندی نشده

ساخت سرور پخش زنده با OBS و MediaMTX روی VPS

برای پخش زنده لازم نیست حتماً Stream را مستقیماً از OBS به YouTube یا سرویس‌های مشابه بفرستید. می‌توانید روی VPS خودتان یک Live Streaming Server بسازید، OBS را به آن متصل کنید و Stream…

ساخت سرور پخش زنده با OBS و  MediaMTX روی VPS
خلاصه سریع این آموزش

برای پخش زنده لازم نیست حتماً Stream را مستقیماً از OBS به YouTube یا سرویس‌های مشابه بفرستید. می‌توانید روی VPS خودتان یک Live Streaming Server بسازید، OBS را به آن…

۷ دقیقه مطالعه ۰ دیدگاه ۱۰ مهر ۱۴۰۵ آخرین به‌روزرسانی

برای پخش زنده لازم نیست حتماً 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 گزینه مناسبی است.

اشتراک‌گذاری مقاله
گفت‌وگو درباره آموزش

دیدگاه‌ها (۰)

هنوز دیدگاهی ثبت نشده است.

دیدگاه یا سؤال خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *