1. RTP timestamp和SeqNo
RTP timestamp负责定义媒体数据的采样时刻,描述负载数据的帧间关系;
RTP SeqNo负责定义RTP数据包的先后关系,描述媒体数据的帧内关系;
2. RTP timestamp和NTP timestamp是同一时刻的不同表示;
3. 音视频同步的基本对象是AudioReceiveStream和VideoReceiveStream,两者都继承自Syncable;
4. 负责音视频同步的线程是ModuleProcessThread,主要处理文件是rtp_streams_synchronizer.cc,RtpStreamsSynchronizer类包含以下成员,
- StreamSynchronization类
- audio和video的Measurements;
- AudioReceiveStream和VideoReceiveStream的指针:syncable_audio_和syncable_video_;
class RtpStreamsSynchronizer : public Module { public: explicit RtpStreamsSynchronizer(Syncable* syncable_video); void ConfigureSync(Syncable* syncable_audio); ...... private: Syncable* syncable_video_; Syncable* syncable_audio_ GUARDED_BY(crit_); StreamSynchronization::Measurements audio_measurement_ GUARDED_BY(crit_); StreamSynchronization::Measurements video_measurement_ GUARDED_BY(crit_);
......
};
参考文档:
https://www.jianshu.com/p/3a4d24a71091?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io