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。

每个函数都加锁了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值