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

保姆級(jí)教程!基于聲網(wǎng) Web SDK實(shí)現(xiàn)音視頻通話及屏幕共享

這篇具有很好參考價(jià)值的文章主要介紹了保姆級(jí)教程!基于聲網(wǎng) Web SDK實(shí)現(xiàn)音視頻通話及屏幕共享。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

01 背景介紹

聲網(wǎng)提供了各端豐富的音視頻 SDK,本文將要使用的是 Web 端 SDK。

本篇文章主要給小伙伴們分享如何使用聲網(wǎng) SDK 實(shí)現(xiàn) Web 端音視頻通話及屏幕共享功能,其中也會(huì)涵蓋在實(shí)踐過程中遇到的一些問題,以此記錄防止小伙伴們踩坑,同時(shí)也希望通過從 0 到 1 實(shí)戰(zhàn)的分享,能夠幫助更多的小伙伴。

02 前期準(zhǔn)備

在實(shí)戰(zhàn)之前,需要有以下準(zhǔn)備條件:

? Npm & Node.js
? 前端開發(fā)基礎(chǔ),如 html & CSS & JavaScript
? 注冊(cè)聲網(wǎng)賬號(hào),申請(qǐng)聲網(wǎng)APPID、臨時(shí)Token ,詳見開始使用聲網(wǎng)平臺(tái)。

如果你還沒有聲網(wǎng)賬號(hào),可以通過這里免費(fèi)注冊(cè),每個(gè)賬戶每月都有10000分鐘免費(fèi)額度。如果是個(gè)人學(xué)習(xí)/調(diào)試,時(shí)長完全夠用。

我個(gè)人的開發(fā)環(huán)境,具體信息如下:

? MacBook Pro
? Visual Studio Code:v1.75.1
? Npm:v8.19.3
? Node.js:v16.19.0
? 聲網(wǎng) SDK:v4.2.1 ,sdk的下載可查看這里。
? Google Chrome :v110.0.5481.177

03 實(shí)戰(zhàn)環(huán)節(jié)

通過[前期準(zhǔn)備],我們已經(jīng)完成了相關(guān)配置,已經(jīng)擁有了 App ID、Channel、臨時(shí) Token、聲網(wǎng) SDK,在本次實(shí)戰(zhàn)中,主要詳細(xì)講解兩個(gè) demo,分別是音視頻通話及屏幕共享連麥。

3.1 實(shí)現(xiàn)音視頻通話

在開始實(shí)戰(zhàn)之前,先聲明下 Demo 組成架構(gòu),

創(chuàng)建一個(gè)文件夾名為 Agora_VideoCall,文件夾中包含五個(gè)文件,分別是:

? index.html:用于設(shè)計(jì) Web 應(yīng)用的用戶界面
? index.css:用于設(shè)計(jì)網(wǎng)頁樣式
? basicVideoCall.js:實(shí)現(xiàn)音視頻通話邏輯代碼,主要通過 AgoraRTCClient 實(shí)現(xiàn)
? AgoraRTC_N-4.2.1.js:聲網(wǎng)音視頻SDK
? assets:第三方庫,主要用于設(shè)計(jì)用戶界面

在 index.html 文件中導(dǎo)入聲網(wǎng)SDK,具體內(nèi)容可查看詳細(xì)代碼,接下來主要詳細(xì)講解音視頻通話及屏幕共享實(shí)現(xiàn)邏輯。

<script src="./AgoraRTC-N-4.2.1.js"></script>
3.1.1 實(shí)現(xiàn)音視頻通話邏輯

以下代碼均在 basicVideoCall.js 文本中寫入

1)首先調(diào)用 AgoraRTC.createClient 方法創(chuàng)建一個(gè) client 對(duì)象,也就是創(chuàng)建客戶端對(duì)象

var client = AgoraRTC.createClient({ mode: "rtc", codec: "vp8" });

2)定義變量 App ID,Token、Channel、User ID,并使用箭頭函數(shù)實(shí)現(xiàn)當(dāng)頁面被調(diào)用時(shí)用于加入音視頻通話通道。

var options = {
  appid: null,
  channel: null,
  uid: null,
  token: null
};

$(() => {
  var urlParams = new URL(location.href).searchParams;
  options.appid = urlParams.get("appid");
  options.channel = urlParams.get("channel");
  options.token = urlParams.get("token");
  options.uid = urlParams.get("uid");
  if (options.appid && options.channel) {
    $("#uid").val(options.uid);
    $("#appid").val(options.appid);
    $("#token").val(options.token);
    $("#channel").val(options.channel);
    $("#join-form").submit();
  }
})

