2020-04-22

TRTC on Electron

image

跑通 DEMO

<span id="step1"></span>

步驟1:創(chuàng)建新的應(yīng)用

  1. 登錄實(shí)時(shí)音視頻控制臺(tái)呻引,選擇【開(kāi)發(fā)輔助】>【快速跑通Demo】苞七。
  2. 單擊【立即開(kāi)始】挪丢,輸入應(yīng)用名稱乾蓬,例如TestTRTC任内,單擊【創(chuàng)建應(yīng)用】。

<span id="step2"></span>

步驟2:下載 SDK 和 Demo 源碼

  1. 鼠標(biāo)移動(dòng)至對(duì)應(yīng)卡片趋距,單擊【Github】跳轉(zhuǎn)至 Github(或單擊【ZIP】)节腐,下載相關(guān) SDK 及配套的 Demo 源碼。
    image
  2. 下載完成后饱苟,返回實(shí)時(shí)音視頻控制臺(tái)箱熬,單擊【我已下載城须,下一步】酿傍,可以查看 SDKAppID 和密鑰信息赤炒。

<span id="step3"></span>

步驟3:配置 Demo 工程文件

  1. 解壓 步驟2 中下載的源碼包莺褒。
  2. 找到并打開(kāi) TRTCSDK/Electron/js/GenerateTestUserSig.js 文件雪情。
  3. 設(shè)置 GenerateTestUserSig.js 文件中的相關(guān)參數(shù):
    <ul><li>SDKAPPID:默認(rèn)為0尘执,請(qǐng)?jiān)O(shè)置為實(shí)際的 SDKAppID誊锭。</li>
    <li>SECRETKEY:默認(rèn)為空字符串弥锄,請(qǐng)?jiān)O(shè)置為實(shí)際的密鑰信息籽暇。</li></ul>
    <img src="https://main.qcloudimg.com/raw/a82e1c7c3b4edde3b9ac1326b2556147.png"/>
  4. 返回實(shí)時(shí)音視頻控制臺(tái)戒悠,單擊【粘貼完成,下一步】惶看。
  5. 單擊【關(guān)閉指引纬黎,進(jìn)入控制臺(tái)管理應(yīng)用】本今。

<span id="step4"></span>

步驟4:編譯運(yùn)行

Windows 平臺(tái)

  1. 下載最新版本的 Node.js 安裝包冠息,如果您的電腦是64位操作系統(tǒng)逛艰,請(qǐng)選擇 Windows Installer (.msi) 64-bit搞旭,32位操作系統(tǒng)請(qǐng)選擇 Windows Installer (.msi) 32-bit肄渗。
    image
  2. 打開(kāi)應(yīng)用程序列表中的 Node.js command prompt翎嫡,啟動(dòng)命令行窗口,并將目錄定位到 步驟3 中解壓到的目標(biāo)路徑具伍,并運(yùn)行如下命令:
npm install
image
  1. 如果您在中國(guó)大陸人芽,可能會(huì)遭遇下載 electron 壓縮包很慢的問(wèn)題:
    image

    此時(shí)可以通過(guò)配置國(guó)內(nèi)的鏡像地址,或者從 Github 下載對(duì)應(yīng)的版本和 SHASUMS256.txt 文件到 C:\Users\[您的用戶名]\AppData\Local\electron\Cache 目錄下祈坠,如下圖:
    image
  2. 待 npm 的依賴包都安裝完成后赦拘,繼續(xù)在命令行窗口運(yùn)行如下命令躺同,即可運(yùn)行起 Electron Demo蹋艺。
npm start
image

Mac OS 平臺(tái)

  1. 打開(kāi)終端(Terminal)窗口民效,輸入如下命令安裝 Homebrew畏邢,如果已經(jīng)安裝請(qǐng)?zhí)^(guò)此步驟检吆。
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  1. 繼續(xù)鍵入如下命令臂寝,安裝 Node.js:
$ brew install node
  1. 如果您在中國(guó)大陸交煞,可能會(huì)發(fā)現(xiàn)使用 Homebrew 的默認(rèn)地址安裝 Node.js 會(huì)比較慢素征,此時(shí)可以考慮替換為國(guó)內(nèi)鏡像地址御毅。
$ cd `brew --repo`
$ git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git
$ brew update
  1. 通過(guò) cd 命令定位到 步驟3 中解壓到的目標(biāo)路徑端蛆,并運(yùn)行如下命令:
npm install
image
  1. 待 npm 的依賴包都安裝完成后今豆,繼續(xù)在命令行窗口運(yùn)行如下命令柔袁,即可運(yùn)行起 Electron Demo。
npm start
image

參考文檔

https://trtc-1252463788.file.myqcloud.com/electron_sdk/docs/index.html

快速集成

step1. 通過(guò)npm下載trtc庫(kù)(確認(rèn)聯(lián)網(wǎng)狀態(tài))

