1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//! Video endpoints for WhatsApp calls. The library transports pre-encoded H.264 — it never touches
//! pixels — so a source hands us complete Annex-B access units (start codes included) and a sink
//! receives reassembled peer AUs. The codec lives with the consumer (ffmpeg, WebCodecs, a hardware
//! encoder). WhatsApp uses H.264 Constrained Baseline (avc1.42E01F), repeated SPS/PPS, and adapts
//! from a low-bandwidth 15 fps mode up to 1280x720 @ 20 fps / ~2 Mbps. A bare channel keeps the
//! compatibility cadence of 15 fps; custom sources report their RTP stride explicitly.
pub use VideoFrame;
/// A video source for a call: one complete H.264 Annex-B access unit per item. Channel-factory
/// shaped for the same reasons as [`AudioSource`](crate::voip::audio::AudioSource); a closed
/// channel (encoder gone) does NOT end the call — audio keeps running.
/// A video sink for a call: reassembled peer access units, with keyframe/orientation metadata.
/// VoIP is loss tolerant, so the facade drops a frame if the sink can't keep up.
/// Blanket impls so a bare `async_channel` endpoint is usable directly, like the audio ones.