<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Tucodec基于網(wǎng)絡(luò)通信協(xié)議所集成的 VoIP 技術(shù)

          聯(lián)合創(chuàng)作 · 2023-10-02 00:04

          Tucodec 詳細(xì)介紹

          tucodec 是圖鴨科技基于網(wǎng)絡(luò)通信協(xié)議所集成的VoIP技術(shù), 由C/C++語言實(shí)現(xiàn).

          具有以下特點(diǎn):  

          • 智能化調(diào)整碼率.

          • 端對端延時(shí)50~100ms.

          • P2P穿透70%, 節(jié)約服務(wù)器帶寬.

          • 兼容MAC OS, iOS, Android, Windows, Linux等平臺(tái).

          • 可應(yīng)用于多人視頻會(huì)議, 端到端視頻通話, 連麥直播等場景.

          • 單臺(tái)服務(wù)器并發(fā)超過nginx_rtmp, 支持集群.

          Android啟動(dòng)代碼示例

           ``` java
          private VoipAndroid mVoIPClient;
          private VoipVideoRender mMainRender, render1, render2, render3;
          private int mUserId, render1_id, render2_id, render3_id;
          /* 省略以上變量初始化代碼*/
          private VoipAndroid.VideoCallback mVideoCallback = new VoipAndroid.VideoCallback() {
              @override
              public void priviewImage(VoipImage voipImage) {
                  mMainRender.setMirror(false);
                  mMainRender.pushVideoFrame(voipImage);
              }
           
              @override
              public void decodedImage(VoipImage voipImage) {
                  if (voipImage.userId != mUserId) {
                      mVoIPeers.get(voipImage.userId).setMirror(false);
                      mVoIPeers.get(voipImage.userId).pushVideoFrame(voipImage);
                  }
              }
          }
          private void initGroupChat() {
              mVoIPClient = new VoipAndroid(new Handler(),getApplication(),null);
              mVoIPClient.loginRelayServer(ip, (short)port, mUserId, 0);
              mVideoCapture = new VoipVideoCapture(mVoIPClient,
                  new VoipVideoCapture.CaptureParam(mVoIPClient.getConfig().videoWith,
                                                    mVoIPClient.getConfig().videoHeight));
              mVideoCapture.start(true, 
                                  mVoIPClient.getConfig(), 
                                  (ViewGroup)mMainRender.getParent());
              mVoIPClient.registerVideoCallback(mVideoCallback);
              mVoIPClient.registerAudioCallback(mAudioCallback);
              mVoIPClient.init((mVoIPClient.benchmark() + 
                                mVoIPClient.benchmark() + 
                                mVoIPClient.benchmark()) / 3, 
                                mVideoCapture);
              mVoIPClient.startCallWithUserName("android_client", mUserId);
              mVoIPClient.startVideoPipeline(new VoipAndroid.VideoParameter(512, false));
              mVoIPClient.startAudioPipeline(new VoipAndroid.AudioParameter(1600, false));
          }
          ```
          瀏覽 24
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本五十肥熟交尾 | 99精品视频在线观看免费播放 | 亚洲肏网| 中文字幕免费在线 | 日本成人一级性片在线观看 |