npm install trtc-electron-sdk@latest --save-dev

step2. 對(duì)接基本功能函數(shù)

//1插掂、引入庫(kù)
const TRTCCloud = require('trtc-electron-sdk');
const {
    TRTCVideoStreamType,
    TRTCAppScene,
    TRTCVideoResolution,
    TRTCVideoResolutionMode,
    TRTCParams
} = require('trtc-electron-sdk/liteav/trtc_define');

//2、構(gòu)建 TRTCCloud
this.rtcCloud = new TRTCCloud();

//3、注冊(cè)回調(diào)
subscribeEvents = (rtcCloud) => {
    rtcCloud.on('onError', (errcode, errmsg) => {
        console.info('trtc_demo: onError :' + errcode + " msg" + errmsg);
    }); 

    rtcCloud.on('onEnterRoom', (elapsed) => {
        console.info('trtc_demo: onEnterRoom elapsed:' + elapsed);
    });
    rtcCloud.on('onExitRoom', (reason) => {
        console.info('trtc_demo: onExitRoom reason:' + reason);
    });

    // 注冊(cè)遠(yuǎn)程視頻的可用狀態(tài)
    rtcCloud.on('onUserVideoAvailable', (uid, available) => {
        console.info('trtc_demo: onUserVideoAvailable uid:' + uid + " available:" + available);
        if (available) {
            let view = this.findVideoView(uid, TRTCVideoStreamType.TRTCVideoStreamTypeBig);
            this.rtcCloud.startRemoteView(uid, view);
        }
        else {
            this.rtcCloud.stopRemoteView(uid);
            this.destroyVideoView(uid, TRTCVideoStreamType.TRTCVideoStreamTypeBig);
        }
    });

    //.....
    //.....
};
subscribeEvents(this.rtcCloud);

//4辅甥、進(jìn)入房間
enterroom () {
    //1. 進(jìn)房參數(shù)
    let param = new TRTCParams();
    param.sdkAppId = sdkInfo.sdkappid;
    param.roomId = parseInt(this.roomId);
    param.userSig = userSig;
    param.userId = this.userId;
    param.privateMapKey = '';
    param.businessInfo = '';
    this.rtcCloud.enterRoom(param, TRTCAppScene.TRTCAppSceneVideoCall);
    //2. 編碼參數(shù)
    let encparam = new TRTCVideoEncParam();
    encparam.videoResolution = TRTCVideoResolution.TRTCVideoResolution_640_360;
    encparam.resMode = TRTCVideoResolutionMode.TRTCVideoResolutionModeLandscape;
    encparam.videoFps = 15;
    encparam.videoBitrate = 550;
    this.rtcCloud.setVideoEncoderParam(encparam);
    //3. 打開(kāi)采集和預(yù)覽本地視頻酝润、采集音頻
    enableVideoCapture(true);
    enableAudioCapture(true);
},

//5、退出房間
exitroom() {
    this.rtcCloud.exitRoom();
},

//6璃弄、開(kāi)啟視頻
enableVideoCapture(bEnable) {
    if (bEnable) {
        let view = this.findView("local", TRTCVideoStreamType.TRTCVideoStreamTypeBig);
        this.rtcCloud.startLocalPreview(view);
    }
    else {
        this.rtcCloud.stopLocalPreview();
    }
},

//7要销、開(kāi)啟音頻
enableAudioCapture(bEnable) {
    if (bEnable) {
        this.rtcCloud.startLocalAudio();
    }
    else {
        this.rtcCloud.stopLocalAudio();
    }
},

//8、找個(gè)DOM結(jié)點(diǎn)谢揪,作為視頻顯示的view
findVideoView(uid, streamtype) {
    let key = uid + String(streamtype);
    var userVideoEl = document.getElementById(key);
    if (!userVideoEl) {
    userVideoEl = document.createElement('div');
    userVideoEl.id = key;
    userVideoEl.classList.add('video_view');
    document.querySelector("#video_wrap").appendChild(userVideoEl);
    }
    return userVideoEl;
},

//9蕉陋、在視頻退出時(shí),清掉一個(gè)DOM結(jié)點(diǎn)
destroyVideoView(uid, streamtype) {
    let key = uid + String(streamtype);
    var userVideoEl = document.getElementById(key);
    if (userVideoEl) {
    document.querySelector("#video_wrap").removeChild(userVideoEl);
    }
},

常見(jiàn)問(wèn)題

1. 查看密鑰時(shí)只能獲取公鑰和私鑰信息拨扶,要如何獲取密鑰?

TRTC SDK 6.6 版本(2019年08月)開(kāi)始啟用新的簽名算法 HMAC-SHA256。在此之前已創(chuàng)建的應(yīng)用印蓖,需要先升級(jí)簽名算法才能獲取新的加密密鑰。如不升級(jí),您也可以繼續(xù)使用 老版本算法 ECDSA-SHA256

