https://github.com/gkozlenko/node-media-server
git clone https://github.com/gkozlenko/node-media-server.git
cd node-media-server
npm install
chỉnh file config/index.js
const config = {
// Host and port for bidding
host: '0.0.0.0',
port: 3000,
// Path to static files
publicPath: path.resolve('./public'),
// Path to video files
mediaPath: path.resolve('./media'),
// Path to index files
indexPath: path.resolve('./index'),
// Path to log files
logsPath: path.resolve('./logs'),
// Video chunk duration
fragmentDuration: 10,
// DRM configuration
drmEnabled: false,
drmSeed: 'DRM SEED',
// Logger configuration
logLevel: intel.DEBUG,
logSize: '50m',
logKeep: 10,
shutdownInterval: 1000,
workers: {
// Server Worker
web: {
enabled: true,
count: require('os').cpus().length,
shutdownTimeout: 5000,
},
// Movie indexer Worker
indexer: {
enabled: true,
count: 1,
timeout: 5000,
},
},
};
npm start
===================================================================================
CHẠY NHƯ 1 DỊCH VỤ
tạo file
sudo nano /etc/systemd/system/xemphim.service
===================================================================================
[Unit]
Description=Chạy Xem Phim Server
After=network.target
[Service]
User=sv01
WorkingDirectory=/xemphim/node-media-server
ExecStart=/usr/bin/npm start
Restart=always
[Install]
WantedBy=multi-user.target
==================================================================================
sudo systemctl enable xemphim
sudo systemctl start xemphim
sudo systemctl status xemphim
==================================================================================
chuyển đổi hàng loạt file mp4 thành m3u8
==================================================================================
#!/bin/bash
# Khai báo đây là một script bash
mkdir -p output_hls
# Tạo thư mục output_hls nếu chưa tồn tại
for file in *.mp4; do
# Lặp qua tất cả các file có đuôi .mp4 trong thư mục hiện tại
name="${file%.mp4}"
# Cắt phần đuôi .mp4 để lấy tên file làm tên thư mục đầu ra
mkdir -p "output_hls/$name"
# Tạo thư mục con cho từng file để chứa các file HLS (playlist.m3u8 và .ts)
ffmpeg -i "$file" \
-codec: copy \
-start_number 0 \
-hls_time 10 \
-hls_list_size 0 \
-f hls "output_hls/$name/playlist.m3u8"
# Sử dụng ffmpeg để chuyển đổi file .mp4 thành định dạng HLS (M3U8 + TS)
# -codec: copy → giữ nguyên codec gốc (không mã hóa lại)
# -start_number 0 → đặt số thứ tự segment bắt đầu từ 0
# -hls_time 10 → mỗi segment dài 10 giây
# -hls_list_size 0 → không giới hạn số lượng segment trong playlist
# -f hls → định dạng đầu ra là HLS
echo "✅ Đã xử lý: $file"
# In ra màn hình tên file đã được xử lý xong
done
==================================================================================
tạo file doi_ten.bat để đổi tên hàng loạt folder thành t01 t02 . . .
==================================================================================
@echo off
setlocal enabledelayedexpansion
set i=1
for /d %%f in (*) do (
ren "%%f" "t!i!"
set /a i=!i!+1
)
==================================================================================
CHUYỂN MP4 THÀNH M3U8 (có Nvidia)
ffmpeg -i "29.mp4" -c:v h264_nvenc -preset fast -level 4.2 -s 846x480 -b:v 2000k -maxrate 4000k -bufsize 6000k -c:a aac -b:a 128k -start_number 0 -hls_time 5 -hls_list_size 0 -f hls "G:\\PHIM BO\\LONG CHAU TRUYEN KY\\t29\\playlist.m3u8"
===================================================================================
CHUYỂN MP4 THÀNH M3U8
ffmpeg -i "54.mp4" -c:v libx264 -preset fast -level 4.2 -s 846x480 -b:v 2000k -maxrate 4000k -bufsize 6000k -c:a aac -b:a 128k -start_number 0 -hls_time 5 -hls_list_size 0 -f hls "G:\\PHIM BO\\LONG CHAU TRUYEN KY\\t54\\playlist.m3u8"
===================================================================================
CHUYỂN MP4 THÀNH M3U8 (có báo âm thanh khi hoàn thành)
ffmpeg -i "60.mp4" -c:v libx264 -preset fast -level 4.2 -s 846x480 -b:v 2000k -maxrate 4000k -bufsize 6000k -c:a aac -b:a 128k -start_number 0 -hls_time 5 -hls_list_size 0 -f hls "G:\\PHIM BO\\LONG CHAU TRUYEN KY\\t60\\playlist.m3u8" && powershell.exe -Command "(New-Object Media.SoundPlayer 'C:\\Windows\\Media\\Alarm01.wav').PlaySync()"
===================================================================================
TẠO FOLDER CHỨA FILE
for /l %i in (1,1,10) do mkdir t%i
===================================================================================
TẠO TẬP PHIM
===================================================================================
<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Danh sách tập phim</title>
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
margin: 20px;
}
#episodes {
max-width: 800px;
margin: auto;
display: flex;
flex-wrap: wrap;
gap: 10px;
justify-content: center;
}
#episodes a {
text-decoration: none;
padding: 8px 12px;
background-color: #007bff;
color: white;
border-radius: 5px;
transition: 0.3s;
display: inline-block;
}
#episodes a:hover {
background-color: #0056b3;
}
</style>
</head>
<body>
<h2>Danh sách tập phim</h2>
<div id="episodes"></div>
<script>
// Đợi trang tải hoàn toàn rồi mới chạy script
document.addEventListener("DOMContentLoaded", function() {
let container = document.getElementById("episodes");
let baseURL = "https://xemphim.trungdungmedia.com/tuthanngotngao/t";
for (let i = 1; i <= 38; i++) { // Chỉnh sửa vòng lặp từ 1 đến 38
let link = document.createElement("a");
let paddedIndex = String(i).padStart(2, '0'); // Thêm 0 vào trước nếu i có 1 chữ số
link.href = `${baseURL}${paddedIndex}/playlist.m3u8`; // Sử dụng paddedIndex
link.target = "test";
link.innerText = `TẬP ${paddedIndex}`; // Sử dụng paddedIndex
container.appendChild(link);
}
});
</script>
</body>
</html>