3)加入頻道

定義 join 函數(shù)主要是將本地音視頻 track 加入一個(gè) RTC 頻道,此時(shí)需要在函數(shù)中傳入 App ID,Token、Channel、User ID。加入房間后,需要發(fā)布音視頻track,所以還需要?jiǎng)?chuàng)建音視頻 track,并調(diào)用 publish 方法將這些本地音視頻track對(duì)象當(dāng)作參數(shù)發(fā)布到頻道中。

注意注意,在創(chuàng)建音視頻 track 時(shí)需要先調(diào)用 createMicrophoneAudioTrack :通過麥克風(fēng)采集的音頻創(chuàng)建本地音頻軌道對(duì)象;再調(diào)用 createCameraVideoTrack :通過攝像頭采集的視頻創(chuàng)建本地視頻軌道對(duì)象。(如果先調(diào)用createCameraVideoTrack ,那么頁面中將不會(huì)顯示本地視頻預(yù)覽畫面)

創(chuàng)建之后即可調(diào)用 play 方法展示本地預(yù)覽,并調(diào)用 publish 方法發(fā)布到 RTC 頻道中。注意 play 和 publish 方法的使用沒有先后順序,誰在前在后沒有什么影響。

async function join() {
  
  [ options.uid, localTracks.audioTrack, localTracks.videoTrack ] = await Promise.all([
    // 加入頻道
    client.join(options.appid, options.channel, options.token || null, options.uid || null),
    // 創(chuàng)建本地音視頻track
    //AgoraRTC.createCameraVideoTrack(),
    AgoraRTC.createMicrophoneAudioTrack(),
    AgoraRTC.createCameraVideoTrack()
  ]);

  localTracks.videoTrack.play("local-player");
  $("#local-player-name").text(`localVideo(${options.uid})`);

  await client.publish(Object.values(localTracks));
  console.log("publish success");
}

4)在頻道中添加或移除遠(yuǎn)端用戶邏輯

實(shí)現(xiàn)將同頻道的遠(yuǎn)端用戶添加到本地接口,當(dāng)遠(yuǎn)端用戶取消發(fā)布時(shí),則從本地將用戶移除。

function handleUserPublished(user, mediaType) {
  const id = user.uid;
  remoteUsers[id] = user;
  subscribe(user, mediaType);
}

function handleUserUnpublished(user, mediaType) {
  if (mediaType === 'video') {
    const id = user.uid;
    delete remoteUsers[id];
    $(`#player-wrapper-${id}`).remove();

  }
}

5)訂閱遠(yuǎn)端音視頻邏輯

當(dāng)遠(yuǎn)端用戶發(fā)布音視頻時(shí),本地用戶需要對(duì)其訂閱,從而實(shí)現(xiàn)音視頻通話,在 subscribe 函數(shù)中需要傳入兩個(gè)參數(shù),分別是同頻道遠(yuǎn)端用戶 user id 和遠(yuǎn)端 mediaType,并調(diào)用 play 方法,播放遠(yuǎn)端用戶音視頻,從而實(shí)現(xiàn)一對(duì)一連麥。

async function subscribe(user, mediaType) {
  const uid = user.uid;
  // 訂閱遠(yuǎn)端用戶
  await client.subscribe(user, mediaType);
  console.log("subscribe success");
  if (mediaType === 'video') {
    const player = $(`
      <div id="player-wrapper-${uid}">
        <p class="player-name">remoteUser(${uid})</p>
        <div id="player-${uid}" class="player"></div>
      </div>
    `);
    $("#remote-playerlist").append(player);
    user.videoTrack.play(`player-${uid}`);
  }
  if (mediaType === 'audio') {
    user.audioTrack.play();
  }
}

6)監(jiān)聽事件

當(dāng)遠(yuǎn)端用戶發(fā)布或者取消發(fā)布音視頻 track 時(shí),本地還需要對(duì)其監(jiān)聽,在 join 函數(shù)中,監(jiān)聽 client.on(“user-published”, handleUserPublished) 事件和 client.on(“user-unpublished”, handleUserUnpublished) 事件,具體如下

client.on("user-published", handleUserPublished);
client.on("user-unpublished", handleUserUnpublished);

聲網(wǎng) 屏幕共享,實(shí)現(xiàn)音視頻通話,實(shí)現(xiàn)屏幕共享
7)離開頻道

當(dāng)用戶點(diǎn)擊 leave 按鈕時(shí),則將 stop 本地和遠(yuǎn)端音視頻 track。