升級(jí)操作:

  1. 登錄 實(shí)時(shí)音視頻控制臺(tái)
  2. 在左側(cè)導(dǎo)航欄選擇【應(yīng)用管理】,單擊目標(biāo)應(yīng)用所在行的【應(yīng)用信息】。
  3. 選擇【快速上手】頁(yè)簽灸芳,單擊【第二步 獲取簽發(fā)UserSig的密鑰】區(qū)域的【點(diǎn)此升級(jí)】谒获。

2. 兩臺(tái)設(shè)備同時(shí)運(yùn)行 Demo,為什么看不到彼此的畫面?

請(qǐng)確保兩臺(tái)設(shè)備在運(yùn)行 Demo 時(shí)使用的是不同的 UserID权悟,TRTC 不支持同一個(gè) UserID (除非 SDKAppID 不同)在兩個(gè)設(shè)備同時(shí)使用榔昔。

image

3. 防火墻有什么限制茧彤?

由于 SDK 使用 UDP 協(xié)議進(jìn)行音視頻傳輸珠洗,所以對(duì) UDP 有攔截的辦公網(wǎng)絡(luò)下無(wú)法使用,如遇到類似問(wèn)題自阱,請(qǐng)參考文檔:應(yīng)對(duì)公司防火墻限制加派。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市照瘾,隨后出現(xiàn)的幾起案子鹃愤,更是在濱河造成了極大的恐慌,老刑警劉巖肠仪,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門带兜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事郭变≈苈祝” “怎么了专挪?”我有些...
    開(kāi)封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵划纽,是天一觀的道長(zhǎng)幻捏。 經(jīng)常有香客問(wèn)我伊佃,道長(zhǎng)庆锦,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任焰雕,我火速辦了婚禮衷笋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘矩屁。我一直安慰自己辟宗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布吝秕。 她就那樣靜靜地躺著泊脐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烁峭。 梳的紋絲不亂的頭發(fā)上容客,一...
    開(kāi)封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天秕铛,我揣著相機(jī)與錄音,去河邊找鬼缩挑。 笑死但两,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的供置。 我是一名探鬼主播谨湘,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼芥丧!你這毒婦竟也來(lái)了紧阔?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤娄柳,失蹤者是張志新(化名)和其女友劉穎寓辱,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體赤拒,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秫筏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挎挖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片这敬。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蕉朵,靈堂內(nèi)的尸體忽然破棺而出崔涂,到底是詐尸還是另有隱情,我是刑警寧澤始衅,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布冷蚂,位于F島的核電站,受9級(jí)特大地震影響汛闸,放射性物質(zhì)發(fā)生泄漏蝙茶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一诸老、第九天 我趴在偏房一處隱蔽的房頂上張望隆夯。 院中可真熱鬧,春花似錦别伏、人聲如沸蹄衷。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)愧口。三九已至,卻和暖如春轴脐,著一層夾襖步出監(jiān)牢的瞬間调卑,已是汗流浹背抡砂。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恬涧,地道東北人注益。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像溯捆,于是被迫代替她去往敵國(guó)和親丑搔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 短信驗(yàn)證碼&動(dòng)態(tài)口令(二次驗(yàn)證碼) 短信驗(yàn)證碼的發(fā)送使用的是阿里云的短信服務(wù)提揍;動(dòng)態(tài)口令使用的谷歌的動(dòng)態(tài)口令算法啤月,且...
    蒜醬油閱讀 173評(píng)論 0 0
  • 問(wèn)題原因,程序的兼容性問(wèn)題方法1:打開(kāi)你的開(kāi)始菜單劳跃,找到word文件程序谎仲,如下圖所示打開(kāi)Word提示向程序發(fā)送命令...
    簡(jiǎn)單就好akaa閱讀 132評(píng)論 0 0
  • 記一下webpack打包, 讓css自動(dòng)添加瀏覽器前綴遇到的坑 因?yàn)榫W(wǎng)絡(luò)問(wèn)題,這里使用cnpm下載 1.安裝 cn...
    淹溺在知識(shí)的海洋里閱讀 146評(píng)論 0 0
  • js數(shù)據(jù)類型轉(zhuǎn)換 概述 javascript是一種動(dòng)態(tài)類型語(yǔ)言,變量沒(méi)有類型限制刨仑,可以隨時(shí)賦予任意值郑诺。 上面代碼中...
    想改名叫孟健康閱讀 216評(píng)論 0 0
  • 構(gòu)建請(qǐng)求行GET / HTTP/1.1方法 請(qǐng)求路徑 請(qǐng)求的協(xié)議/版本復(fù)制代碼查找強(qiáng)緩存檢查資源是否...
    饑人谷_小霾閱讀 262評(píng)論 0 0