国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SRS流媒體服務器——SRS4.0 WebRTC一對一通話環(huán)境搭建與邏輯分析

這篇具有很好參考價值的文章主要介紹了SRS流媒體服務器——SRS4.0 WebRTC一對一通話環(huán)境搭建與邏輯分析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

  1. 環(huán)境搭建

  2. SRS4.0 WebRTC1對1通話邏輯分析

環(huán)境搭建

1. 安裝go語?環(huán)境

  1. 在Go語?官?找到對應的安裝包(Downloads - The Go Programming Language)
  2. 下載和解析(使用的是阿里云的Ubuntu系統(tǒng)):
cd /usr/local/
wget https://dl.google.com/go/go1.16.5.linux-amd64.tar.gz --no-check-certificate
tar -C /usr/local -xzf go1.16.5.linux-amd64.tar.gz

3.需要配置 GOROOT 和 PATH環(huán)境變量,在/etc/profile中配置。

vim /etc/profile

# 將環(huán)境變量添加到/etc/profile?件末尾。
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin:$GOBIN

4.然后使用 source /etc/profile 命令使配置文件生效,就可以在任意?錄使用Go語言命令。

source /etc/profile 

5.執(zhí)行g(shù)o version可以查看安裝go是否成功。

2. 編譯和啟動srs

git clone -b v4.0.123 https://gitee.com/winlinvip/srs.oschina.git
srs.4.0.123
cd srs.4.0.123/trunk
./configure
make
./objs/srs -c conf/rtc.conf

3. 編譯和啟動信令服務器

  1. 進行srs/trunk目錄下。
cd 3rdparty/signaling
make
./objs/signaling

SRS流媒體服務器——SRS4.0 WebRTC一對一通話環(huán)境搭建與邏輯分析?注意:云服務器需要先開通1989端口。

本文福利, 免費領(lǐng)取C++音視頻學習資料包、技術(shù)視頻,內(nèi)容包括(音視頻開發(fā),面試題,F(xiàn)Fmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,編解碼,推拉流,srs)↓↓↓↓↓↓見下面↓↓文章底部點擊免費領(lǐng)取↓↓

4. 編譯和啟動web服務器

  1. 需要server.crt和server.key,如果沒有則?openssl?成。
  2. 進入srs/trunk/3rdparty/httpx-static目錄,執(zhí)行:
# ?成 server.key
openssl genrsa -out server.key 2048

# ?成 server.crt
openssl req -new -x509 -key server.key -out server.crt -days 3650

?3.編譯和啟動web服務器

cd 3rdparty/httpx-static
make
./objs/httpx-static -http 80 -https 443 -ssk server.key -ssc server.crt \
-proxy http://127.0.0.1:1989/sig -proxy http://127.0.0.1:1985/rtc \
-proxy http://127.0.0.1:8080/

SRS流媒體服務器——SRS4.0 WebRTC一對一通話環(huán)境搭建與邏輯分析

5. 進入測試頁面

  1. 打開demo地址:
https://localhost/demos/
https://192.xxx.3.6/demos/  #公網(wǎng)ip

SRS流媒體服務器——SRS4.0 WebRTC一對一通話環(huán)境搭建與邏輯分析

2.輸入Room和Display就可以進行1對1通話。
SRS流媒體服務器——SRS4.0 WebRTC一對一通話環(huán)境搭建與邏輯分析

