• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Benjamin

            靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數據加載中……

            centos安裝turnserver

            一、下載依賴庫(非必須)
            yum install -y make auomake gcc cc gcc-c++ wget
            yum install -y openssl-devel libevent libevent-devel mysql-devel mysql-server
            wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
            tar xvfz libevent-2.0.21-stable.tar.gz
            cd libevent-2.0.21-stable && ./configure
            make && make install && cd ..
            二、下載安裝turnserver(在http://turnserver.open-sys.org/downloads/頁面選擇合適版本下載,這里載3.2.3.95)
            wget http://turnserver.open-sys.org/downloads/v3.2.3.95/turnserver-3.2.3.95.tar.gz
            tar -xvzf turnserver-3.2.3.95.tar.gz
            cd turnserver-3.2.3.95
            ./configure
            make && make install 
            三、創建配置文件
            cp /usr/local/etc/turnserver.conf.default /etc/turnserver.conf
            cp /usr/local/etc/turnuserdb.conf.default /etc/turnuserdb.conf(非必須)
            四、編輯配置turnserverconf
            external-ip=54.95.37.26/172.31.43.68 (前者為服務器公網ip,后者為內網IP)
            fingerprint (開啟指紋)
            lt-cred-mech (開啟長期驗證機制)
            user=testuser:123456 (設置一個測試用戶名及密碼)
            五、端口開放
            3478(tcp 、udp),5349(tcp、udp),49152-65535(udp)
            六、開啟turnserver
             turnserver -v -r foo.org -c /etc/turnserver.conf (-f參數必須)
             七、測試
             1、官網測試:https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
                add server之后,點擊gather candidates,這個工具如果測試不成功或
             2、candidates type:host:本機物理網卡或邏輯網卡地址和端口 srflx:發送Binding請求到STUN/TURN Server經過NAT時,NAT上分配的地址和端口
                prflx:端發送Binding請求到對等端經過NAT時,NAT上分配的地址和端口  relay:端發送Allocate請求到TURN Server,由TURN server用于中繼的地址和端口
             3、測試:代碼測試(html頁面) 打開開發工具如在控制臺輸出The TURN server is reachable !  is TURN server active?  yes 即表示服務器正常
                <html>
                <header>
                    <title>ice測試</title>
                </header>
                <body>
                <label for="serverAddress"></label>
                <input id="serverAddress" value="turn:127.0.0.1:13902"/>
                <br/>
                <label for="username"></label><input id="username" value="foo"/>
                <br/>
                <label for="password"></label><input id="password" value="bar"/>
                <br/>
                <button onclick="window.test()">Test</button>
                <script>
                    function checkTURNServer(turnConfig, timeout) {
                        return new Promise(function (resolve, reject) {
                            let promiseResolved;
                            setTimeout(function () {
                                if (promiseResolved) return;
                                resolve(false);
                                promiseResolved = true;
                            }, timeout || 5000);
                            promiseResolved = false;
                            let myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection   //compatibility for firefox and chrome
                                , pc = new myPeerConnection({iceServers: [turnConfig]})
                                , noop = function () {
                            };
                            pc.createDataChannel("");    //create a bogus data channel
                            pc.createOffer({}).then((offer) => {
                                if (offer.sdp.indexOf('typ relay') > -1) { // sometimes sdp contains the ice candidates...
                                    promiseResolved = true;
                                    resolve(true);
                                }
                                pc.setLocalDescription(offer)
                            })
                            pc.onicecandidate = function (ice) {  //listen for candidate events
                                if (promiseResolved || !ice || !ice.candidate
                                    || !ice.candidate.candidate
                                    || !(ice.candidate.candidate.indexOf('typ relay') > -1)) return;
                                console.log("ice candidate=", ice.candidate)
                                // If a relay candidate was found, notify that the TURN server works!
                                if (ice.candidate.type === "relay") {
                                    console.log("The TURN server is reachable !");
                                }
                                promiseResolved = true;
                                resolve(true);
                            };
                        });
                    }
                    window.test = () => {
                        let serverAddress = document.getElementById("serverAddress").value;
                        let username = document.getElementById("username").value;
                        let password = document.getElementById("password").value;
                        console.log("Trigger ice test. Server address=", serverAddress,
                            ", username=", username, ", password=", password)
                        checkTURNServer({
                            urls: serverAddress,
                            username: username,
                            credential: password
                        }).then(function (bool) {
                            console.log('is TURN server active? ', bool ? 'yes' : 'no');
                        }).catch(console.error.bind(console));
                    }
                </script>
                </body>
                </html>
              4、http://你自己的公網ip:3478/ 輸出 TURN Server即表示正常
              5、命令行測試 turnutils_uclient -v -u testuser -w 123456 54.249.95.226(外網ip)
              turnserver的終端出現以下類似結果,則顯示測試成功
              830: handle_udp_packet: New UDP endpoint: local addr 172.31.33.19:3478, remote addr 54.249.95.226:37748
              830: session 003000000000000001: user <>: incoming packet message processed, error 401: Unauthorised
              830: IPv4. Local relay addr: 172.31.33.19:55550
              830: IPv4. Local reserved relay addr: 172.31.33.19:55551
              830: session 003000000000000001: new, username=<testuser>, lifetime=800
              830: session 003000000000000001: user <testuser>: incoming packet ALLOCATE processed, success
              830: session 003000000000000001: refreshed, username=<testuser>, lifetime=600
              830: session 003000000000000001: user <testuser>: incoming packet REFRESH processed, success
              830: handle_udp_packet: New UDP endpoint: local addr 172.31.33.19:3478, remote addr 54.249.95.226:33309
              830: session 003000000000000002: user <>: incoming packet message processed, error 401: Unauthorised
              
              八、signal服務中使用它,還需要修改相關配置
              external-ip=54.249.95.226/172.31.43.68 (前者為服務器公網ip,后者為內網IP)
              fingerprint (開啟指紋)
              lt-cred-mech (開啟長期驗證機制)
              use-auth-secret  (開啟secret形式授權 )
              static-auth-secret=12345(# 設置secret,這個和signal服務配置文件里的turnserver的secret要一致,最好復雜點,注意最后別留空格
              九、守護進程運行turnserver 
               turnserver -v -r foo.org -c /etc/turnserver.conf -o 
               # 后臺運行的話下面這句
               # nohup turnserver -c etc/turnserver.conf &
              十、開機啟動配置
                1、創建turnserver.service文件,內容如下
                  [Unit]
                  Description=turnserver for webrtc
                  After=network.target
                  [Service]
                  Type=forking
                  User=tester
                  Group=tester
                  ExecStart=/home/tester/coturn/coturn/bin/turnserver -o -a -f -user=test:123456 -r Hangzhou
                  Restart=always
                  RestartSec=5
                  [Install]
                  WantedBy=multi-user.target
                2、拷貝文件   cp turnserver.service  /lib/systemd/system/
                3、重新加載  systemctl daemon-reload
                4、檢查是否加載成功  systemctl list-unit-files --type=service | grep turn 返回正常顯示turnserver相關內容
                  trunserver.service                     disabled
                5、運行:    systemctl status turnserver.service
                6、檢測狀態:systemctl status turnserver.service

            posted on 2022-12-23 15:44 Benjamin 閱讀(305) 評論(0)  編輯 收藏 引用 所屬分類: linux

            人妻少妇精品久久| 一本大道加勒比久久综合| 久久久国产精华液| 久久国产欧美日韩精品| 久久久久国产精品麻豆AR影院| 久久久精品视频免费观看| 国产A三级久久精品| 久久99国产精品久久| 亚洲精品第一综合99久久| 久久香蕉超碰97国产精品| 久久久久亚洲爆乳少妇无| 日韩精品久久久久久免费| 久久久久人妻一区精品果冻| 久久精品国产2020| 久久综合给合综合久久| 日本一区精品久久久久影院| 777午夜精品久久av蜜臀| 久久久久无码精品国产app| 精品久久一区二区三区| 亚洲伊人久久精品影院| 性欧美大战久久久久久久| 91麻豆精品国产91久久久久久| 色妞色综合久久夜夜| 一本大道久久香蕉成人网| 久久久WWW免费人成精品| 人人狠狠综合久久亚洲88| 久久亚洲精品中文字幕| 99精品国产99久久久久久97 | 国内精品综合久久久40p| 久久美女网站免费| 99久久婷婷国产一区二区| 久久精品国产亚洲av麻豆色欲| 精品人妻伦九区久久AAA片69| 亚洲欧洲精品成人久久曰影片| 久久强奷乱码老熟女| 亚洲人AV永久一区二区三区久久| 久久一区二区三区99| 亚洲乱码日产精品a级毛片久久 | 51久久夜色精品国产| 99国内精品久久久久久久| 狠狠狠色丁香婷婷综合久久俺|