Udostępnij za pośrednictwem


Najlepsze rozwiązania: wywoływanie zestawów SDK usług Azure Communication Services

Ten artykuł zawiera informacje o najlepszych rozwiązaniach związanych z zestawami SDK wywołujących usługi Azure Communication Services.

Najlepsze rozwiązania dotyczące wywoływania zestawu SDK sieci Web w usługach Azure Communication Services

Ta sekcja zawiera informacje o najlepszych rozwiązaniach związanych z zestawem SDK połączeń internetowych (JavaScript) usług Azure Communication Services na potrzeby połączeń głosowych i wideo.

Podłącz mikrofon lub włącz mikrofon z menedżera urządzeń, gdy trwa połączenie

Jeśli mikrofon nie jest dostępny na początku wywołania usług Azure Communication Services, a następnie mikrofon stanie się dostępny, zmiana zgłasza noMicrophoneDevicesEnumerated zdarzenie diagnostyczne. W takim przypadku aplikacja musi wywołać metodę askDevicePermission w celu uzyskania zgody użytkownika na wyliczanie urządzeń. Następnie użytkownik może wyciszyć lub cofnąć wyciszenie mikrofonu.

Usuwanie elementu VideoStreamRendererView

Aplikacje usług komunikacyjnych powinny usuwać wystąpienia nadrzędne VideoStreamRendererViewVideoStreamRenderer , gdy nie są już potrzebne.

Zawieszanie wywołania zdarzenia onbeforeunload

Aplikacja powinna wywoływać call.hangup , gdy onbeforeunload zdarzenie jest emitowane.

Obsługa wielu wywołań na wielu kartach

Aplikacja nie powinna łączyć się z wywołaniami z wielu kart przeglądarki jednocześnie na urządzeniach przenośnych. Taka sytuacja może spowodować niezdefiniowane zachowanie z powodu alokacji zasobów dla mikrofonu i kamery na urządzeniu. Zachęcamy deweloperów do zawsze zawieszania się wywołań po zakończeniu pracy w tle przed rozpoczęciem nowego.

Obsługa wyciszenia połączenia przez system operacyjny w przypadku połączenia telefonicznego

Podczas połączenia z usługami Azure Communication Services (zarówno dla systemów iOS, jak i Android), jeśli połączenie telefoniczne zostanie włączone lub asystent głosowy zostanie aktywowany, system operacyjny automatycznie wyciszy mikrofon użytkownika i kamerę. W systemie Android połączenie automatycznie rozłącza się i ponownie uruchamia wideo po zakończeniu połączenia telefonicznego. W systemie iOS odłączanie i ponowne uruchamianie filmu wideo wymaga akcji użytkownika.

Możesz użyć zdarzenia microphoneMuteUnexpectedly jakości, aby nasłuchiwać powiadomienia, że mikrofon został nieoczekiwanie wyciszony. Pamiętaj, że aby poprawnie połączyć wywołanie, musisz użyć zestawu SDK 1.2.3-beta.1 lub nowszego.

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
}

Aplikacja powinna wywołać call.startVideo(localVideoStream); polecenie , aby uruchomić strumień wideo i użyć polecenia this.currentCall.unmute(); , aby cofnąć wyciszenie dźwięku.

Zarządzanie urządzeniami

Zestaw SDK usług Azure Communication Services umożliwia zarządzanie urządzeniami i operacjami multimedialnymi.

Aplikacja nie powinna używać natywnych interfejsów API przeglądarki, takich jak getUserMedia lub getDisplayMedia do uzyskiwania strumieni poza zestawem SDK. W przeciwnym razie należy ręcznie usunąć strumienie multimediów przed użyciem DeviceManager lub innymi interfejsami API zarządzania urządzeniami za pośrednictwem zestawu SDK usług komunikacyjnych.

Żądanie uprawnień urządzenia

Uprawnienia urządzenia można zażądać przy użyciu zestawu SDK. Aplikacja powinna używać DeviceManager.askDevicePermission do żądania dostępu do urządzeń audio i/lub wideo.

Jeśli użytkownik odmówi dostępu, DeviceManager.askDevicePermission zwraca false określony typ urządzenia (audio lub wideo) podczas kolejnych wywołań, nawet po odświeżeniu strony. W tym scenariuszu aplikacja musi:

  1. Wykryj, że użytkownik wcześniej odmówił dostępu.
  2. Poinstruuj użytkownika, aby ręcznie zresetował lub jawnie udzielił dostępu do określonego typu urządzenia.