async function leave() {
  for (trackName in localTracks) {
    var track = localTracks[trackName];
    if(track) {
      track.stop();
      track.close();
      localTracks[trackName] = undefined;
    }
  }
3.1.2 Demo展示

接下來可以運(yùn)行我們的 Demo 啦,輸入 APPID、Token、Channel、Userid,點(diǎn)擊 join,即可看到自己本地的畫面,如果想和別人連麥,可以再復(fù)制一下網(wǎng)址,輸入相同的 APPID、Token、Channel,即可實(shí)現(xiàn)連麥,趕快試試吧。
聲網(wǎng) 屏幕共享,實(shí)現(xiàn)音視頻通話,實(shí)現(xiàn)屏幕共享

3.2 屏幕共享連麥

屏幕共享就是將本地用戶的屏幕內(nèi)容,以視頻畫面的方式分享給其他遠(yuǎn)端用戶觀看。其工作原理實(shí)際上是通過 createScreenVideoTrack 創(chuàng)建一個(gè)屏幕共享的視頻軌道對(duì)象來實(shí)現(xiàn)。采集屏幕的過程中瀏覽器會(huì)詢問需要共享哪些屏幕,根據(jù)終端用戶的選擇去獲取屏幕信息。

在上述音視頻 demo 的基礎(chǔ)上實(shí)現(xiàn)屏幕共享功能。

3.2.1 添加屏幕共享UI

在 index.html 頁面中添加屏幕共享(ScreenShare)button
聲網(wǎng) 屏幕共享,實(shí)現(xiàn)音視頻通話,實(shí)現(xiàn)屏幕共享

3.2.2 屏幕共享實(shí)現(xiàn)邏輯

以下代碼均在 basicVideoCall.js 文本中寫入

1)實(shí)現(xiàn) share 函數(shù)

和上述 join 函數(shù)功能類似,主要用于開啟屏幕共享,使用 createScreenVideoTrack 創(chuàng)建屏幕共享的視頻軌道對(duì)象,同時(shí)也可以對(duì)視頻編碼進(jìn)行一些簡單的配置。函數(shù)中同樣也需要添加監(jiān)聽事件。

async function share() {

  client.on("user-published", handleUserPublished);
  client.on("user-unpublished", handleUserUnpublished);
  let screenTrack;

      [options.uid, localTracks.audioTrack, screenTrack] = await Promise.all([
    
    client.join(options.appid, options.channel, options.token || null, options.uid || null),
    AgoraRTC.createMicrophoneAudioTrack(),
    AgoraRTC.createScreenVideoTrack({
      encoderConfig: {
        framerate: 15,
        height: 720,
        width: 1280
      }
    }, "auto")
  ]);

2)添加屏幕共享音視頻軌道,并調(diào)用 play 方法播放本地屏幕共享的視頻。

if(screenTrack instanceof Array){
    localTracks.screenVideoTrack = screenTrack[0]
    localTracks.screenAudioTrack = screenTrack[1]
  }
  else{
    localTracks.screenVideoTrack = screenTrack
  }

  localTracks.screenVideoTrack.play("local-player");
  $("#local-player-name").text(`localVideo(${options.uid})`);

3)發(fā)布屏幕共享

發(fā)布本地音頻和屏幕共享畫面至 RTC 頻道中。

if(localTracks.screenAudioTrack == null){
    await client.publish([localTracks.screenVideoTrack, localTracks.audioTrack]);
  }
  else{
    await client.publish([localTracks.screenVideoTrack, localTracks.audioTrack, localTracks.screenAudioTrack]);
  }

4)在 share 函數(shù)實(shí)現(xiàn)邏輯中需要綁定 “track-ended” 事件,當(dāng)屏幕共享停止時(shí),會(huì)有一個(gè)警報(bào)通知最終用戶。

localTracks.screenVideoTrack.on("track-ended", () => {
    alert(`Screen-share track ended, stop sharing screen ` + localTracks.screenVideoTrack.getTrackId());
    localTracks.screenVideoTrack && localTracks.screenVideoTrack.close();
    localTracks.screenAudioTrack && localTracks.screenAudioTrack.close();
    localTracks.audioTrack && localTracks.audioTrack.close();
  });

3.2.3 Demo 展示

當(dāng)點(diǎn)擊 ScreenShare 時(shí),會(huì)提示用戶選擇哪一個(gè) page 進(jìn)行分享,同時(shí)也有一個(gè)默認(rèn)音頻選項(xiàng),點(diǎn)擊分享之后,即可發(fā)布屏幕共享。
聲網(wǎng) 屏幕共享,實(shí)現(xiàn)音視頻通話,實(shí)現(xiàn)屏幕共享
聲網(wǎng) 屏幕共享,實(shí)現(xiàn)音視頻通話,實(shí)現(xiàn)屏幕共享
聲網(wǎng) 屏幕共享,實(shí)現(xiàn)音視頻通話,實(shí)現(xiàn)屏幕共享

