最佳做法:Azure 通訊服務 呼叫 SDK

本文提供與呼叫 SDK Azure 通訊服務 相關的最佳做法相關信息。

Azure 通訊服務 Web JavaScript SDK 最佳做法

本節提供與 Azure 通訊服務 JavaScript 語音和視訊通話 SDK 相關聯之最佳做法的相關信息。

JavaScript 語音和視訊通話 SDK

當 Azure 通訊服務 通話進行時,外掛程式麥克風或從設備管理器啟用麥克風

當通話開始時沒有可用的麥克風,然後麥克風變成可用時,將會引發“noMicrophoneDevicesEnumerated” 通話診斷事件。 發生這種情況時,您的應用程式應該叫 askDevicePermission 用 以取得使用者同意以列舉裝置。 然後,用戶將能夠靜音/取消靜音麥克風。

處置視訊串流轉譯器檢視

當不再需要通訊服務應用程式時,應該處置 VideoStreamRendererView或其父 VideoStreamRenderer 實例。

在 onbeforeunload 事件上掛斷呼叫

您的應用程式應該在發出事件時onbeforeunloadcall.hangup用。

在行動裝置上的多個索引標籤上處理多個呼叫

您的應用程式不應該同時連線到多個瀏覽器索引標籤的呼叫,因為這可能會造成未定義的行為,因為裝置上的麥克風和相機的資源配置。 建議開發人員在背景中完成時一律停止呼叫,再啟動新的呼叫。

在來電時處理OS靜音通話。

雖然在 Azure 通訊服務 通話(適用於 iOS 和 Android),如果電話傳入或語音助理啟動,OS 會自動將使用者的麥克風和相機靜音。 在Android上,通話會在通話結束後自動取消靜音,而視訊會重新啟動。 在 iOS 上,它需要用戶動作以「取消靜音」和「開始視訊」。 您可以使用的品質事件,接聽麥克風非預期地靜音的 microphoneMuteUnexpectedly通知。 請注意,若要能夠正確重新加入呼叫,您必須使用 SDK 1.2.3-beta.1 或更高版本。

const latestMediaDiagnostic = call.api(SDK.Features.Diagnostics).media.getLatest();
const isIosSafari = (getOS() === OSName.ios) && (getPlatformName() === BrowserName.safari);
if (isIosSafari && latestMediaDiagnostic.microphoneMuteUnexpectedly && latestMediaDiagnostic.microphoneMuteUnexpectedly.value) {
  // received a QualityEvent on iOS that the microphone was unexpectedly muted - notify user to unmute their microphone and to start their video stream
}

您的應用程式應該叫 call.startVideo(localVideoStream); 用 以啟動視訊串流,並且應該使用 this.currentCall.unmute(); 來取消靜音音訊。

裝置管理

您可以使用 Azure 通訊服務 SDK 來管理您的裝置和媒體作業。

  • 您的應用程式不應該使用像是 或 getDisplayMediagetUserMedia原生瀏覽器 API 來取得 SDK 外部的數據流。 如果您這麼做,您必須先手動處置媒體串流,才能透過通訊服務 SDK 使用 DeviceManager 或其他裝置管理 API。

要求裝置許可權

您可以使用 SDK 要求裝置權限:

  • 您的應用程式應該使用 DeviceManager.askDevicePermission 來要求存取音訊和/或視訊裝置。
  • 如果使用者拒絕存取,即使在重新整理頁面之後, DeviceManager.askDevicePermission 也會針對指定的裝置類型(音訊或視訊)傳回 『false』。 在此案例中,您的應用程式必須偵測到使用者先前拒絕存取權,並指示使用者手動重設或明確授與指定裝置類型的存取權。

另一個進程正在使用 相機

  • 在 Windows Chrome 和 Windows Edge 上,如果您啟動/加入/接受具有視訊的通話,且相機裝置正由網頁 SDK 執行所在的瀏覽器以外的另一個進程使用,則通話只會以音訊啟動,且沒有視訊。 相機StartFailed UFD 將會引發,因為相機無法啟動,因為它正由另一個進程使用。 同樣適用於在通話中開啟視訊。 您可以關閉另一個程式中的相機,讓該程式釋放相機裝置,然後從通話和視訊再次啟動視訊,現在會開啟通話和遠端參與者開始查看您的視訊。
  • 這在macOS Chrome和macOS Safari中不是問題,因為OS會讓進程/線程共用相機裝置。
  • 在行動裝置上,如果 ProcessA 要求相機裝置且由 ProcessB 使用,則 ProcessA 會超過相機裝置,而 ProcessB 會停止使用相機裝置
  • 在 iOS Safari 上,您無法在相同索引標籤或跨索引標籤的多個呼叫客戶端開啟相機。 當任何呼叫用戶端使用相機時,它會從使用相機的任何先前呼叫用戶端中超過相機。 先前的呼叫用戶端會取得 cameraStoppedUnexpectedly UFD。

螢幕共用

關閉應用程式並不會阻止其共用

例如,假設從 Chromium,您畫面會共用 Microsoft Teams 應用程式。 然後,按兩下Teams應用程式上的[X] 按鈕以關閉它。 Teams 應用程式將不會關閉,而且仍會在背景中執行。 您甚至會看到桌面列右下角的圖示。 由於 Teams 應用程式仍在執行中,這表示它仍在螢幕共用,而通話中的遠端參與者仍可以看到您的 Teams 應用程式正在共享畫面。 若要停止應用程式進行螢幕共用,您必須以滑鼠右鍵按下桌面列上的圖示,然後按兩下 [結束]。 或者,您必須按兩下瀏覽器上的 [停止共用] 按鈕。 或呼叫 sdk 的 Call.stopScreenSharing() API。

Safari 只能執行全螢幕共用

Safari 只允許螢幕共用整個畫面。 不同於 Chromium,這可讓您螢幕共用全螢幕、特定傳統型應用程式或特定瀏覽器索引標籤。

macOS 上的螢幕共享許可權

若要在macOS Safari或macOs Chrome 中執行螢幕共用,必須將螢幕錄製許可權授與OS功能表中的瀏覽器:[系統喜好設定] -> [安全性與隱私權] -> [螢幕錄製]。

下一步

如需詳細資訊,請參閱下列文章: