• Janus之自问自答


    1 RTP转发

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

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


    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。

    每个函数都加锁了。

  • 相关阅读:
    全息干涉图补零尺寸与三种重构方法重建像间的关系研究
    复旦教授报告400多个安卓漏洞,历时16个月谷歌终于修复,此前曾立flag
    [附源码]Python计算机毕业设计Django甜品购物网站
    阿里云openservices rocketmq消息队列消费消息底层源码分析
    接口中方法详解
    ubuntu 安装docker
    Redis数据类型
    一级消防工程师证书价值下降,前景茫然?
    Ubuntu安装指定内核版本教程
    Visual Studio 调试 F5断点执行
  • 原文地址:https://blog.csdn.net/chenquangobeijing/article/details/126745578