CCTV Bandwidth Requirements Calculator

ANALife Services AuthorityNational Calculator Authority›CCTV Bandwidth Requirements Calculator

.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }

CCTV Bandwidth Requirements Calculator

Calculate the total network bandwidth and daily storage requirements for your CCTV surveillance system based on resolution, frame rate, compression, and number of cameras.

Number of Cameras

Resolution

D1 / CIF (0.3 MP) 720p HD (1.0 MP) 1080p Full HD (2.0 MP) 4MP (4.0 MP) 4K / 8MP (8.0 MP) 12MP (12.0 MP)

Frame Rate (fps)

Compression Standard

MJPEG (no compression factor) H.264 (factor 0.15) H.265 / HEVC (factor 0.08) H.265+ / Smart Codec (factor 0.05)

Colour Bit Depth (bits per channel)

8-bit (standard) 10-bit (HDR) 12-bit (professional)

Recording Hours per Day (h)

Retention Period (days)

Network Overhead (%)

Calculate

function cctCalc() { var cameras = parseFloat(document.getElementById('cct-cameras').value); var mp = parseFloat(document.getElementById('cct-resolution').value); var fps = parseFloat(document.getElementById('cct-fps').value); var compFact = parseFloat(document.getElementById('cct-compression').value); var bitDepth = parseFloat(document.getElementById('cct-bitdepth').value); var hours = parseFloat(document.getElementById('cct-hours').value); var days = parseFloat(document.getElementById('cct-days').value); var overhead = parseFloat(document.getElementById('cct-overhead').value);

// --- Validation --- var errors = []; if (isNaN(cameras) || cameras 1000) errors.push("Number of cameras must be between 1 and 1000."); if (isNaN(fps) || fps 60) errors.push("Frame rate must be between 1 and 60 fps."); if (isNaN(hours) || hours 24) errors.push("Recording hours must be between 1 and 24."); if (isNaN(days) || days 365) errors.push("Retention period must be between 1 and 365 days."); if (isNaN(overhead) || overhead 100) errors.push("Network overhead must be between 0 and 100%.");

if (errors.length > 0) { document.getElementById('cct-result').innerHTML = '' + errors.join('') + ''; return; }

/ * FORMULA * ------- * Pixels per frame = MP × 1,000,000 * Raw bits per frame = pixels × 3 channels × bitDepth * Raw bitrate (bps) per camera = rawBitsPerFrame × fps * Compressed bitrate (bps) per camera = rawBitrate × compressionFactor * Bitrate per camera (Mbps) = compressedBitrate / 1,000,000 * * Total raw bandwidth (Mbps) = bitratePerCamera × cameras * Total bandwidth with overhead (Mbps) = totalRaw × (1 + overhead/100) * * Storage per camera per day (GB) * = (bitratePerCamera × 1,000,000 × hours × 3600) / (8 × 1,073,741,824) * [convert bits → bytes → GiB] * * Total storage (TB) = storagePerCameraPerDay × cameras × days / 1024 /

var pixelsPerFrame = mp * 1e6; var rawBitsPerFrame = pixelsPerFrame * 3 * bitDepth; var rawBitratePerCam = rawBitsPerFrame * fps; // bps var compBitratePerCam = rawBitratePerCam * compFact; // bps var mbpsPerCam = compBitratePerCam / 1e6; // Mbps

var totalRawMbps = mbpsPerCam * cameras; var totalBwMbps = totalRawMbps * (1 + overhead / 100); var totalBwGbps = totalBwMbps / 1000;

// Storage: bits → bytes → GiB (1 GiB = 2^30 bytes) var storagePerCamPerDay = (compBitratePerCam * hours * 3600) / (8 * Math.pow(2, 30)); // GiB var totalStorageGiB = storagePerCamPerDay * cameras * days; var totalStorageTiB = totalStorageGiB / 1024;

// Recommended NVR/DVR storage with 10% file-system overhead var recommendedTiB = totalStorageTiB * 1.10;

// Format helpers function fmt(v, d) { return v.toFixed(d !== undefined ? d : 2); }

var bwDisplay = totalBwMbps >= 1000
? fmt(totalBwGbps, 3) + ' Gbps'
fmt(totalBwMbps, 2) + ' Mbps';
var storDisplay = totalStorageTiB >= 1
? fmt(totalStorageTiB, 2) + ' TiB'
fmt(totalStorageGiB, 1) + ' GiB';
var recDisplay = recommendedTiB >= 1
? fmt(recommendedTiB, 2) + ' TiB'
fmt(recommendedTiB * 1024, 1) + ' GiB';

document.getElementById('cct-result').innerHTML = '### Results ' + '' + 'Bitrate per Camera' + fmt(mbpsPerCam, 3) + ' Mbps' + 'Total Raw Bandwidth (' + cameras + ' cameras)' + fmt(totalRawMbps, 2) + ' Mbps' + 'Total Bandwidth (incl. ' + overhead + '% overhead)' + bwDisplay + '' + 'Storage per Camera per Day' + fmt(storagePerCamPerDay, 2) + ' GiB' + 'Total Storage Required (' + days + ' days)' + storDisplay + '' + 'Recommended NVR Storage (+10% FS overhead)' + recDisplay + '' + ''; }

#### Formulas Used

1. Raw bitrate per camera (bps)

RawBitrate = (MP × 1,000,000) × 3 × BitDepth × FPS

2. Compressed bitrate per camera (bps)

CompressedBitrate = RawBitrate × CompressionFactor

3. Total bandwidth with overhead (Mbps)

TotalBW = (CompressedBitrate / 1,000,000) × Cameras × (1 + Overhead/100)

4. Storage per camera per day (GiB)

Storage = (CompressedBitrate × RecordingHours × 3600) / (8 × 2³⁰)

5. Total storage (TiB)

TotalStorage = StoragePerCamPerDay × Cameras × RetentionDays / 1024

#### Assumptions & References

More Calculators

Read Next

Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...

References