当前位置:网站首页>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即可。
原创文章,转发请带上原文链接,谢谢
边栏推荐
- No matching function for call to 'RCTBridgeModuleNameForClass'
- LeetCode_22_Apr_4th_Week
- How to get started with MOOSE platform - an example of how to run the official tutorial
- [Development Miscellaneous][Editor][Code Reading]ctags & vim
- LeetCode_Nov_5th_Week
- 管道重定向
- 文件权限管理 ugo
- const int * a 与 int * const a 的定义与区别
- Code to celebrate the Dragon Boat Festival - Zongzi, your heart
- [Copy Siege Lion Log] Flying Pulp Academy Intensive Learning 7-Day Punch Camp-Study Notes
猜你喜欢

【五一专属】阿里云ECS大测评#五一专属|向所有热爱分享的“技术劳动者”致敬#

淘宝分布式文件系统存储(二)

MNIST手写数字识别 —— 从零构建感知机实现二分类

文件权限管理 ugo

Golang environment variable settings (2)--GOMODULE & GOPROXY

MOOSE平台官方第二个例子分析——关于创建Kernel,求解对流扩散方程

DRA821 环境搭建

第一章 绪论

LeetCode_Dec_2nd_Week

MNIST Handwritten Digit Recognition - Building a Perceptron from Zero for Two-Classification
随机推荐
Tensorflow/Pytorch安装(Anaconda环境下,无版本冲突,亲测有效)
Golang environment variable settings (2)--GOMODULE & GOPROXY
MNIST Handwritten Digit Recognition - From Perceptrons to Convolutional Neural Networks
Tencent and NetEase have taken action one after another. What is the metaverse that is so popular that it is out of the circle?
jdbc:mysql://localhost:3306/student?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8时报错
(Navigation page) OpenStack-M version - manual construction of two nodes - with video from station B
MNIST手写数字识别 —— 图像分析法实现二分类
Brief description of database and common operation guide
2020-03-27
Thunderbolt turns off automatic updates
在AWS-EC2中安装Minikube集群
常见的一些排序
EL表达式
Install Minikube Cluster in AWS-EC2
bind()系统调用的用处
AWS使用EC2降低DeepRacer的训练成本:DeepRacer-for-cloud的实践操作
库函数的模拟实现-C语言
(位操作符)按位与、按位或、按位异或
[Development miscellaneous][Debug]debug into kernel
LeetCode_Nov_2nd_Week