TSDuck-based MPEG Transport Stream multiplexer with full PSI/SI support


Mux Trình quản lý luồng tập hợp nhiều luồng SPTS thành một đầu ra CBR MPTS (DVB/IPTV).
Khi mux gốc đã bật statmux, mỗi bộ mã hóa FFmpeg sẽ chạy capped-VBR: -b:v <avg> -minrate <min> -maxrate <max> -bufsize <max×2>.
tsp -I null (∞ NULL gói @ tốc độ đường truyền) → -P hợp nhất tsp -I ip <stream> (che phủ các gói thực) → -P liên tục (báo động rớt) → -P pcr adjustment --bitrate X (viết lại PCR) → -P pcrverify --jitter-max 500µs → -P bitrate_monitor (cảnh báo tốc độ ±5%) → -P điều chỉnh --bitrate X --packet-burst 32 → -O ip <out>
plugin điều chỉnh phát ra chính xác mux.bitrate bps trên dây.
Thanh trên cùng của Mux hiển thị 3 tổng có trạng thái màu.
Σ avg ≤ 85 % mux.bitrate — tổng mục tiêu trung bình trên tất cả các kênh cộng với âm thanh.
Σ tối đa 160 % mux.bitrate — tổng trần cao nhất.
Σ phút 50 % mux.bitrate — tổng sàn bộ mã hóa.
Ngân sách khả dụng sau PSI/SI/EIT: ~18,5 Mbps.
Trên ≥ 10 cảnh báo trong 60 giây, một thông báo flash xuất hiện trong giao diện người dùng Mux đề xuất giảm tốc độ bit.
-P bitrate_monitor -- Periodic 60 --min/max ±5% — cảnh báo nếu tốc độ thực tế vượt quá ±5 % mục tiêu.
-P liên tục - theo dõi bộ đếm liên tục TS.
-P pcrverify --jitter-max 500000 — DVB cho phép jitter PCR ≤ 500 µs.
Sự trùng hợp GOP - tất cả các bộ mã hóa đều phát ra khung hình I đồng thời, sự trùng hợp cao nhất.
Mất tín hiệu đầu vào - một kênh chuyển sang màu đen, mux vẫn tiếp tục (nhờ cơ sở -I null).
Đăng ký quá mức (đỉnh duy trì > dung lượng) — khối/âm thanh giật ~50-200 mili giây.
Sự trôi dạt PCR - STB lặp lại cứ sau vài giây.
STB VBV chạy kém — STB mất đồng bộ hóa và thu lại (~2-3 giây).
--max-input-packets 4096 / --max-flushed-packets 4096 (FIFO nội bộ ≈ 0,3 giây @ 19 Mbps).
Huy hiệu thanh trên cùng `📐 rec X.XM` hiển thị dung lượng mux được đề xuất bắt nguồn từ định lý giới hạn trung tâm.
Màu huy hiệu: 🟢 xanh = giới hạn ≥ 99,7% rec (bảo thủ) · 🟡 hổ phách = từ 99% đến 99,7% · 🔴 đỏ = giới hạn < 99% (cung cấp dưới mức, có nguy cơ bị rớt) · 🔵 xanh = giới hạn không được đặt.
điểm z trên mỗi mục tiêu phủ sóng: 90% z=1,28 · 95% z=1,65 · 99% z=2,33 · 99,7% z=3,00 (mặc định) · 99,99% z=3,72 (cấp phát sóng).
σ_eff = σ_total × statmux_factor (statmux_factor = 0,7 khi Statmux BẬT, nếu không thì 1,0)
Kênh HD 1080p25: trung bình = 4000-5000 kbps, tối thiểu = trung bình × 0,75 (~3000-3750), tối đa = trung bình × 1,5 (~6000-7500).
Adaptive Hybrid Statmux là một cơ chế thời gian chạy giúp chuyển công suất không sử dụng từ các luồng lõi (được bảo vệ, VBR đầy đủ) sang các luồng cân bằng (hy sinh).
Dung lượng tối đa 38 Mbps
Nếu không có Statmux lai thích ứng, bạn phải định cỡ mux cho trường hợp xấu nhất Σ max.
CBR thuần túy (cố định bộ mã hóa)
VBR không có Statmux
BẬT Statmux lai thích ứng
Ghi đè đầu vào URL tùy chỉnh và Statmux loại trừ lẫn nhau.
┌─────────────────────────┐
Mức tăng thống kê chỉ xảy ra khi bộ mã hóa có phạm vi VBR rộng - khi tối đa ≈ trung bình bộ mã hóa có hiệu quả là CBR và bộ định tuyến không có gì để phân phối lại.
Ví dụ đã hoạt động - mux 38 Mbps, 10 lõi HD + 2 cân bằng:
Phạm vi được đề xuất cho mỗi luồng lõi:
Ít nhất 1 luồng cân bằng — nếu không có luồng này, bộ định tuyến Adaptive Hybrid sẽ không có gì để nén trong thời gian cao điểm, vì vậy Gain = 0
Các kênh âm nhạc và thông tin là những ứng cử viên sáng giá nhất — khả năng giảm tỷ lệ trên 90%
Theo dõi qua các mục nhật ký `[balance-router]` - hiển thị `core_max`, `remaining`, chuyển tiếp cấp cho mỗi 1 giây
Nếu `core_max > dung lượng` (cảnh báo CORE OVERPEAK trong nhật ký), hãy giảm số lượng luồng lõi hoặc giảm tốc độ tối đa của bộ mã hóa
Thêm luồng vào mux (việc gán kênh vẫn thủ công)
Chuyển đổi Statmux trên tiêu đề mux (chip màu vàng).
Đánh dấu các luồng hy sinh thông qua hộp kiểm màu cam bên phải - thường là các kênh âm nhạc/thông tin nơi việc giảm tỷ lệ là vô hình
Xong.
Nhiều kênh có tốc độ bit thay đổi chia sẻ một luồng truyền tải cố định (MPTS).
Lớp: statmux phản hồi vòng kín với tính năng nhìn về phía trước (feedforward) C1 qua bộ mã hóa VBR - nguyên tắc statmux phát sóng, được điều khiển từ độ phức tạp của nguồn.
SSM phát đa hướng UDP, trên mỗi kênh
Bộ mã hóa
độ phức tạp của nguồn
Quay lại
dòng/luồng riêng
bộ cấp phát (Σ ≤ pool)
đệm
đệm rỗng → CBR
Dây CBR ở nắp
dự đoán cảnh phức tạp trước khi nhúng
dây đo - hiệu chuẩn
tốc độ bit mục tiêu
Mỗi kênh chạy trên dòng riêng của nó theo mux (bộ mã hóa riêng biệt + kết nối vòng lặp ngược), trong đó tất cả hợp nhất thành một dòng phát đa hướng MPTS ở tốc độ bit cố định chính xác.
Bộ cấp phát kết hợp hai tín hiệu - một dự đoán từ độ phức tạp của nguồn (chuyển tiếp) và dây đo (ngược lại).
C1 đo độ phức tạp của nội dung tại bộ giải mã - dẫn đầu ra của bộ mã hóa theo độ trễ của đường ống.
Các bit chính xác trên mỗi luồng được phát ra bởi mux (bộ đếm phía người gửi) sẽ hiệu chỉnh độ phức tạp→ánh xạ tốc độ bit và giữ tổng chính xác tại nhóm.
Xác nhận quyền sở hữu của luồng được hỗ trợ bởi những gì bộ mã hóa thực sự tạo ra (× khoảng trống tối đa).
Mục tiêu không phải là tốc độ bit bằng nhau mà là chất lượng như nhau — áp lực liên tục di chuyển các bit từ kênh chất lượng cao (QP thấp) sang kênh chất lượng thấp (QP cao).
Khi C1 báo hiệu một kênh bị giảm, băng thông của nó sẽ được chuyển cho các kênh khác trong cùng một khoảng thời gian - chúng tăng tốc trước khi mức giảm thực sự chạm tới dây.
Nhóm = giới hạn N − chi phí (PSI/EIT) − âm thanh − dự trữ (thanh trượt).
Nhu cầu trên mỗi luồng = dây có thể phân phối × C1 nhìn về phía trước (thay đổi độ phức tạp tương đối) + áp lực cân bằng chất lượng.
Phân bổ nhóm theo tỷ lệ theo nhu cầu, được giới hạn ở [min, max] từ cấu hình video;
Mục tiêu của bộ mã hóa = phân bổ/hiệu chuẩn (đo EMA/mục tiêu trên mỗi luồng);
servo giữ bộ đệm giữ mức hàng đợi ở mức ~1 giây (băng tần), dừng khẩn cấp khi quá tải;
Đầu ra là luồng CBR chính xác ở giới hạn được định cấu hình.
Hàng đợi gửi giữ mức ổn định ~ 1 giây dây có khả năng hấp thụ các mức giảm GOP dưới giây (giữa các khung hình I).
Khi nội dung dưới mức giới hạn, sự khác biệt sẽ được lấp đầy bằng các gói null MPEG-TS (PID 0x1FFF).
Tốc độ đi ra được điều chỉnh đến giới hạn chính xác (ABSTIME-spin bận);
Biểu đồ xếp chồng trực tiếp của dây thật - mỗi dải là một kênh, chảy mượt mà từ bên phải.
Mỗi kênh có màu ổn định;
Đường đứt nét ở trên = nắp đã cấu hình (trần dây).
Dải màu trắng có chấm ở trên = khoảng đệm trống (dung lượng trống).
Dấu đỏ trên dòng thời gian = tràn hàng đợi gửi (thả).
Các nút chuyển đổi cửa sổ thời gian ngay lập tức (phía máy khách), nút đang hoạt động có nền màu xám.
Di chuột hiển thị tốc độ bit, QP và chỉ số chất lượng trên mỗi kênh tại thời điểm đó (giá trị lịch sử, không tồn tại).
Mức quy định nhóm hiện tại (pool/(pool−trim)).
Dải dung sai trên giới hạn - mức dự trữ vô giá trị.
Tiêu đề hiển thị% sử dụng hàng đợi gửi và mức giảm tích lũy.
Độ dài GOP chung cho tất cả các kênh trong mux (bị khóa trong cấu hình video khi bắt đầu).
Kích thước bộ đệm VBV của bộ mã hóa (ms).
Mỗi kênh trong mux có một thẻ có tên, PNR, tốc độ bit hiện tại và mục tiêu cũng như trạng thái:
Đang chạy - kênh đang mã hóa và truyền tới dây.
Đang khởi động - bộ mã hóa đang quay / ổn định.
Tắt - kênh ở trong mux nhưng không chạy (0 kbps).
Lỗi - đầu vào bị mất/bộ mã hóa bị hỏng.
StatMux tạo ra tập hợp đầy đủ các bảng MPEG-TS / DVB bắt buộc trực tiếp trong mux NIF — không có bộ chèn SI bên ngoài.
Bàn
PID
Khoảng thời gian
Mục đích/nguồn
EIT (Bảng thông tin sự kiện, PID 0x12) không tĩnh — nó được kết nối hoàn toàn với hệ thống EPG của ứng dụng.
min = tầng dưới (cảnh tĩnh).
trung bình = mức mục tiêu.
max = trần (khoảng không VBR cho các đỉnh/vết cắt).
Ví dụ (trung bình): SD 1,5–2,5M · HD 2,5–4M · FHD 4–6M · UHD 12–18M.
Chúng tôi thực hiện ghép kênh thống kê thực sự - phân phối lại bit động trên các kênh VBR chia sẻ một dây cố định với sự cân bằng chất lượng.
Dây CBR ở mức giới hạn · Bộ đệm 1 giây · phân bổ theo tỷ lệ trên mỗi luồng · Chuyển tiếp nhìn về phía trước C1 · cân bằng chất lượng · phân phối lại dự đoán · đệm rỗng · nhịp độ chính xác.
Statmux phát sóng sử dụng ước tính độ méo tốc độ của bộ mã hóa (chi phí khung hình chính xác, bộ mã hóa là nô lệ cho bộ cấp phát).
triệu chứng
Nguyên nhân/cách khắc phục
Khoảng trống / mức tăng đột biến (5–7 triệu) trong biểu đồ
Sự sụt giảm nội dung - GOP giữa các khung hình I (được hấp thụ bởi bộ đệm 1 giây) hoặc một khoảng nội dung chung (được xử lý bằng cách phân phối lại).
Giảm > 0 leo núi
Hàng đợi gửi tràn — nội dung vượt quá giới hạn.
Một kênh duy trì tốc độ bit thấp/QP cao
Nội dung tĩnh (đúng - nó giải phóng băng thông) hoặc mức tối đa quá thấp trong cấu hình.
Biểu đồ bị giật/xóa cạnh trái
Phía máy khách - làm mới cứng (Ctrl+Shift+R) cho gói JS mới.
giới hạn %/bộ đệm không thay đổi sau khi chỉnh sửa
Kết xuất lại LiveView - làm mới cứng.
SAT UDP SSM ─┐
gst_encode.py mỗi luồng: Đầu vào SAT UDP SSM → nvh264enc rc-mode=cbr.
Vòng trên mỗi đầu vào (vòng lặp TCP từ bộ mã hóa), thoát 2 lượt (ưu tiên âm thanh, video đầy đủ), bộ cấp phát tỷ lệ, đệm NULL chính xác đến nắp dây (CBR), truyền PCR từ bộ mã hóa.
Một MPTS (PAT/PMT/SDT được tạo bởi NIF) → UDP multicast trên VLAN đầu ra.
Hàng 1: ⚠ (vấn đề xác thực) · PNR · tên trong khung (màu = trạng thái).
Hàng 2+: min·avg·max kbps · độ phức tạp được dự đoán Δ thấp/trung bình/cao/đỉnh · MẤT ĐẦU VÀO · ⚙URL · bộ mã hóa Mbps · SID · service_type.
Tên màu = trạng thái luồng:
Mb/giây
Dòng 'nắp' màu đỏ: dây CBR trần (mux.bitrate) — NULL lấp đầy đến đây.
Dòng 'khoảng không N%' màu cam: = cap × thanh trượt khoảng không / 100. Mục tiêu set_bitrate của bộ mã hóa nhắm vào đây.
Vùng màu xám có chấm đen giữa nội dung và giới hạn = khoảng đệm NULL (dự trữ chưa sử dụng).
Nhấp vào dải màu của kênh → tự động mở rộng thẻ của kênh đó bên dưới.
MuxEitAdapter đọc các sự kiện từ hệ thống EPG cho mỗi dịch vụ, xây dựng các phần DVB EIT (tên, thời gian, thời lượng, mô tả, thể loại) và đóng gói chúng vào PID 0x12.
EIT được đưa trực tiếp vào mux NIF, đồng đều VÀO không gian trống (1 gói / N đầu ra + p/f theo định kỳ) - thay thế tầng tsp bùng nổ bên ngoài.
Bảng 0x4E - sự kiện hiện đang chạy + sự kiện tiếp theo.
Mux tái tạo định kỳ EIT .bin từ EPG (~15 giây) — thay đổi lịch trình EPG đến dây mà không cần khởi động lại.
Các bảng 0x50/0x51 — toàn bộ lịch trình số giờ/ngày sắp tới (các phân đoạn).
Chỉ báo lưu lượng thực so với giới hạn.
-5 Mb/giây CAP 37000 kb/giây +5 Mb/giây
Thấp hơn (→78): dự trữ NULL nhiều hơn, an toàn hơn, sử dụng giới hạn ít chặt chẽ hơn.
Cao hơn (→90): sử dụng giới hạn chặt chẽ hơn, ít NULL hơn.
⚠ ≥88 %: thanh trượt chuyển sang màu vàng — gần đến trần đóng băng tràn vòng.
Tính bất đối xứng: việc giảm giá sẽ làm tăng dự trữ một cách đáng tin cậy;
Kiểm soát mức giới hạn mà bộ mã hóa nhắm tới: mục tiêu của bộ mã hóa = ngân sách × khoảng trống% / 100 (đường màu cam trong biểu đồ).
Một kênh bị lỗi (sự cố bộ mã hóa/mất tín hiệu) ⇒ mux tiếp tục chạy, các kênh khác không bị ảnh hưởng, dây giữ nắp (NULL hấp thụ sự cố ngừng hoạt động), CC=0 đối với những người sống sót.
PCR và PES PTS/DTS được truyền qua từ bộ mã hóa (miền đồng hồ đơn ⇒ kết hợp, không trôi).
CAT — truy cập có điều kiện (chỉ khi mã hóa / ECM).
EIT — thông tin sự kiện (EPG) — từ hệ thống EPG, xem bên dưới.
NIT - thông tin mạng (ID mạng, tên, luồng truyền tải).
PAT — danh sách chương trình (bản đồ PNR → PMT PID).
PMT — trên mỗi chương trình: PID video/âm thanh/PCR, codec, bộ mô tả.
SDT — tên dịch vụ và nhà cung cấp (những gì STB hiển thị trong danh sách).
TDT/TOT - thời gian và ngày + bù cục bộ (đồng hồ STB).