×

⊳ Muxer

MPTS · TSDuck · PSI/SI

Bộ ghép kênh MPTS & Statmux lai thích ứng

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).

1. Lớp mã hóa (FFmpeg trên mỗi luồng)

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>.

2. Lớp Mux (đường ống TSDuck tsp)

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>

3. Lớp đầu ra (UDP)

plugin điều chỉnh phát ra chính xác mux.bitrate bps trên dây.

Kích thước được đề xuất (Σ phút / trung bình / tối đa so với mux.bitrate)

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.

Ví dụ: 4 kênh HD trong mux DVB-T 19 Mbps

Ngân sách khả dụng sau PSI/SI/EIT: ~18,5 Mbps.

Chẩn đoán & báo động

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.

Trục trặc và nguyên nhân của chúng

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).

tham số đường ống tsp (mux_worker.ex)

--max-input-packets 4096 / --max-flushed-packets 4096 (FIFO nội bộ ≈ 0,3 giây @ 19 Mbps).

Tính toán năng lực thực nghiệm (CLT)

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)

Giá trị được đề xuất cho mỗi kênh (HD H.264)

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).

Statmux lai thích ứng

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ốc độ bit được phân chia như thế nào

Dung lượng tối đa 38 Mbps

Mức tăng thực tế (trung bình 10 luồng × 3 Mbps, tối đa 4 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

URL ↔ Độc quyền của Statmux

Ghi đè đầu vào URL tùy chỉnh và Statmux loại trừ lẫn nhau.

Đường ống (bộ mã hóa → bộ chuyển mã cân bằng → mux ffmpeg → tsp)

┌─────────────────────────┐

Định cỡ lõi VBR tối thiểu/trung bình/tối đa cho statmux

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:

Mẹo & khắc phục sự cố

Í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

Quy trình làm việc của người vận hành

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.

StatMux - ghép kênh thống kê gốc

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.

Kiến trúc và luồng dữ liệu

Architecture diagram

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.

Não: phản hồi + C1 nhìn về phía trướ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.

Dây đo (phản hồi)

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.

Khả năng giao hàng

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).

Chất lượng cân bằng

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).

Phân phối lại dự đoán

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;

Dây CBR: đệm + đệm rỗng + tạo nhịp

Đầu ra là luồng CBR chính xác ở giới hạn được định cấu hình.

Bộ đệm đứng ~1 s

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).

Khoảng đệm rỗng

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).

Nhịp độ chính xác

Tốc độ đi ra được điều chỉnh đến giới hạn chính xác (ABSTIME-spin bận);

Biểu đồ đầu ra (sông)

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.

Dải màu

Mỗi kênh có màu ổn định;

Dòng giới hạn / tối đa

Đường đứt nét ở trên = nắp đã cấu hình (trần dây).

Ban nhạc rỗng

Dải màu trắng có chấm ở trên = khoảng đệm trống (dung lượng trống).

Bỏ dấu

Dấu đỏ trên dòng thời gian = tràn hàng đợi gửi (thả).

Phạm vi (30s–30m)

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.

Chú giải công cụ

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).

giới hạn %

Mức quy định nhóm hiện tại (pool/(pool−trim)).

Dự trữ (thanh trượt)

Dải dung sai trên giới hạn - mức dự trữ vô giá trị.

Bộ đệm (giọt)

Tiêu đề hiển thị% sử dụng hàng đợi gửi và mức giảm tích lũy.

GOP

Độ 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).

VBV

Kích thước bộ đệm VBV của bộ mã hóa (ms).

Truyền trực tuyến thẻ và trạng thái

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.

Bảng PSI/SI (bộ DVB hoàn chỉnh)

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 ↔ EPG: tích hợp đầy đủ

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.

Kích thước kênh (tối thiểu/trung bình/tối đa)

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.

Liên quan đến statmux phát sóng

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.

Những gì chúng tôi có

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.

Chúng ta khác nhau ở đâu

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).

Khắc phục sự cố

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.

Kiến trúc (từ đầu đến cuối)

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.

Lịch trình

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).

Máy đo chênh lệch (phía trên biểu đồ)

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

Thanh trượt khoảng không (78–90 %, mặc định 85)

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 tín hiệu/lỗi kênh (cách ly)

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/thời gian

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).