Janus之自问自答
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之自问自答相关推荐
- [python]自问自答:python -m参数? (转)
python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...
- JAVA容器-自问自答学HashMap
前言 这次我和大家一起学习HashMap,HashMap我们在工作中经常会使用,而且面试中也很频繁会问到,因为它里面蕴含着很多知识点,可以很好的考察个人基础.但一个这么重要的东西,我为什么没有在一开始 ...
- 分享蔡澜老师的自问自答
蔡澜老师的个人网站上有个「访问自己」的板块,里面记录了很多蔡澜老师的「自问自答」,问题和回答都很有趣,从中挑选了一部分.喜欢这种洒脱率真的生活态度. 附上网址 http://blog.sina.com ...
- Golang 数组的一些自问自答
基于Go-1.17.一些研究Go数组的自问自答,可以考虑作为面试题 image-20211227100817481 所有代码基于Go-1.17.一些研究Go数组的自问自答,可以考虑作为面试题. 问题: ...
- Maven 自问自答
Maven 自问自答 Maven 自问自答 maven有什么用 POM 是一个什么东西 解读pom Build Lifecycle maven 三条指令运行web项目 maven常用指令 maven结 ...
- 干货!JAVA容器-自问自答学HashMap
前言 这次我和大家一起学习HashMap,HashMap我们在工作中经常会使用,而且面试中也很频繁会问到,因为它里面蕴含着很多知识点,可以很好的考察个人基础.但一个这么重要的东西,我为什么没有在一开始 ...
- vue 源码自问自答-响应式原理
vue 源码自问自答-响应式原理 最近看了 Vue 源码和源码分析类的文章,感觉明白了很多,但是仔细想想却说不出个所以然. 所以打算把自己掌握的知识,试着组织成自己的语言表达出来 不打算平铺直叙的写清 ...
- RT_Thread自问自答
在看韦东山老师"RT-Thread内部机制"的视频,挺有意思的,有些概念的理解还是要深究一下,不然可能就是"我知道,这不就是那个....那个....那个",哪个 ...
- 自问自答:在VB中如何实现像C++一样printf的功能
问: 每个整型都转换成5位的字符串,不足的在前面补0.比如:1转换成"00001",10转换成"00010".怎么实现? 答: format(1,"0 ...
最新文章
- Linux中读写权限
- 【Android FFMPEG 开发】FFMPEG AVFrame 图像格式转换 YUV - RGBA ( 获取 SwsContext | 初始化图像数据存储内存 | 图像格式转换 )
- sudo apt-get install 安装软件总是出现“404 NOT FOUND” 错误的解决方案 !
- mysql slave是什么_创建slave的搜索结果-阿里云开发者社区
- 編程之美資格賽傳話遊戲
- @Transactional 注解的失效场景
- 2015 总结 2016 展望
- 【Q】【poj 1144】【poj 1523】
- ElasticSearch 未授权访问记录(端口:9200)
- Cmake安装遇到问题
- 9.29 csp-s模拟测试55 联+赛+题
- 将WORD文档中整篇文章的自动编号消除,但原序号不变
- Xcode工作区间xxxx.xcworkspace不包含xxxx.xcodeproj
- Range的学习笔记
- c++语言函数参数传递方式,C++函数传递三种方式解读
- 工作时间管理之番茄工作法
- 黑马程序员-黑马,人生的一个重要转折
- 奥克兰大学计算机it专业介绍,新西兰奥克兰大学IT硕士专业解析
- 春江花朝秋月夜,往往取酒还独倾——python函数进阶
- 2.7 数值分析: 向量的范数