04 小結(jié)

如果你想實(shí)現(xiàn)音視頻和屏幕共享的 Web 應(yīng)用,完全可以借鑒本篇文章 + 聲網(wǎng)SDK,如果不是很熟悉的話,可以先看聲網(wǎng)給出的「快速開始 - 實(shí)現(xiàn)音視頻通話」。

在實(shí)踐過程中需要注意的是:在創(chuàng)建音視頻 track 時(shí)需要先調(diào)用 createMicrophoneAudioTrack ,再調(diào)用 createCameraVideoTrack ,如果先調(diào)用 createCameraVideoTrack 那么頁面中將不會(huì)顯示本地視頻預(yù)覽畫面。

Generally,本篇文章給出的 demo 比較簡單,如果想要添加其他的功能比如,虛擬背景、AI降噪等,可以在此基礎(chǔ)上繼續(xù)添加功能。

(正文完)

參考資料

? 注冊(cè)聲網(wǎng)賬號(hào)
? 相關(guān) SDK 下載
? 快速開始 - 實(shí)現(xiàn)音視頻通話文章來源地址http://www.zghlxwxcb.cn/news/detail-569330.html

到了這里,關(guān)于保姆級(jí)教程!基于聲網(wǎng) Web SDK實(shí)現(xiàn)音視頻通話及屏幕共享的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 聲網(wǎng) Agora音視頻uniapp插件跑通詳解

    在使用聲網(wǎng)SDK做音視頻會(huì)議開發(fā)時(shí), 通過聲網(wǎng)官方論壇 了解到,聲網(wǎng)是提供uniapp插件的,只是在官方文檔中不是很容易找到。 插件地址如下: Agora音視頻插件 Agora音視頻插件(JS) 本文講解如何跑通演示示例

    2024年02月15日
    瀏覽(78)
  • 基于聲網(wǎng) SDK 實(shí)現(xiàn) iOS 端的一對(duì)一視頻通話

    基于聲網(wǎng) SDK 實(shí)現(xiàn) iOS 端的一對(duì)一視頻通話

    在很多產(chǎn)品,加入實(shí)時(shí)視頻通話已經(jīng)不是新鮮事情了,尤其是近幾年的疫情影響,個(gè)人公司國家對(duì)于實(shí)時(shí)音視頻的需求一直在快速的增長。例如視頻會(huì)議、社交應(yīng)用、實(shí)時(shí)游戲,甚至也可能出現(xiàn)在一些元宇宙的場(chǎng)景中。 本文將教你如何通過聲網(wǎng)視頻 SDK 在 iOS 平臺(tái)上實(shí)現(xiàn)一個(gè)

    2023年04月08日
    瀏覽(27)
  • Web網(wǎng)頁音視頻通話之基于Sipjs

    Web網(wǎng)頁音視頻通話之基于Sipjs

    簡述 本文是以 FreeSwitch 作為信令服務(wù)器,通過sipjs(基于webRtc) 進(jìn)行媒體協(xié)商,網(wǎng)絡(luò)協(xié)商后,進(jìn)行P2P媒體傳輸。 參考知識(shí): sip.js https://sipjs.com/ webRtc開發(fā)手冊(cè) https://developer.mozilla.org/zh-CN/docs/Web/API/WebRTC_API 效果圖 : HTML javaScript operation.js 撥打 接聽 通話中

    2023年04月17日
    瀏覽(23)
  • 基于WebAssembly構(gòu)建Web端音視頻通話引擎

    基于WebAssembly構(gòu)建Web端音視頻通話引擎

    Web技術(shù)在發(fā)展,音視頻通話需求在演進(jìn),怎么去實(shí)現(xiàn)新的Web技術(shù)點(diǎn)在實(shí)際應(yīng)用中的值,以及給我們帶來更大的收益是需要我們?nèi)ヌ剿骱蛯?shí)踐的。LiveVideoStackCon 2022北京站邀請(qǐng)到田建華為我們從實(shí)踐中來介紹WebAssembly、WebCodecs、WebTransport等技術(shù)在音視頻行業(yè)的價(jià)值以及優(yōu)勢(shì)。 文

    2024年02月11日
    瀏覽(17)
  • web 前端實(shí)現(xiàn)音視頻通話 - liveKit 框架

    web 前端實(shí)現(xiàn)音視頻通話 - liveKit 框架

    go1.18以上 liveKit-server.exe liveKit官方文檔鏈接 科學(xué)上網(wǎng)(github) 在liveKit 中有兩個(gè)概念,分別是:room 房間 和 user 用戶 房間很好理解,類似一個(gè)騰訊會(huì)議中的 一個(gè)會(huì)議 用戶指的是 加入房間的所有人。 每個(gè)用戶的權(quán)限是相同的 想要實(shí)現(xiàn)主持人功能,可以通過web服務(wù)器來對(duì)liveKi

    2024年04月14日
    瀏覽(17)
  • 微信小程序?qū)崿F(xiàn)抖音視頻效果教程

    微信小程序?qū)崿F(xiàn)抖音視頻效果教程

    本文詳細(xì)介紹了微信小程序中如何實(shí)現(xiàn)類似抖音視頻效果的頁面,包括視頻播放、用戶頭像展示和基本信息展示等功能,提供了wxml、wxss和js文件的代碼示例,助力開發(fā)者快速搭建。

    2024年02月12日
    瀏覽(18)
  • FFMpeg-3、基于QT實(shí)現(xiàn)音視頻播放顯示

    FFMpeg-3、基于QT實(shí)現(xiàn)音視頻播放顯示

    1、音視頻播放的基礎(chǔ)知識(shí) 內(nèi)容來自雷神博客 1、在Windows平臺(tái)下的視頻播放技術(shù)主要有以下三種:GDI,Direct3D和OpenGL;音頻播放技術(shù)主要是DirectSound。 SDL本身并不具有播放顯示的功能,它只是封裝了底層播放顯示的代碼 記錄三種視頻顯示技術(shù):GDI,Direct3D,OpenGL。其中Direct3D包

    2024年02月03日
    瀏覽(37)
  • 【音視頻SDK測(cè)評(píng)】線上K歌軟件開發(fā)技術(shù)選型

    【音視頻SDK測(cè)評(píng)】線上K歌軟件開發(fā)技術(shù)選型

    在線K歌軟件的開發(fā)有許多技術(shù)難點(diǎn),需考慮到音頻錄制和處理、實(shí)時(shí)音頻傳輸和同步、音頻壓縮和解壓縮、設(shè)備兼容性問題等技術(shù)難點(diǎn)外,此外,開發(fā)者還應(yīng)關(guān)注音樂版權(quán)問題,確保開發(fā)的應(yīng)用合規(guī)合法。 前面寫了幾期關(guān)于 直播 SDK 技術(shù)選型 的文章,主要是從RTC實(shí)時(shí)音視頻

    2024年02月14日
    瀏覽(32)
  • MediaBox音視頻終端SDK已適配鴻蒙星河版(HarmonyOS NEXT)

    MediaBox音視頻終端SDK已適配鴻蒙星河版(HarmonyOS NEXT)

    2024年1月,HarmonyOS?NEXT?鴻蒙星河版系統(tǒng)開發(fā)者預(yù)覽版開放申請(qǐng),該系統(tǒng)將只能安裝為鴻蒙開發(fā)的原生應(yīng)用,而不再兼容安卓應(yīng)用。對(duì)此,阿里云MediaBox音視頻終端SDK產(chǎn)品已實(shí)現(xiàn)功能的鴻蒙化遷移和重構(gòu),全面適配鴻蒙系統(tǒng)HarmonyOS?NEXT系統(tǒng)。 當(dāng)前,?阿里云播放器SDK預(yù)覽版已面

    2024年03月22日
    瀏覽(31)
  • 【復(fù)】基于 WebRTC 的音視頻在線監(jiān)考模塊的設(shè)計(jì)與實(shí)現(xiàn)(下)

    【復(fù)】基于 WebRTC 的音視頻在線監(jiān)考模塊的設(shè)計(jì)與實(shí)現(xiàn)(下)

    在上一篇博文 【復(fù)】基于 WebRTC 的音視頻在線監(jiān)考模塊的設(shè)計(jì)與實(shí)現(xiàn)(上) 中,主要介紹了關(guān)于 WebRTC 的基本理論,那么這篇文章我們將進(jìn)入實(shí)戰(zhàn)階段,通過 WebRTC 框架,去實(shí)現(xiàn) P2P 通話,以及延伸到一對(duì)多的音視頻通話,從而實(shí)現(xiàn)在線監(jiān)考功能; ? 在開發(fā) Web 時(shí),WebRTC 標(biāo)準(zhǔn)

    2024年02月01日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包