• 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。

    每个函数都加锁了。

  • 相关阅读:
    代码随想录-025-383.赎金信
    基于AVR单片机的心电信号获取与分析
    3 学习用特殊字符串联命令
    【bug】使用mmsegmentaion遇到的问题
    命令查询职责分离 - CQRS
    java 工程管理系统源码+项目说明+功能描述+前后端分离 + 二次开发
    【开发教程10】疯壳·开源蓝牙心率防水运动手环-蓝牙 BLE 收发
    群晖上搭建teamspeak3语音服务器
    AIGC实战——GPT(Generative Pre-trained Transformer)
    Ultra Fast Deep Lane Detection with HybridAnchor Driven Ordinal Classification
  • 原文地址:https://blog.csdn.net/chenquangobeijing/article/details/126745578