When streaming video to multiple clients simultaneously, understanding the relationship between FPS, bitrate, and file size becomes crucial. Here's what I learned while optimizing a video streaming system.
The Target: 3-5 Mbps at 24fps
Our goal was to ensure smooth playback for multiple concurrent streams. Why these numbers?
- 24fps is the film standard and provides smooth motion
- 3-5 Mbps delivers excellent quality at this frame rate
- Lower bitrates enable more concurrent streams
- Higher isn't always better!
The Math Behind Video Streaming
The relationship is straightforward but often misunderstood:
- File size ≈ (bitrate × duration)
- Higher FPS requires proportionally more bandwidth
- 60fps needs 2.5x more data than 24fps
- 30fps needs 1.25x more data than 24fps
Real-World Examples
For a 5-minute video:
- At 24fps, 4 Mbps = ~150MB file
- At 60fps, same quality needs 10 Mbps = ~375MB file
- At 30fps, same quality needs 5 Mbps = ~188MB file
Implementation Tips
-
Measuring Video Quality:
- Calculate adjusted bitrate based on FPS
- Consider file size relative to duration
- Check for unnecessarily high FPS
-
Browser-Side Analysis:
- Using
requestVideoFrameCallback
for FPS detection - Getting file size from content-length headers
- Calculating real-world bitrate
- Using
-
Quality Indicators:
- Warning thresholds for bitrate
- Adjusting expectations for FPS
- Balancing quality vs bandwidth
Lessons Learned
- Higher isn't always better
- FPS dramatically affects bandwidth needs
- Consistent quality matters more than raw numbers
- Browser APIs can help analyze video metrics
Conclusion
Understanding these relationships helps build better video streaming systems. It's not about maximum quality, but optimal quality for your use case.