3. SRS4.0 WebRTC1對1通話邏輯分析
按f12打開一對一通話http頁面源碼,在 one2one.html?autostart=true&room=fbe219e 中可以看到,“開始通話”按鈕id是btn_start,當點擊按鈕后,執(zhí)行startDemo函數(shù)。
startDemo函數(shù)如下:

        var startDemo = async function () {
            var host = $('#txt_host').val(); //獲取ip或者域名,房間id,參與者名字
            var room = $('#txt_room').val();
            var display = $('#txt_display').val();

            // Connect to signaling first. //關(guān)閉先前的websock連接
            if (sig) {
                sig.close(); //見srs.sig.js close部分
            }
            sig = new SrsRtcSignalingAsync(); //創(chuàng)建SrsRtcSignalingAsync,RTC信令
            sig.onmessage = function (msg) { //onmessage訂閱新的信令消息
                console.log('Notify: ', msg);

                if (msg.event === 'leave') {
                    $('#player').hide();
                }

                if (msg.event === 'publish') { //房間已經(jīng)存在的參與者,收到publish信令后再去訂閱新加入者
                    if (msg.peer && msg.peer.publishing && msg.peer.display !== display) {
                        startPlay(host, room, msg.peer.display);
                    }
                }

                if (msg.event === 'control') {
                    if (msg.param === 'refresh') {
                        setTimeout(function () {
                            window.location.reload();
                        }, 500);
                    } else if (msg.param === 'alert') {
                        alert('From ' + msg.peer.display + ': ' + msg.data);
                    }
                }

                if (msg.participants.length >= 2) {
                    $('.srs_merge').show();
                } else {
                    $('.srs_merge').hide();
                }
            };
            await sig.connect(conf.wsSchema, conf.wsHost, room, display); //連接websock,見下面SrsRtcSignalingAsync代碼

            control_refresh_peer = async function () {
                let r1 = await sig.send({action:'control', room:room, display:display, call:'refresh'});
                console.log('Signaling: control peer to refresh ok', r1);
            };
            control_alert_peer = async function () {
                let r1 = await sig.send({action:'control', room:room, display:display, call:'alert', data:$('#txt_alert').val()});
                console.log('Signaling: control peer to alert ok', r1);
            };

            let r0 = await sig.send({action:'join', room:room, display:display}); //向信令服務器發(fā)送join信令,會返回房間列表,包括當前房間id,房間人數(shù)和每個display的名字和是否推流,見下圖。
            console.log('Signaling: join ok', r0);

            // For one to one demo, alert and ignore when room is full. 判斷房間人數(shù)是否超過2個,因為是1v1場景
            if (r0.participants.length > 2) {
                alert('Room is full, already ' + (r0.participants.length - 1) + ' participants');
                sig.close();
                return;
            }

            // Start publish media if signaling is ok.
            await startPublish(host, room, display); //向srs流媒體服務器開始推流,代碼見下面
            let r1 = await sig.send({action:'publish', room:room, display:display}); //向信令服務器發(fā)送publish信令
            console.log('Signaling: publish ok', r1);

            // Play the stream already in room. 對于新建的房間,會拉取房間內(nèi)另一個人的流
            r0.participants.forEach(function(participant) {
                if (participant.display === display || !participant.publishing) return;
                startPlay(host, room, participant.display); //向srs流媒體拉房間內(nèi)另一個人的流
            });

            if (r0.participants.length >= 2) {
                $('.srs_merge').show();
            }
        };

2.SrsRtcSignalingAsync代碼:

// Async-await-promise based SRS RTC Signaling.
function SrsRtcSignalingAsync() {
    var self = {};

    // The schema is ws or wss, host is ip or ip:port, display is nickname
    // of user to join the room.
    self.connect = async function (schema, host, room, display) {
        var url = schema + '://' + host + '/sig/v1/rtc'; //如:wss://8.xxx.75.248/sig/v1/rtc
        self.ws = new WebSocket(url + '?room=' + room + '&display=' + display); //建立websock連接,地址為:wss://8.xxx.75.248/sig/v1/rtc?room=123&display=zhangsan

        self.ws.onmessage = function(event) {
            var r = JSON.parse(event.data);
            var promise = self._internals.msgs[r.tid];
            if (promise) {
                promise.resolve(r.msg);
                delete self._internals.msgs[r.tid];
            } else {
                self.onmessage(r.msg);
            }
        };

        return new Promise(function (resolve, reject) {
            self.ws.onopen = function (event) {
                resolve(event);
            };

            self.ws.onerror = function (event) {
                reject(event);
            };
        });
    };

    // The message is a json object.
    self.send = async function (message) {
        return new Promise(function (resolve, reject) {
            var r = {tid: Number(parseInt(new Date().getTime()*Math.random()*100)).toString(16).substr(0, 7), msg: message};
            self._internals.msgs[r.tid] = {resolve: resolve, reject: reject};
            self.ws.send(JSON.stringify(r));
        });
    };

    self.close = function () {
        self.ws && self.ws.close();
        self.ws = null;

        for (const tid in self._internals.msgs) {
            var promise = self._internals.msgs[tid];
            promise.reject('close');
        }
    };

    // The callback when got messages from signaling server.
    self.onmessage = function (msg) {
    };

    self._internals = {
        // Key is tid, value is object {resolve, reject, response}.
        msgs: {}
    };

    return self;
}

