srs/trunk
Jacob Su 8e573644c1 MP4 DVR: Fix audio/video synchronization issues in WebRTC recordings. v6.0.172 (#4230)
Fixes #3993 - WebRTC streams recorded to MP4 via DVR exhibit audio/video
synchronization issues, with audio typically ahead of video. **Note:
This issue is specific to MP4 format; FLV recordings are not affected.**

When WebRTC streams are converted to RTMP and then muxed to MP4, the
audio and video tracks may start at different timestamps. The MP4 muxer
was not accounting for this timing offset between the first audio and
video samples in the STTS (Sample Time-to-Sample) table, causing the
tracks to be misaligned in the final MP4 file.

Introduces `SrsMp4DvrJitter` class specifically for MP4 audio/video
synchronization:

- **Timestamp Tracking**: Records the DTS of the first audio and video
samples
- **Offset Calculation**: Computes the timing difference between track
start times
- **MP4 STTS Correction**: Sets appropriate `sample_delta` values in the
MP4 STTS table to maintain proper A/V sync

- Added `SrsMp4DvrJitter` class in `srs_kernel_mp4.hpp/cpp`
- Integrated jitter correction into `SrsMp4SampleManager::write_track()`
for MP4 format only
- Added comprehensive unit tests covering various timing scenarios
- **Scope**: Changes are isolated to MP4 kernel code and do not affect
FLV processing

This fix ensures that MP4 DVR recordings from WebRTC streams maintain
proper audio/video synchronization regardless of the relative timing of
the first audio and video frames, while leaving FLV format processing
unchanged.

---------

Co-authored-by: Haibo Chen <495810242@qq.com>
Co-authored-by: john <hondaxiao@tencent.com>
Co-authored-by: winlin <winlinvip@gmail.com>
Co-authored-by: OSSRS-AI <winlinam@gmail.com>
2025-08-12 09:58:40 -04:00
..
3rdparty update copyright to 2025. v6.0.159 (#4271) 2025-02-24 19:34:34 +08:00
auto Fix crash when quiting. v6.0.151 (#4157) 2024-08-24 22:41:21 +08:00
conf Heartbeat: Report ports for proxy server. v6.0.156 (#4171) 2024-09-09 10:40:46 +08:00
doc MP4 DVR: Fix audio/video synchronization issues in WebRTC recordings. v6.0.172 (#4230) 2025-08-12 09:58:40 -04:00
etc/init.d Squash: Fix bugs 2022-01-13 18:26:28 +08:00
gdb The identifier "ShowCouroutines" needs to be modified to "ShowCoroutines" in order to rectify the typographical error. v6.0.63 (#3703) 2023-07-27 08:12:39 +08:00
ide/srs_clion UniquePtr: Support SrsUniquePtr to replace SrsAutoFree. v6.0.136 (#4109) 2024-07-09 10:29:36 +08:00
modules Moduels: Refine the description 2021-04-21 11:18:35 +08:00
packaging Windows: Refine cygwin pipeline (#3260) 2022-11-21 14:32:26 +08:00
research update copyright to 2025. v6.0.159 (#4271) 2025-02-24 19:34:34 +08:00
scripts update copyright to 2025. v6.0.159 (#4271) 2025-02-24 19:34:34 +08:00
src MP4 DVR: Fix audio/video synchronization issues in WebRTC recordings. v6.0.172 (#4230) 2025-08-12 09:58:40 -04:00
usr/lib/systemd/system Squash: Support RPM. Fix bugs. 2021-11-04 07:37:17 +08:00
.gitignore For #2136: API: Cleanup no active streams for statistics. v5.0.42 2022-08-19 19:45:19 +08:00
AUTHORS.md Update contributors. 2023-09-28 11:03:34 +08:00
AUTHORS.txt Update AUTHORS 2021-08-25 07:43:35 +08:00
configure Switch to 6.0 release header. 2024-07-27 11:40:10 +08:00
Dockerfile.builds Use new cache image name. v6.0.86 (#3815) 2023-10-08 07:43:14 -05:00
Dockerfile.cov Asan: Refine asan warning message for macOS. 2022-12-31 21:20:51 +08:00
Dockerfile.pkg Merge branch v5.0.103 into develop 2022-12-03 21:15:22 +08:00
Dockerfile.test Fix opus delay options, use ffmpeg-opus in docker test. v6.0.102 (#3883) 2023-11-22 14:58:30 +08:00