The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

Microsoft Teams 如何設定 OBS 與 NDI-out 功能進行網路直播

最近參加了好幾場使用 Microsoft Teams 進行的網路直播,我就很好奇他們到底是怎麼做到的,經過一段時間的研究,終於研究出可以成功啟用此功能的方法與步驟。這篇文章我就來說說啟用的過程,以及設定時的注意事項。

從 Teams 管理中心啟用 NDI 功能

我光是第一個步驟就卡了好幾週,一直遲遲找不到幫 Teams 啟用 NDI 的方法,明明設定就很簡單,但是我就是無法啟用,我們馬上來看看這個設定的地雷在哪裡。

基本上要在 Teams admin center 啟用 NDI 功能,請參考以下步驟:

  1. 開啟 Teams admin center 頁面 ( https://admin.teams.microsoft.com/ )

  2. 開啟 Meetings > Meeting policies

  3. 點擊 Global (Org-wide default)

  4. 找到 Broadcast production with NDI and SDI hardware 選項,並啟用該選項!(早期的名稱叫做 Allow NDI Streaming 但後來改名成 Local broadcasting 然後又改名一次)

    Teams admin center > Meetings > Meeting policies > Local broadcasting

這裡我修改的是 Global 的全域設定,基本上應該會套用到組織中所有人身上,但在我公司設定就是無法生效。過了好幾天之後才發現,原來我公司所有人的 Meeting policy 都不是選擇 Global (Org-wide default),而是選擇較為嚴格的 RestrictedAnonymousAccess (Direct) 會議原則 (Meeting policy),難怪我怎麼設定都無效!

以下示意圖的瀏覽路徑是 Users > Manage users > 點選使用者 > Policies

Policies

你要點選如上圖 Assigned policies 右邊的 Edit 連結,才能將該使用者的 Meeting policy 切換到 Global (Org-wide default)

image

你可以使用 Windows PowerShell 快速完成上述動作。

  1. 安裝 Teams PowerShell

    Install-Module MicrosoftTeams
    
  2. 連接 Microsoft Teams

    Import-Module MicrosoftTeams
    
    $credential = Get-Credential
    Connect-MicrosoftTeams -Credential $credential
    
  3. 將使用者快速切換成 Global (預設值)

    你可以透過以下 Cmdlet 取得所有 Microsoft Teams 的使用者清單

    Get-CsOnlineUser | select UserPrincipalName
    

    你可以透過以下命令將其中一位使用者的 Meeting Policy 切換回預設的 Global 會議原則

    Grant-CsTeamsMeetingPolicy -Identity "will@duotify.onmicrosoft.com" -PolicyName ""
    

    我到現在還是不理解,為何我公司所有人都會預設切換到 RestrictedAnonymousAccess 會議原則?

  4. Global (預設值) 啟用 Local broadcasting 選項 (即 NDI Streaming 功能)

    Set-CsTeamsMeetingPolicy -Identity Global -AllowNDIStreaming $true
    

    你也可以透過 New-CsTeamsMeetingPolicy 來建立新的會議原則,並透過 Grant-CsTeamsMeetingPolicy 授權給使用者。

從 Teams 桌面版啟用 NDI 功能

當你從 Teams admin center 啟用 NDI 功能後,還要在你的 Teams 桌面版應用程式開啟這個 NDI 設定

  1. 點擊 Teams 右上角的 ...設定

    image

  2. 切換到 應用程式權限 (Permissions) 並啟用 產品功能 > 網路裝置介面 (NDI) 選項

    image

    注意: 上圖箭頭的地方,若你沒有在 Teams admin center 啟用 NDI 功能,該選項是看不見的!

從 Teams 會議中透過 NDI 廣播

當你已經啟用 Teams 桌面版應用程式的 NDI 選項,就可以在 Teams 視訊會議中看到 透過 NDI 廣播 的功能,如下圖這樣點擊就會開始透過 NDI 廣播出去了!

image

設定 OBS 使用 Teams 來賓的 Webcam 視訊

當你的 Teams 會議開始透過 NDI 廣播,你當然要開啟能夠接收 NDI 廣播的本機應用程式,這裡我們使用 Open Broadcaster Software (OBS) 來接收 NDI 來源訊號。

  1. 安裝 OBS 與 NDI 支援

    安裝 Open Broadcaster Software (OBS) 軟體

    安裝 OBS NDI Plugin

  2. 開啟 OBS 並在 Sources 新增一個 NDI™ Source 訊號來源

    設定一個名稱,例如:Teams HostTeams Guest 1

    設定以下屬性 (Properties):

    • Source name: 選擇你希望從 Teams 讀取哪一個 NDI™ Source 來源
    • Bandwidth: 選擇 Highest
    • Sync: 選擇 Source Timing (這個設定會同步你的聲音與影像)
    • 勾選 Allow hardware acceleration (若有 GPU 才會使用)
    • Latency Mode: 選擇 Low
  3. 解決 NDI 訊號會大小跳動的問題

    這個步驟至關重要,因為 Teams 在開視訊會議的時候,影像的品質會依據目前的頻寬使用現況動態調整解析度,以確保會議在低頻寬的環境下也能正常進行。簡單來說,Teams 會允許降低視訊的解析度,以確保會議不會因為頻寬而導致畫面或聲音延遲。另一方面,當你在 分享螢幕 時,所有人的視訊解析度也會自動降低,因為 Teams 認為這個時刻大部分的人應該會把焦點著重在分享的畫面上。

    視訊的解析度忽大忽小會導致一個嚴重的問題,那就是 OBS 收到的 NDI™ Source 的解析度變化,會讓畫面上的來源訊號忽大忽小一直跳動,這會讓你在透過 OBS 直播時相當困擾。還好這個問題是可以透過 Transform 來解決這問題,我們只要限制視訊大小在指定的範圍內即可,以下是設定的步驟:

    1. NDI™ Source 訊號來源按下滑鼠右鍵,點擊 Transform > Edit Transform 設定 (或按 Ctrl+E 快速鍵)
    2. 變更 Bounding Box Type 下拉選單到 Scale to inner bounds 選項
    3. 按下 Close 即可設定完成

    事實上,任何會發生忽大忽小的視訊來源,都可以用這個技巧進行設定!

注意事項

  1. Microsoft Teams 透過 NDI™ Source 傳過來的 影像訊號 (Video) 主要是 Webcam 的鏡頭影像,並不包含 分享桌面 的訊號!
  2. Microsoft Teams 透過 NDI™ Source 傳過來的 聲音訊號 (Audio) 每一條來源都包含 所有人 會議中的聲音,並不包含每位來賓的分軌音源!
  3. 使用 Microsoft Teams 搭配 NDI™ Source 進行直播,並不適合使用來賓分享桌面的方式進行轉播,桌面分享 (Display Capture) 僅適用於直播主的桌面!
  4. 如果 Teams 的來賓原本有 Webcam 影像訊號,但來賓突然斷線的話,其 NDI™ Source 的訊號會自動停格在最後一個關鍵影格 (Key frame),畫面不會感覺太奇怪。

相關連結

留言評論