CCTV Bandwidth Requirements Calculator
ANA›Life Services Authority›National 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
- Raw frame size assumes RGB colour space with 3 channels (Y, Cb, Cr or R, G, B).
- Compression factors are industry-typical averages: H.264 ≈ 0.15, H.265 ≈ 0.08, H.265+ ≈ 0.05 relative to uncompressed video (SMPTE / Hikvision white papers).
- Network overhead (default 20%) accounts for TCP/IP packet headers, retransmissions, and protocol encapsulation per IEEE 802.3 Ethernet framing guidelines.
- Storage uses binary GiB/TiB (1 GiB = 2³⁰ bytes) consistent with hard-drive manufacturer specifications.
More Calculators
- Negligence Damages Estimator
- Pipe Size Flow Rate Calculator
- Settlement vs. Trial Cost-Benefit Calculator
- Retirement Savings Goal Calculator
- Field of View Calculator
- Depth of Field Calculator for Machine Vision Lenses
- Net Worth Tracker Calculator
- Privileged Access Risk Score Calculator
- Identity Theft Recovery Cost Estimator
- Vulnerability Risk Score Calculator
- Security Awareness Training ROI Calculator
- Cybersecurity Insurance Premium Estimator
Read Next
Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...