Camera Video AVI Files¶
Current AVI Recording System¶
The current camera recording path is a custom AVI muxer in MediaToolsLib.
- Writer:
MJPEGWriterinlibs/MediaToolsLib/MJPEGWriter_mtools.cpp - Reader:
MJPEGReaderinlibs/MediaToolsLib/MJPEGReader_mtools.cpp - AVI structure definitions:
libs/MediaToolsLib/AviDefs.handlibs/MediaToolsLib/AviDefs_mtools.cpp - Wiring into media tools:
libs/MediaToolsLib/MediaTools.h
Record flow:
- Start recording opens an AVI file and writes initial RIFF/AVI headers.
- The writer subscribes to media input:
- Video as JPG frames (
eMediaInputVideoJpg) - Audio as PCM (
eMediaInputAudioPcm)
- Video as JPG frames (
- Video chunks are written as MJPEG (
00dcchunks). - Audio chunks are written as PCM (
01wbchunks). - On stop, the writer appends
idx1, closes, then reopens and rewrites headers with final totals/timing.
Playback flow:
- Reader validates expected AVI layout/signature markers.
- Reader parses chunk offsets and stream metadata.
- Video chunks are sent to GUI as JPG frames.
- Audio chunks are sent to mixer playback callbacks.
Current AVI Limitations¶
- Large files: MJPEG video plus PCM audio grows quickly.
- RIFF size ceiling in this path: 2,147,483,648 bytes (2 GiB).
- Final file depends on successful stop-time finalization (
idx1+ header rewrite). - Audio stream is PCM-oriented in AVI (
m_FormatTag = 1), which is not a clean standard path for Opus-in-AVI interoperability.
Approximate Max Record Time Before 2 GiB¶
Using sample file nolimitgui/MediaTestFiles/TicTockCountCamClip.avi:
- File size: 3,775,206 bytes
- Duration: about 14.8 seconds
- Average write rate: about 255,082 bytes/second
Estimated time to reach 2,147,483,648 bytes:
- About 8,418 seconds
- About 140.3 minutes
- About 2 hours 20 minutes
If using decimal 2,000,000,000 bytes, estimate is about 130.7 minutes.
Why Move To MKV¶
MKV with MJPEG video plus Opus audio provides practical improvements:
- Standard VLC-friendly container/codec combination
- Much smaller audio track versus PCM
- No RIFF 2 GiB container behavior
- Cleaner, more robust finalization than custom AVI index/header rewrite flow
- Better long-term extensibility for modern stream metadata/codecs
Expected Size Change For This Sample¶
For this sample, changing AVI (MJPEG + PCM) to MKV (MJPEG + Opus) is estimated to reduce total size by about 12%.
- Current sample: about 3.60 MB
- Estimated MKV equivalent: about 3.15 MB
- Estimated reduction: about 0.45 MB
The percentage gain is modest because MJPEG video dominates total size; the main win is replacing PCM audio with Opus.