Zarządzanie zachowaniem aparatu, którego używa inny proces

  • W przeglądarkach Windows Chrome i Windows Microsoft Edge: jeśli uruchamiasz, dołączasz lub akceptujesz połączenie z wideo, a inny proces (inny niż przeglądarka, w której działa zestaw SDK sieci Web) korzysta z urządzenia z aparatem, połączenie jest uruchamiane tylko z dźwiękiem i bez wideo. Flaga cameraStartFailed diagnostyki po stronie użytkownika jest wywoływana, ponieważ nie można uruchomić aparatu.

    Ta sama sytuacja dotyczy włączania połączenia wideo w połowie połączenia. Aparat można wyłączyć w innym procesie, aby proces zwalniał urządzenie aparatu, a następnie ponownie uruchomić wideo z wywołania. Następnie wideo włącza połączenie, a uczestnicy zdalni zaczynają widzieć film wideo.

    Ten problem nie istnieje w przeglądarce macOS Chrome lub macOS Safari, ponieważ system operacyjny umożliwia procesom i wątkom udostępnianie urządzenia aparatu.

  • Na urządzeniach przenośnych: jeśli procesA żąda urządzenia aparatu podczas korzystania z niego przez procesB , procesA przejmuje urządzenie aparatu i procesB przestają go używać.

  • W przeglądarce Safari dla systemu iOS: nie możesz mieć aparatu dla wielu klientów połączeń na tej samej karcie lub na kartach. Gdy dowolny klient wywołania używa aparatu, wyprzedzi aparat z dowolnego poprzedniego klienta wywołania, który go używał. Poprzedni klient wywołania otrzymuje flagę Diagnostyka skierowana przez cameraStoppedUnexpectedly użytkownika.

Zarządzanie udostępnianiem ekranu

Zamykanie aplikacji nie uniemożliwia udostępniania jej

Załóżmy, że na ekranie Chromium udostępniasz aplikację Microsoft Teams. Następnie wybierz przycisk X w aplikacji Teams, aby go zamknąć. Mimo że okno jest zamknięte, aplikacja Teams działa w tle. Ikona nadal jest wyświetlana na pasku zadań pulpitu. Ponieważ aplikacja Teams jest nadal uruchomiona, nadal jest ona udostępniana uczestnikom zdalnym.

Aby uniemożliwić udostępnianie zawartości ekranu aplikacji, należy wykonać jedną z następujących akcji:

  • Kliknij prawym przyciskiem myszy ikonę aplikacji na pasku zadań pulpitu, a następnie wybierz polecenie Zamknij.
  • Wybierz przycisk Zatrzymaj udostępnianie w przeglądarce.
  • Wywołaj operację interfejsu API zestawu Call.stopScreenSharing() SDK.

Safari może wykonywać tylko udostępnianie pełnoekranowe

Przeglądarka Safari zezwala na udostępnianie zawartości ekranu tylko dla całego ekranu. To zachowanie jest w przeciwieństwie do Chromium, które umożliwia udostępnianie pełnego ekranu, określonej aplikacji klasycznej lub określonej karty przeglądarki.

Możesz udzielić uprawnień do udostępniania ekranu w systemie macOS

Aby udostępnić ekran w przeglądarce Safari systemu macOS lub macOS Chrome, przyznaj przeglądarkom niezbędne uprawnienia w menu systemu operacyjnego: Preferencje>systemowe Zabezpieczenia i nagrywanie ekranu prywatności.>

Najlepsze rozwiązania dotyczące usług Azure Communication Services wywołujących natywny zestaw SDK

Ta sekcja zawiera informacje o najlepszych rozwiązaniach związanych z usługami Azure Communication Services wywołującymi natywny zestaw SDK na potrzeby połączeń głosowych i wideo.

Obsługiwane platformy

Poniżej przedstawiono minimalne wymagania dotyczące platformy systemu operacyjnego, aby zapewnić optymalną funkcjonalność zestawu Sdk natywnego wywoływania.

  • Obsługa systemu iOS 10.0+ w czasie kompilacji i systemu iOS 12.0+ w czasie wykonywania
  • Xcode 12.0+
  • Obsługa systemu iPadOS 13.0 lub nowszego

Weryfikowanie uprawnień urządzenia dla żądań aplikacji

Aby używać zestawu SDK wywoływania natywnego do wykonywania lub odbierania wywołań, konsumenci muszą autoryzować każdą platformę do uzyskiwania dostępu do zasobów urządzeń. Jako deweloper musisz monitować użytkownika o dostęp i upewnić się, że uprawnienia są włączone. Użytkownik autoryzuje te prawa dostępu, więc sprawdź, czy obecnie mają wymagane uprawnienia.

  • NSMicrophoneUsageDescription dostęp do mikrofonu
  • NSCameraUsageDescription w celu uzyskania dostępu do aparatu

Konfigurowanie dzienników

