Transcode Ingest (Eksperimental)
Mengecilkan bitrate kamera saat masuk dengan encoder hardware GPU terintegrasi, kalibrasi kualitas per kamera, dan anggaran encoder terukur.
Fitur ini eksperimental dan hanya aktif di balik --experimental (EXPERIMENTAL=true). Tanpa flag itu, semua variabel TRANSCODE_* diabaikan dengan peringatan di log, sehingga nilai yang tersisa di .env produksi tidak dapat mengubah perilaku. Perilaku, default, dan nama variabel dapat berubah antar rilis minor.
Pengenalan
Secara default Liodra menyalin bitstream kamera apa adanya ke stream keluaran dan ke disk. Ini hampir tanpa CPU, tetapi ukuran rekaman sepenuhnya ditentukan oleh kamera: kamera H.264 lama pada 4 sampai 8 Mbps menghabiskan 40 sampai 80 GB per hari.
Transcode ingest menyisipkan encoder hardware di dalam proses ingest setiap kamera yang direkam, mengubahnya ke h264 atau hevc dengan bitrate yang dibatasi per piksel. Hasil ukur pada Intel Core Ultra: 13,3 Mbps kamera H.264 masuk menjadi 5,5 Mbps HEVC keluar (turun 59%) dengan CPU sekitar 3%.
Sifat penting:
- Hardware saja: memerlukan GPU terintegrasi Intel atau AMD yang di-passthrough dengan
--device /dev/dri. Tanpa hardware yang terdeteksi, flag tidak berpengaruh dan stream tetap disalin. Tidak ada fallback ke encoder software untuk ingest. - Hanya yang direkam: stream di channel
voddanvop(tidak direkam) dan sumber yang codec-nya sudah sama dengan target selalu disalin. - Tidak pernah menolak: bila anggaran encoder terlampaui, Liodra hanya memberi
warningpada respons tambah device dan di log; kamera tetap diterima.
Cara Menggunakan
Pastikan GPU terlihat di host
ls -l /dev/dri # harus ada renderD128 (atau serupa)Jalankan dengan flag eksperimental
docker run -d --name liodra \
--device /dev/dri \
--ulimit nofile=65535:65535 \
-p 9080:9080 -p 1935:1935 -p 8554:8554 -p 8080:8080 \
-v $(pwd)/storage:/usr/share/nginx/html/storage \
registry.gitlab.com/nodefluxio/liodra:3.9.0 \
--as-nvr --set-retention \
--experimental --transcode-into hevc --transcode-quality 30Flag --transcode-* di-ekspor entrypoint sebagai variabel lingkungan TRANSCODE_*; Anda juga bisa menyetelnya langsung lewat -e.
Periksa anggaran encoder
curl -s http://localhost:9080/api/v1/health | jq .data.transcode{
"encoder": "hevc",
"hardware": "Intel Core Ultra (renderD128)",
"slots": { "benchmark": 60, "effective": 48, "used": 12 },
"streams": { "transcoding": 12, "copied": 3, "lagging": 0 },
"warning": ""
}Tab System Health pada dashboard :8080 menampilkannya sebagai kartu GPU Encoder Budget dengan estimasi "≈ N × 720p atau M × 1080p lagi".
Tambahkan kamera seperti biasa
Tidak ada perubahan pada API Devices. Setiap kamera baru di channel yang direkam otomatis dikalibrasi dan di-transcode; kamera dengan codec yang sudah sama dengan target dilaporkan di streams.copied.
Fitur Utama
Kalibrasi kualitas per kamera
TRANSCODE_QUALITY (default 30 pada skala kualitas encoder 0..51; semakin besar semakin kecil bitrate) adalah batas bawah. Untuk tiap kamera Liodra melakukan encode sampel 4 detik dan menaikkan QP sampai bitrate keluaran berada di bawah TRANSCODE_MAX_BPP (default 0,06 bit per piksel per detik, setara 1,4 Mbps pada 720p25 atau 3,1 Mbps pada 1080p25). Setelah 90 detik berjalan, pass kedua mengukur keluaran nyata, mengoreksi sekali, dan me-restart ingest. QP tidak pernah diturunkan di bawah nilai dasar, jadi kamera yang sudah hemat tidak dibuat lebih besar.
Anggaran encoder terukur
Saat start, Liodra menjalankan benchmark 6 stream pada encoder hardware (hasilnya di-cache per hardware di transcode-capacity.json pada volume storage), lalu menurunkannya dengan faktor 0,8 sesuai apa yang dicapai ingest nyata di lapangan (sekitar 40 sampai 48 stream 720p25 bersamaan pada Core Ultra). Saat runtime, transcoder yang tertinggal menurunkan effective lebih jauh. Hanya proses starting/active yang dihitung sebagai slot terpakai.
Angka ini informatif: tidak ada TRANSCODE_MAX_SLOTS, dan Liodra tidak menolak kamera. Gunakan warning sebagai sinyal untuk menambah host atau kembali ke mode salin bagi sebagian kamera.
Deteksi lag
Bila sebuah ingest yang di-transcode berjalan di bawah kecepatan real-time secara berkelanjutan, Liodra mencatat baris [EncoderLag] di log, menandai device dengan warning, dan menaikkan streams.lagging. Pemulihan juga dicatat. Lag yang menetap berarti GPU jenuh: kurangi jumlah kamera yang di-transcode atau turunkan resolusi/frame rate di kamera.
Variabel
| Variabel | Flag entrypoint | Default | Arti |
|---|---|---|---|
EXPERIMENTAL | --experimental | false | Gerbang untuk semua fitur di halaman ini |
TRANSCODE_INTO | --transcode-into | kosong (salin) | h264 atau hevc (h265 diterima sebagai alias) |
TRANSCODE_QUALITY | --transcode-quality | 30 | Kualitas dasar 0..51; dinaikkan per kamera oleh kalibrasi |
TRANSCODE_THREADS | --transcode-threads | 2 | Batas thread encoder per ingest; 0 = tanpa batas |
TRANSCODE_MAX_BPP | --transcode-max-bpp | 0.06 | Batas bitrate per piksel per detik; 0 = tanpa batas |
Nilai di luar rentang membuat Liodra menolak start dengan pesan yang jelas, terlepas dari gerbang EXPERIMENTAL.
Hubungan dengan transcode on-demand
Jangan tertukar dengan ?transcode=true pada /api/v1/play/ts dan /api/v1/playbacks, yang mengubah HEVC menjadi H.264 per penonton agar bisa diputar browser. Transcode ingest bekerja sekali per kamera di sisi masuk; bila targetnya h264, penonton browser tidak lagi memerlukan transcode on-demand sama sekali, yang sekaligus melonggarkan MAX_ONDEMAND_PROCESSES.