3.join信息返回信息。
SRS流媒體服務器——SRS4.0 WebRTC一對一通話環(huán)境搭建與邏輯分析

4.startPublish和startPlay代碼。

       var startPublish = function (host, room, display) {
            $(".ff_first").each(function(i,e) {
                $(e).text(display);
            });

            var url = 'webrtc://' + host + '/' + room + '/' + display + conf.query; //如: webrtc://8.xxx.75.248/123/wangwu
            $('#rtc_media_publisher').show();
            $('#publisher').show();

            if (publisher) {
                publisher.close();
            }
            publisher = new SrsRtcPublisherAsync(); //創(chuàng)建RTC異步推流
            $('#rtc_media_publisher').prop('srcObject', publisher.stream);

            return publisher.publish(url).then(function(session){
                $('#self').text('Self: ' + url);
            }).catch(function (reason) {
                publisher.close();
                $('#rtc_media_publisher').hide();
                console.error(reason);
            });
        };

        var startPlay = function (host, room, display) {
            $(".ff_second").each(function(i,e) {
                $(e).text(display);
            });

            var url = 'webrtc://' + host + '/' + room + '/' + display + conf.query; //
            $('#rtc_media_player').show();
            $('#player').show();

            if (player) {
                player.close();
            }

            player = new SrsRtcPlayerAsync();
            $('#rtc_media_player').prop('srcObject', player.stream);

            player.play(url).then(function(session){
                $('#peer').text('Peer: ' + display);
                $('#rtc_media_player').prop('muted', false);
            }).catch(function (reason) {
                player.close();
                $('#rtc_media_player').hide();
                console.error(reason);
            });
        };

本文福利, 免費領(lǐng)取C++音視頻學習資料包、技術(shù)視頻,內(nèi)容包括(音視頻開發(fā),面試題,F(xiàn)Fmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,編解碼,推拉流,srs)↓↓↓↓↓↓見下面↓↓文章底部點擊免費領(lǐng)取↓↓?文章來源地址http://www.zghlxwxcb.cn/news/detail-403860.html

