当前位置:网站首页>Janus转发丢包导致音视频不同步原因分析
Janus转发丢包导致音视频不同步原因分析
2022-08-04 05:32:00 【睏哥RTC】
音视频不同步:PC和手机互相拉流,过个把小时后,手机拉PC端不同步,PC拉手机端同步,手机退出重进后音视频恢复同步,另外一个手机拉PC也是同步的,初步分析PC发送是正常的,可能是Janus的下行发送在遇到丢包卡顿后时间戳计算有问题,该同步函数在rtp.c文件里,本文记录解读过程。
原型:
void janus_rtp_header_update(janus_rtp_header *header, janus_rtp_switching_context *context, gboolean video, int step)
参数:
janus_rtp_header *header : RTP包
janus_rtp_switching_context *context: 订阅者信息
gboolean video:是否视频包
int step : 未使用
context->v_last_ssrc: 记录订阅者订阅的ssrc,如果该值和推流者不一样,说明是新开始,初始化v_base_seq,v_base_ts等值
context->v_base_ts_prev: 订阅者的起始ts
context->v_base_ts:记录该订阅者是从推流者的开始拉的第一个包的时间戳
context->v_base_seq_prev:
context->v_base_seq: 记录该订阅者是从推流者的第几个seq开始拉流的,比如推流这发了1000个包了,订阅者才开始拉流,则该值为1000
context->v_last_time: 上一包发送时间,函数末尾context->v_last_time = janus_get_monotonic_time();获得
context->v_last_ts:
context->v_new_ssrc:
context->v_seq_reset:
context->v_last_seq:
context->v_prev_ts:
context->v_last_ts:
context->v_prev_seq:
context->v_last_seq:
Janus转发后时间不同步原因:
根本原因在于随着丢包增多,由于Janus把SR里的NTP时间重新计算,作为RTP同步参考的SR里另外那个用累计来计算的timestamp时间与实际发送端的RTP参考的timestamp时间相差越来越多。
所以解决方法为,janus同时转发源端SR即可。
原创文章,转发请带上原文链接,谢谢
边栏推荐
- 第二章 STA相关概念
- 线程池原理
- 【五一专属】阿里云ECS大测评#五一专属|向所有热爱分享的“技术劳动者”致敬#
- (Navigation page) OpenStack-M version - manual construction of two nodes - with video from station B
- Miscellaneous [development] [VS Code] remote - SSD retry failed
- Copy Siege Lion 5-minute online experience MindIR format model generation
- DRA821 环境搭建
- Cut the hit pro subtitles export of essays
- target has libraries with conflicting names: libcrypto.a and libssl.a.
- MNIST Handwritten Digit Recognition - Building a Perceptron from Zero for Two-Classification
猜你喜欢
亚马逊云科技 Build On 2022 - AIot 第二季物联网专场实验心得
target has libraries with conflicting names: libcrypto.a and libssl.a.
在AWS-EC2中安装Minikube集群
[Deep Learning Diary] Day 1: Hello world, Hello CNN MNIST
第三章 标准单元库(下)
深度学习理论——过拟合、欠拟合、正则化、优化器
【五一专属】阿里云ECS大测评#五一专属|向所有热爱分享的“技术劳动者”致敬#
(位操作符)按位与、按位或、按位异或
AWS使用EC2降低DeepRacer的训练成本:DeepRacer-for-cloud的实践操作
C语言数组的深度分析
随机推荐
FAREWARE ADDRESS
arm-2-基础阶段
Fabric v1.1 环境搭建
基于asp.net的法律援助平台的设计与实现(附项目链接)
jdbc:mysql://localhost:3306/student?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8时报错
The usefulness of bind() system call
The Unity of ML - agents interpret parameter Settings
(位操作符)按位与、按位或、按位异或
C语言数组的深度分析
LeetCode_Nov_4th_Week
通用解决端口占用问题
ideal life
IDEA中创建web项目实现步骤
[Deep Learning Diary] Day 1: Hello world, Hello CNN MNIST
Golang环境变量设置(二)--GOMODULE&GOPROXY
LeetCode_Nov_5th_Week
理想的生活
LeetCode_22_Apr_2nd_Week
【五一专属】阿里云ECS大测评#五一专属|向所有热爱分享的“技术劳动者”致敬#
Deep Learning Theory - Overfitting, Underfitting, Regularization, Optimizers