The Brick Experiment channel has these few minutes of video, that sparked my interest in building this project:
If I'm reading this right, the video lets us think this is real time, whereas in reality they have visual contact on their submarine the whole time, and a camera was attached to it, so they could only access the footage after the trip was over.
In our case, ideally I'd like to have a live video stream of an embedded camera, back to a local screen from the control deck. From the design desk, the main limiting factor is bandwidth: the video has to feed through water 😬
Bandwidth Requirements
Using this calculator, here are a few sample bandwidths requirements for a 30fps frame rate:
Resolution / Encoding | h.264 base low quality |
h.264 main medium quality |
h.264 high high quality |
MPEG4 medium quality |
---|---|---|---|---|
0.3MP - 640 x 480 | 0.3 | 0.4 | 0.7 | 0.9 |
HD 720p - 1280 x 720 | 0.9 | 1.3 | 2 | 2.8 |
Full HD - 1920 x 1080 | 2.1 | 3 | 4.5 | 6.4 |
UHD 4K - 3840 x 2160 | 8.4 | 11.8 | 18.1 | 25.4 |
On the plus side, there is quite a window of bandwidth available. On the other side, I have no idea what I'll get out of the hardware I'll use.
So let's say we need at least 200kbps (640x480@24fps) and ideally 3000kbps (1920x1080@30fps).
Hardware
In the interest of getting an MVP out as fast as possible, I'll pick whatever camera is the typical one for the board I'll use. At the time of writing, I'm aiming for raspberry pi zeros, so the camera 3 wide is the way to go:
Relevant specs:
- Focus range: 5cm–∞
- Horizontal field of view: 102 degrees
- Resolution: 11.9 megapixels
- Common video modes: 1080p50, 720p100, 480p120
- Autofocus system: Phase Detection Autofocus