fix(capture): derive deltacast audio PTS from sample count, not wall-clock
Removing -use_wallclock_as_timestamps on the SDI audio input. The bridge writes SDI-clock-paced samples, so PTS from the 48kHz sample count shares the video's clock domain and the audio length tracks the video length exactly. Wall-clock timestamps made audio length = real elapsed time, which drifted ~1% longer than the frame-count video when the encoder dipped under realtime (pitch-up).
This commit is contained in:
parent
51f939b1fe
commit
8e5405c3f9
1 changed files with 9 additions and 4 deletions
|
|
@ -706,13 +706,18 @@ class CaptureManager {
|
||||||
'-video_size', fcSize,
|
'-video_size', fcSize,
|
||||||
'-framerate', fcFps,
|
'-framerate', fcFps,
|
||||||
'-i', 'pipe:0',
|
'-i', 'pipe:0',
|
||||||
// Audio FIFO → ffmpeg input 1. Keep wallclock on audio so A/V sync
|
// Audio FIFO → ffmpeg input 1. The bridge writes EXACTLY the SDI-clock
|
||||||
// aligns by arrival time; aresample=async=1 (applied on the master
|
// paced samples (group 0 is the reference, same slot clock as video),
|
||||||
// output) resamples audio to match the video CFR timestamps.
|
// so we DERIVE audio PTS from the sample count at 48 kHz — NOT from
|
||||||
|
// wall-clock arrival. Wall-clock timestamping made the audio stream's
|
||||||
|
// length equal real elapsed time while video length = frame_count/fps;
|
||||||
|
// when the encoder ran a hair under realtime the audio ended up ~1%
|
||||||
|
// longer than video (heard as a pitch-up). Reading the raw stream at
|
||||||
|
// its natural rate keeps both in the same SDI clock domain; the
|
||||||
|
// master-output aresample=async=1 still soaks up any micro-jitter.
|
||||||
// The FIFO carries the full 16ch the bridge publishes; channel
|
// The FIFO carries the full 16ch the bridge publishes; channel
|
||||||
// SELECTION (keep first N) is applied as an output filter so the
|
// SELECTION (keep first N) is applied as an output filter so the
|
||||||
// discrete broadcast channels are preserved, not downmixed.
|
// discrete broadcast channels are preserved, not downmixed.
|
||||||
'-use_wallclock_as_timestamps', '1',
|
|
||||||
'-thread_queue_size', '512',
|
'-thread_queue_size', '512',
|
||||||
'-f', 's16le',
|
'-f', 's16le',
|
||||||
'-ar', '48000',
|
'-ar', '48000',
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue