1 RTP转发

event_loop不改配置,一个用户就新起了一个线程处理RTP转发。就是理清楚几个结构体之间的联系。有simulcast处理。

void janus_videoroom_incoming_rtp(janus_plugin_session *handle, janus_plugin_rtp *pkt) {
janus_videoroom_publisher *participant = janus_videoroom_session_get_publisher_nodebug(session);janus_videoroom_publisher_stream *ps = g_hash_table_lookup(participant->streams_byid, GINT_TO_POINTER(pkt->mindex));if(ps->active && !ps->muted) {//走RTP举例,rtp_forward是ps->rtp_forwarders。循环发给订阅者while(participant->udp_sock > 0 &&...){struct sockaddr *address = (struct sockaddr *)&rtp_forward->serv_addr;sendto(participant->udp_sock, buf, len, 0, address, addrlen);}
}
}

2 REMB包

janus在客户端开始的时候,发4次REMB包,确定带宽。但没抓到服务器发的REMB包。
/* We send a few incremental REMB messages at startup */
janus.plugin.videoroom.jcfg配置bitrate = 128000。
bitrate = bitrate/participant->remb_startup;=128000/4=32000。
bitrate=32000 (24 bytes)
bitrate=42666 (24 bytes)
bitrate=64000 (24 bytes)
bitrate=128000 (24 bytes)

带宽计算:brMantissa * 2^ brExp。Numssrc一般为1。

客户端调节带宽发送json消息,可能是客户端没有发送RTCP包接口?
{"janus":"message","body":{"bitrate":2000000},"transaction":"aGiLtWI1Ml0R"}
客户端发送 json消息  服务器janus   REMB包  其它客户端。?不如直接都REMB包方便些。

3 mute

客户端只是设置值,没有调函数使其生效。(还是我没找到)

transceiver.sender.track.enabled = mute ? false : true;

Echo Test才有enable audio/video。

1 client向janus发送json消息,2 janus向远端发送event的事件通知。

{"janus":"message","body":{"audio":false},"transaction":"J8TGbOpaonZx"}

enable video,发送请求PLI包。

Just (re-)enabled video, sending a PLI to recover it。

4 加锁

结构体janus_transport_session、janus_ice_peerconnection、janus_ice_handle、janus_videoroom、janus_videoroom_session、janus_videoroom_publisher等都有janus_mutex。

每个函数都加锁了。

Janus之自问自答相关推荐

  1. [python]自问自答:python -m参数? (转)

    python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...

  2. JAVA容器-自问自答学HashMap

    前言 这次我和大家一起学习HashMap,HashMap我们在工作中经常会使用,而且面试中也很频繁会问到,因为它里面蕴含着很多知识点,可以很好的考察个人基础.但一个这么重要的东西,我为什么没有在一开始 ...

  3. 分享蔡澜老师的自问自答

    蔡澜老师的个人网站上有个「访问自己」的板块,里面记录了很多蔡澜老师的「自问自答」,问题和回答都很有趣,从中挑选了一部分.喜欢这种洒脱率真的生活态度. 附上网址 http://blog.sina.com ...

  4. Golang 数组的一些自问自答

    基于Go-1.17.一些研究Go数组的自问自答,可以考虑作为面试题 image-20211227100817481 所有代码基于Go-1.17.一些研究Go数组的自问自答,可以考虑作为面试题. 问题: ...

  5. Maven 自问自答

    Maven 自问自答 Maven 自问自答 maven有什么用 POM 是一个什么东西 解读pom Build Lifecycle maven 三条指令运行web项目 maven常用指令 maven结 ...

  6. 干货!JAVA容器-自问自答学HashMap

    前言 这次我和大家一起学习HashMap,HashMap我们在工作中经常会使用,而且面试中也很频繁会问到,因为它里面蕴含着很多知识点,可以很好的考察个人基础.但一个这么重要的东西,我为什么没有在一开始 ...

  7. vue 源码自问自答-响应式原理

    vue 源码自问自答-响应式原理 最近看了 Vue 源码和源码分析类的文章,感觉明白了很多,但是仔细想想却说不出个所以然. 所以打算把自己掌握的知识,试着组织成自己的语言表达出来 不打算平铺直叙的写清 ...

  8. RT_Thread自问自答

    在看韦东山老师"RT-Thread内部机制"的视频,挺有意思的,有些概念的理解还是要深究一下,不然可能就是"我知道,这不就是那个....那个....那个",哪个 ...

  9. 自问自答:在VB中如何实现像C++一样printf的功能

    问: 每个整型都转换成5位的字符串,不足的在前面补0.比如:1转换成"00001",10转换成"00010".怎么实现? 答: format(1,"0 ...

最新文章

  1. Linux中读写权限
  2. 【Android FFMPEG 开发】FFMPEG AVFrame 图像格式转换 YUV - RGBA ( 获取 SwsContext | 初始化图像数据存储内存 | 图像格式转换 )
  3. sudo apt-get install 安装软件总是出现“404 NOT FOUND” 错误的解决方案 !
  4. mysql slave是什么_创建slave的搜索结果-阿里云开发者社区
  5. 編程之美資格賽傳話遊戲
  6. @Transactional 注解的失效场景
  7. 2015 总结 2016 展望
  8. 【Q】【poj 1144】【poj 1523】
  9. ElasticSearch 未授权访问记录(端口:9200)
  10. Cmake安装遇到问题
  11. 9.29 csp-s模拟测试55 联+赛+题
  12. 将WORD文档中整篇文章的自动编号消除,但原序号不变
  13. Xcode工作区间xxxx.xcworkspace不包含xxxx.xcodeproj
  14. Range的学习笔记
  15. c++语言函数参数传递方式,C++函数传递三种方式解读
  16. 工作时间管理之番茄工作法
  17. 黑马程序员-黑马,人生的一个重要转折
  18. 奥克兰大学计算机it专业介绍,新西兰奥克兰大学IT硕士专业解析
  19. 春江花朝秋月夜,往往取酒还独倾——python函数进阶
  20. 2.7 数值分析: 向量的范数

热门文章

  1. 宾果消消乐和宾果消消消_《宾果消消消》攻略之关卡障碍介绍
  2. 微信小程序 index.js获取app.js异步请求的动态数据
  3. 一个手机里登录2个微信号(微信双开)
  4. 手机里拍摄的照片误删了也不怕,2招教你快速找回照片!
  5. 关于安全的一点理解感悟
  6. 新浪微博僵粉(机器粉)识别方法
  7. SWUSTOJ #954 单链表的链接
  8. [N1CTF 2022] solve_pow,baby_N1ES
  9. 离散复习资料之一(Warshall算法)
  10. C语言0和0.0f的区别