到了這里,關(guān)于SRS流媒體服務器——SRS4.0 WebRTC一對一通話環(huán)境搭建與邏輯分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 9步實現(xiàn) Docker部署 SRS rtmp/flv流媒體服務器

    9步實現(xiàn) Docker部署 SRS rtmp/flv流媒體服務器

    這是基于centos7.6系統(tǒng)部署的 運行容器會直接停留在容器運行界面,通過Ctrl+P+Q可后臺形式退出容器 這時候其實已經(jīng)運行成功!可以通過以下命令查看SRS控制臺 進入/home/docker/srs3 可查看配置文件是否復制成功 這是可能會報錯: 因為步驟四我們意見運行一個容器,已經(jīng)使用過

    2024年02月15日
    瀏覽(23)
  • 流媒體服務器SRS的搭建及QT下RTMP推流客戶端的編寫

    流媒體服務器SRS的搭建及QT下RTMP推流客戶端的編寫

    ????目前市面上有很多開源的流媒體服務器解決方案,常見的有SRS、EasyDarwin、ZLMediaKit和Monibuca。這幾種的對比如下: (本圖來源:https://www.ngui.cc/zz/1781086.html?action=onClick) ????SRS(Simple Real-time Server)是一個開源的流媒體服務器,它支持RTMP、HLS、HTTP-FLV等多種流媒體協(xié)議

    2024年02月11日
    瀏覽(31)
  • SRS流媒體服務(四)WebRTC實現(xiàn)實時視頻通話和低延時互動直播

    SRS流媒體服務(四)WebRTC實現(xiàn)實時視頻通話和低延時互動直播

    CentOS版本號:7.9 SRS版本號:4.0.215 服務器IP:192.168.5.104 注意需要開啟端口號:1935、1985、8000(UDP端口)、8080。 注意需要開啟服務:http WebRTC是一個由Google發(fā)起的實時通訊解決方案,其中包含視頻音頻采集,編解碼,數(shù)據(jù)傳輸,音視頻展示等功能,我們可以通過技術(shù)快速地構(gòu)

    2024年02月12日
    瀏覽(47)
  • 流媒體服務器(17)—— 流媒體開源服務 MediaSoup 初識

    流媒體服務器(17)—— 流媒體開源服務 MediaSoup 初識

    目錄 前言 正文 一、簡單介紹 二、關(guān)鍵特色 1. 超強 SFU 功能 2. Node.js 模塊 3. 客戶端 SDK 三、架構(gòu)組成 1. 關(guān)鍵實例 2. 重要模塊 四、發(fā)展現(xiàn)狀 https://liuzhen.blog.csdn.net/article/details/115603863 https://liuzhen.blog.csdn.net/article/details/115603863 最近收看了一期微軟(中國)關(guān)于云原生、大數(shù)據(jù)

    2023年04月09日
    瀏覽(23)
  • 學著搭建流媒體服務器

    學著搭建流媒體服務器

    操作系統(tǒng):NAME=\\\"openEuler\\\",架構(gòu):aarch64,CPU 運行模式:64-bit 目前有多個開發(fā)源代碼可以搭建流媒體服務,但要先依賴gcc和cmake,所以首先安裝gcc和cmake,查了一通資料,cmake安裝記錄如下: 1、依賴環(huán)境安裝 yum -y install libyaml libyaml-devel python-setuptools libcurl-devel python-devel gmp gmp

    2024年02月11日
    瀏覽(25)
  • 流媒體服務器與視頻服務器有什么區(qū)別?

    流媒體服務器與視頻服務器有什么區(qū)別? 流媒體服務器用在遠程教育,視頻點播、網(wǎng)絡電臺、網(wǎng)絡視頻等方面。 直播過程中就需要使用流媒體服務器,一個完整的直播過程,包括采集、處理、編碼、封包、推流、傳輸、轉(zhuǎn)碼、分發(fā)、解碼、播放等過程,流媒體服務器主要負

    2024年02月11日
    瀏覽(26)
  • 搭建家庭影音媒體中心 --公網(wǎng)遠程連接Jellyfin流媒體服務器

    搭建家庭影音媒體中心 --公網(wǎng)遠程連接Jellyfin流媒體服務器

    轉(zhuǎn)載自遠程穿透的文章:【智能家居】Home Assistant入門安裝并內(nèi)網(wǎng)穿透實現(xiàn)遠程安全控制 Home Assistant(以下簡稱HA)是個開源的智能家居平臺,也叫家庭助手,就像一個軟件,比如我們的QQ軟件,微信軟件。 Home Assistant把家中的智能家居設備整合到HA中,它能夠接入的設備非常的

    2024年02月01日
    瀏覽(28)
  • FFmpeg 的使用與Docker安裝流媒體服務器

    FFmpeg 的使用與Docker安裝流媒體服務器

    本文闡述的均為命令行的使用方式,并不牽扯FFmpeg 的 C++音視頻開發(fā)內(nèi)容,補充一句,C++的資料真的少,能把C++學好的人,我真的是覺得巨佬。 我主要是使用FFmpeg 推流方面的知識,案例大都是靠近這方面。 一、FFmpeg 介紹 本文讀者會比較小眾~ 看到此文的朋友,大概率是需要

    2024年01月17日
    瀏覽(25)
  • ZLMediaKit流媒體服務器 RTSP推流時候的堆棧

    ZLMediaKit流媒體服務器 RTSP推流時候的堆棧

    先直接看圖 這是ffmpeg向流媒體服務器推流時候的堆棧 引入C++ 11之后? 堆棧會顯得特別繁復冗余 看起來 也沒有 以前沒有C++11之前那樣 簡單明了? ?太復雜了 標記下??很多函數(shù)名字被我改了 因為原來的看起來 同名函數(shù)太多了 C++11 和lambada 匿名函數(shù) 讓看堆棧 成了地獄模式?

    2023年04月20日
    瀏覽(29)
  • 使用nginx部署rtmp流媒體服務器完成直播推流

    使用nginx部署rtmp流媒體服務器完成直播推流

    筆者為了開發(fā)方便使用windows系統(tǒng)的Nginx進行配置。 下載Nginx http://nginx-win.ecsds.eu/download/ 在windows版本下只有個別的幾個版本才支持rtmp服務,本文選擇版本 nginx 1.7.11.3 Gryphon.zip 解壓下載zip文件 在conf文件夾中找到 nginx-win.conf 配置我們所需要的內(nèi)容 rtmp是adobe基于flash開發(fā)的音視頻

    2024年02月15日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包