การสตรีมมิ่งวันนี้ไม่ได้ถูกจำกัดแค่ในมือของผู้เชี่ยวชาญ มาพร้อมกับพลังของ Nginx และ FFmpeg ทุกคนก็สามารถตั้งค่าระบบสตรีมมิ่งได้ง่ายๆ บน Linux ของคุณเอง หัวข้อที่เราจะครอบคลุมนี้จะช่วยให้คุณทำความเข้าใจและติดตั้งอย่างง่ายๆ ด้วยข้อมูลและคำแนะนำทีละขั้นตอน
ทำไมการสตรีมมิ่งด้วย Nginx และ FFmpeg ถึงน่าสนใจ?
Nginx กับโมดูล RTMP และ FFmpeg เป็นเครื่องมือที่ทรงพลังที่คุณสามารถใช้ตั้งค่าเซิร์ฟเวอร์สตรีมมิ่งได้อย่างมีประสิทธิภาพ การผสมผสานกันของ Nginx ที่มีความสามารถในการรับชมวิดีโอคุณภาพสูง และ FFmpeg ที่เป็นเครื่องมือเข้ารหัสคุณภาพดี ทำให้สามารถรองรับข้อมูลจำนวนมากได้อย่างราบรื่น
ค่าของระบบนี้คือความยืดหยุ่นและความสามารถในการปรับปรุง การตั้งค่าเซิร์ฟเวอร์ที่สามารถสตรีมไลฟ์สดได้โดยไม่ต้องไขกุญแจซอฟต์แวร์แพลตฟอร์มที่มีค่าใช้จ่ายสูง หรือการสมัครสมาชิกราคาแพง
อุปกรณ์ที่จำเป็น
ก่อนที่เราจะเริ่ม มีอุปกรณ์บางชนิดที่คุณจะต้องมี:
- เซิร์ฟเวอร์ Linux ที่สามารถใช้งาน Ubuntu ได้
- การเข้าถึง root หรือการใช้งาน `sudo`
- ความรู้พื้นฐานในการใช้คำสั่ง command line
เตรียมพร้อมเซิร์ฟเวอร์ของคุณ
ขั้นแรก มาทำให้ระบบของคุณพร้อมใช้งาน ปรับปรุงและติดตั้งแพคเกจที่จำเป็นทั้งหมด
อัพเดตและติดเครื่องมือพื้นฐาน
sudo apt update && sudo apt upgrade -y
ติดตั้ง ffmpeg (ถ้า repo ไม่ทันสมัย ให้ใช้ static build จาก ffmpeg.org หรือ PPA)
sudo apt install -y curl git build-essential pkg-configหลังจากนั้นให้ติดตั้ง Nginx และโมดูล RTMP พร้อม FFmpeg ด้วยคำสั่งต่อไปนี้
ติดตั้ง ffmpeg (ถ้า repo ไม่ทันสมัย ให้ใช้ static build จาก ffmpeg.org หรือ PPA)
sudo apt install -y libnginx-mod-http-rtmp ffmpeg
ตรวจสอบเวอร์ชัน
ffmpeg -versionถ้าต้องการ NVENC (NVIDIA GPU) ต้องติดไดรเวอร์ NVIDIA + nvidia-container-toolkit หรือ CUDA libs แล้วติด ffmpeg ที่คอมไพล์มาพร้อม nvenc (หรือใช้ distro ที่มีแพ็กเกจ ffmpeg + nvenc)
การตั้งค่า Nginx ด้วยโมดูล RTMP
เราเริ่มต้นด้วยการสร้างและแก้ไขไฟล์ `nginx.conf` ซึ่งเป็นหัวใจหลักในการตั้งค่าเซิร์ฟเวอร์ RTMP
sudo nano /etc/nginx/nginx.confเพิ่มคำสั่งด้านล่างในบริเวณที่เหมาะสมของไฟล์เพื่อรองรับการสตรีมมิ่งผ่าน RTMP
worker_processes auto;
events { worker_connections 1024; }
rtmp {
    server {
        listen 1935; # พอร์ต RTMP มาตรฐาน
        chunk_size 4096;
        application live {
            live on;
            record off;
            # ส่งต่อไปยัง YouTube
            push rtmp://a.rtmp.youtube.com/live2/YOUR-YOUTUBE-STREAM-KEY;
            # ส่งต่อไปยัง Facebook (ตัวอย่าง)
            push rtmps://live-api-s.facebook.com:443/rtmp/YOUR-FACEBOOK-STREAM-KEY;
            # ส่งต่อไปยัง Twitch
            push rtmp://live.twitch.tv/app/YOUR-TWITCH-STREAM-KEY;
        }
    }
}
http {
    server {
        listen 8080;
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
        location /stat.xsl {
            root /usr/local/nginx/nginx-rtmp-module/;
        }
    }
}
เปลี่ยน YOUR-YOUTUBE-STREAM-KEY เป็น key ของคุณ
ถ้าไม่ต้องการ push ไปหลาย platform ให้ลบ push ที่ไม่ใช้ทิ้งได้เลย
เพื่อให้คุณสามารถสตรีมได้ง่ายพร้อมทั้งสร้างระบบตัวอย่างเซิร์ฟเวอร์การสตรีมที่เราเริ่มจากการติดตั้งอย่างละเอียด (ต่อในเนื้อหาฉบับเต็ม)
สร้าง Systemd service (ให้รันอัตโนมัติ)
ข้อดีของระบบนี้คือคุณสามารถ auto run ถ้าดับหรือเวลารีสตาร์ทเครื่อง
sudo nano /etc/systemd/system/nginx.service
ใส่ script นี้ลงไป
[Unit]
Description=Nginx RTMP Streaming Server
After=network.target
[Service]
ExecStart=/usr/local/nginx/sbin/nginx -g 'daemon off;'
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
Restart=always
[Install]
WantedBy=multi-user.target
เปิดใช้งานและเริ่มต้น
sudo systemctl daemon-reload
sudo systemctl enable nginx
sudo systemctl start nginx
หลังจากทุกสิ่งถูกสร้างและพร้อม: ทดการสตรีมวิดีโอ
ในขณะนี้เราพร้อมที่จะแบ่งปันวิดีโอของเราแล้ว
ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -maxrate 1000k -bufsize 2000k -vf "scale=1280:720" -c:a aac -b:a 128k -f flv rtmp://your_server_ip/live/streamการตรวจสอบสตรีมมิ่งอย่างง่าย
คุณสามารถตรวจสอบวิดีโอถ่ายทอดสดได้อย่างง่ายดาย ไม่ว่าใน VLC หรือผ่าน HLS player ที่รองรับ
การตั้งค่าระบบเครือข่ายและความปลอดภัย
- ปิดพอร์ตที่ไม่จำเป็นด้วย ufw(sudo ufw allow ssh, ถ้าใช้ nginx-rtmp เปิด 1935)
- สำรอง stream key และ credentials ในไฟล์ที่มีสิทธิ์เข้าถึงเฉพาะ root/user ถูกต้อง (chmod 600)
- ตั้ง monitoring bandwidth (vnStat/ifstat) เพื่อรู้ว่าแบนด์วิดท์เพียงพอ
sudo ufw allow 1935/tcp
sudo ufw allow 8080/tcp
สรุปผล: ข้อสังเกตและเคล็ดลับ
หลังจากตั้งค่าและเริ่มสตรีมแล้ว อย่าลืมสำรองข้อมูลของคุณ ตรวจสอบสายงานการสตรีมอย่างสม่ำเสมอ เพื่อรักษาคุณภาพและความเสถียรของการสตรีม
Script สำหรับสร้างระบบ Streaming If you prefer manual installation (same result, step-by-step, no remote script), use this version instead 👇
(copy–paste directly into your terminal)
#!/bin/bash
set -e
echo "=== Update system ==="
apt update && apt upgrade -y
echo "=== Install dependencies ==="
apt install -y build-essential git libpcre3 libpcre3-dev libssl-dev zlib1g-dev ffmpeg
echo "=== Download nginx + rtmp ==="
cd /usr/local/src
git clone https://github.com/arut/nginx-rtmp-module.git
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz && cd nginx-1.24.0
echo "=== Compile nginx with RTMP ==="
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module
make -j$(nproc)
make install
echo "=== Create nginx.conf ==="
cat >/usr/local/nginx/conf/nginx.conf <<'EOF'
worker_processes auto;
events { worker_connections 1024; }
rtmp {
    server {
        listen 1935;
        chunk_size 4096;
        application live {
            live on;
            record off;
            # Push to YouTube (replace with your key)
            push rtmp://a.rtmp.youtube.com/live2/YOUR-YOUTUBE-STREAM-KEY;
        }
    }
}
http {
    server {
        listen 8080;
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
        location /stat.xsl {
            root /usr/local/nginx/nginx-rtmp-module/;
        }
    }
}
EOF
echo "=== Create systemd service ==="
cat >/etc/systemd/system/nginx.service <<'EOF'
[Unit]
Description=Nginx RTMP Streaming Server
After=network.target
[Service]
ExecStart=/usr/local/nginx/sbin/nginx -g 'daemon off;'
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable nginx
systemctl start nginx
echo "=== Create sample auto-stream script ==="
mkdir -p /videos
cat >/usr/local/bin/autostream.sh <<'EOF'
#!/bin/bash
while true; do
  find /videos -type f -name "*.mp4" | shuf | while read f; do
    ffmpeg -re -i "$f" -c copy -f flv rtmp://localhost/live/auto
  done
done
EOF
chmod +x /usr/local/bin/autostream.sh
cat >/etc/systemd/system/autostream.service <<'EOF'
[Unit]
Description=Auto 24/7 Video Stream
After=network.target nginx.service
Wants=nginx.service
[Service]
ExecStart=/usr/local/bin/autostream.sh
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable autostream
# systemctl start autostream  # uncomment to start immediately
echo
echo "✅ Installation complete!"
echo "เพิ่มวีดีโอของคุณไปที่ .mp4 files in /videos"
echo "Then run: systemctl start autostream"
echo "Monitor stream: http://YOUR_SERVER_IP:8080/stat"
echo "OBS/FFmpeg input URL: rtmp://YOUR_SERVER_IP/live"
คำสั่งพื้นฐานเปิดการใช้งานและให้สิทธิ์การเข้าถึง
sudo chmod +x /usr/local/bin/autostream.sh
sudo systemctl daemon-reload 
sudo systemctl enable autostream
sudo systemctl start autostream