Implementowanie rejestrowania zgodnie z opisem w samouczku dotyczącym pobierania plików dziennika jest bardziej krytyczne niż kiedykolwiek. Szczegółowe dzienniki ułatwiają diagnozowanie problemów specyficznych dla modeli urządzeń lub wersji systemu operacyjnego spełniających minimalne kryteria zestawu SDK. Zachęcamy deweloperów do konfigurowania dzienników przy użyciu interfejsu API dzienników. Bez dzienników zespół pomocy technicznej firmy Microsoft nie może pomóc debugować i rozwiązywać problemów z wywołaniami.

Śledzenie identyfikatora CallID

CallID jest unikatowym identyfikatorem wywołania. Identyfikuje skorelowane zdarzenia ze wszystkich uczestników i punktów końcowych, które łączą się podczas jednego wywołania. W większości przypadków służy do przeglądania dzienników. Zespół pomoc techniczna firmy Microsoft prosi o pomoc w rozwiązywaniu problemów z połączeniami.

Należy śledzić CallID wartość w danych telemetrycznych skonfigurowanych w aplikacji. Aby dowiedzieć się, jak pobrać wartość dla każdej platformy, postępuj zgodnie z wytycznymi w przewodniku rozwiązywania problemów.

Subskrybowanie statystyk dotyczących diagnostyki i jakości multimediów dla użytkowników

Możesz użyć tych funkcji usług Azure Communication Services, aby ułatwić ulepszanie środowiska użytkownika:

  • Diagnostyka napotykana przez użytkownika: sprawdź właściwości wywołania, aby określić przyczynę problemów, które mają wpływ na klientów.
  • Statystyki dotyczące jakości multimediów: Sprawdź metryki jakości dotyczące jakości audio, wideo i udostępniania ekranu niskiego poziomu dla metryk połączeń przychodzących i wychodzących. Zalecamy zebranie danych i wysłanie ich do pozyskiwania potoku po zakończeniu wywołania.

Zarządzanie obsługą błędów

Jeśli podczas wywołania lub implementacji wystąpią błędy, metody zwracają obiekty błędów zawierające kody błędów. Ważne jest, aby używać tych obiektów błędów do prawidłowej obsługi błędów i wyświetlania alertów. Stany wywołań zwracają również kody błędów, aby pomóc zidentyfikować przyczyny błędów wywołania. Aby rozwiązać wszelkie problemy, zapoznaj się z przewodnikiem rozwiązywania problemów.

Zarządzanie strumieniami wideo

Pamiętaj, aby usunąć VideoStreamRendererView , gdy interfejs użytkownika nie wyświetla już wideo. Użyj VideoStreamType polecenia , aby określić typ strumienia.

Przeprowadzanie ogólnego zarządzania pamięcią

Wstępne przydzielanie zasobów. Zainicjuj klienta wywołującego i wszelkie niezbędne zasoby podczas fazy uruchamiania aplikacji, a nie na żądanie. Takie podejście zmniejsza opóźnienie podczas uruchamiania wywołania.

Należy prawidłowo usunąć. Usuwaj wszystkie obiekty wywołań po użyciu, aby zwolnić zasoby systemowe i uniknąć przecieków pamięci. Pamiętaj, aby anulować subskrypcję zdarzeń, które mogą powodować przecieki pamięci.

Rozważ sposób uzyskiwania dostępu do aparatu lub mikrofonu przez procesy

Jeśli na urządzeniach przenośnych wiele procesów próbuje jednocześnie uzyskać dostęp do aparatu lub mikrofonu, pierwszy proces żądania dostępu przejmuje kontrolę nad urządzeniem. W rezultacie drugi proces natychmiast utraci dostęp do niego.

Optymalizowanie rozmiaru biblioteki

Optymalizowanie rozmiaru bibliotek w tworzeniu oprogramowania ma kluczowe znaczenie dla następujących powodów, zwłaszcza że aplikacje stają się bardziej złożone i intensywnie obciążające zasoby:

  • Wydajność aplikacji: mniejsze biblioteki zmniejszają ilość kodu, który aplikacja musi ładować, analizować i wykonywać. Ta redukcja może znacznie zwiększyć czas uruchamiania i ogólną wydajność aplikacji, zwłaszcza na urządzeniach, które mają ograniczone zasoby.

  • Użycie pamięci: minimalizując rozmiar biblioteki, można zmniejszyć ilość pamięci środowiska uruchomieniowego aplikacji. Ten spadek jest ważny w przypadku urządzeń przenośnych, gdzie pamięć jest często ograniczona. Mniejsze użycie pamięci może prowadzić do mniejszej liczby awarii systemu i lepszej wydajności wielozadaniowości.

Aby uzyskać więcej informacji, zobacz: