XStream Server (Legal Alternatives)

Why no Xtream UI? Xtream UI প্রায়ই কপিরাইটেড IPTV/চ্যানেল অবৈধভাবে রিব্রডকাস্টে ব্যবহৃত হয়। তাই এই গাইডে আমরা তা কভার করবো না। পরিবর্তে আপনি যাতে আইনি সোর্স দিয়ে প্রোডাকশন গ্রেড স্ট্রিমিং চালাতে পারেন তার জন্য OvenMediaEngine (OME) এবং SRS-এর স্টেপ-বাই-স্টেপ সেটআপ দেখানো হলো।

Prerequisites

  • Ubuntu 22.04/24.04 Server (Static IP)
  • Inbound ফিডের আইনি অধিকার (camera/encoder, licensed channel feed)
  • TCP/UDP: 1935 (RTMP), 3333/3478/10000-30000 (WebRTC), 80/443 (HLS/DASH)
  • FFmpeg (transcode/push এর জন্য)
OvenMediaEngine
SRS (Simple Realtime Server)
Secure Access (Auth/Token)

1 Install OvenMediaEngine (APT)

sudo apt update
sudo apt install -y curl gnupg ca-certificates
curl -fsSL https://apt.ovenmediaengine.com/ovenmediaengine.gpg | sudo gpg --dearmor -o /usr/share/keyrings/ome.gpg
echo "deb [signed-by=/usr/share/keyrings/ome.gpg] https://apt.ovenmediaengine.com/ $(. /etc/os-release; echo $VERSION_CODENAME) main" | \
sudo tee /etc/apt/sources.list.d/ovenmediaengine.list
sudo apt update
sudo apt install -y ovenmediaengine

2 Basic Config (LiveApp)

ডিফল্ট অ্যাপ LiveApp সক্রিয়—RTMP ingest, LL-HLS/WebRTC output। কনফিগ ফাইল: /opt/ovenmediaengine/conf/Server.xml এবং /opt/ovenmediaengine/conf/Origin.xml.

sudo systemctl enable --now ovenmediaengine
sudo systemctl status ovenmediaengine
# RTMP Ingest: rtmp://<server-ip>/app/stream
# Player (LL-HLS): http://<server-ip>/app/streams/stream/llhls.m3u8
# Player (WebRTC): https://<server-ip>:8443/app/stream (built-in player)

3 Ingest via FFmpeg/OBS

# Example: file/camera to RTMP
ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -b:v 3000k -c:a aac -b:a 128k \
-f flv rtmp://<server-ip>/app/stream

4 Transcoding (ABR) – Simple Map

/opt/ovenmediaengine/conf/Transcoder.xml এ প্রিসেট যোগ করে 1080p/720p/480p ladder বানান।

sudo nano /opt/ovenmediaengine/conf/Transcoder.xml
sudo systemctl restart ovenmediaengine
Tip: CPU কম হলে 720p/480p রাখুন; GPU থাকলে NVENC/VAAPI ব্যবহার করুন।

1 Install SRS (Docker)

sudo apt update && sudo apt install -y docker.io docker-compose-plugin
mkdir -p ~/srs && cd ~/srs
cat > docker-compose.yml <<'YAML'
services:
  srs:
    image: ossrs/srs:5
    ports:
      - "1935:1935"     # RTMP
      - "8080:8080"     # API/Players
      - "1985:1985"     # HTTP-API
    command: ["./objs/srs", "-c", "conf/docker.conf"]
    restart: unless-stopped
YAML
docker compose up -d

2 RTMP Ingest & HLS Output

# push a stream
ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -c:a aac -f flv \
rtmp://<server-ip>/live/stream

# Play HLS:
http://<server-ip>:8080/live/stream.m3u8
Note: SRS ডিফল্ট কনফিগে live app থাকে—প্রয়োজনে conf/docker.conf কাস্টমাইজ করুন।

3 Nginx Reverse Proxy (HTTPS)

sudo apt install -y nginx certbot python3-certbot-nginx
sudo tee /etc/nginx/sites-available/stream.conf >/dev/null <<'NGX'
server {
  listen 80;
  server_name yourdomain.com;
  location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
NGX
sudo ln -s /etc/nginx/sites-available/stream.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d yourdomain.com

1 Basic Auth (Protect Players/Manifests)

sudo apt install -y apache2-utils
sudo htpasswd -c /etc/nginx/.stream_users admin
# password prompt দেবে
sudo tee /etc/nginx/snippets/stream_basic_auth.conf >/dev/null <<'SNIP'
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.stream_users;
SNIP
# Nginx vhost এ প্রটেক্টেড লোকেশন:
location /live/ {
  proxy_pass http://127.0.0.1:8080/live/;
  include /etc/nginx/snippets/stream_basic_auth.conf;
}

2 Tokenized URLs (Nginx Secure Link)

Time-limited token দিয়ে HLS প্লেলিস্ট সুরক্ষিত করা যায়।

# /etc/nginx/nginx.conf এ http{} ব্লকে:
load_module modules/ngx_http_secure_link_module.so;

# server{} তে:
secure_link_secret supersecretkey;
location ~* /live/([a-zA-Z0-9_-]+)/index.m3u8$ {
  set $token $arg_st;
  set $exp   $arg_ex;
  secure_link "$exp$uri$remote_addr";
  secure_link_md5 "$exp$uri supersecretkey";
  if ($secure_link = "") { return 403; }
  if ($secure_link = "0") { return 410; }
  proxy_pass http://127.0.0.1:8080;
}
How to use: আপনার অ্যাপ থেকে ex (expiry epoch) ও st (md5 token) জেনারেট করে URL এ যোগ করুন।