Tableau de projet Amazon Chime SDK
Remarque: Si la construction avec le code source du SDK, la branche
development
contient des modifications de saignement qui peuvent ne pas construire avec la bibliothèque de médias de carillon accessible au public ou qui peuvent ne pas être aussi stables que les versions publiques.
Le SDK Amazon Chime pour iOS facilite l'ajout d'appels audio collaboratifs, d'appels vidéo et de visualisation de partage d'écran vers des applications iOS en utilisant les mêmes services d'infrastructure que les réunions d'alimentation sur le service Amazon Chime.
Ce SDK Amazon Chime pour iOS fonctionne en se connectant aux ressources de session de réunion que vous avez créées dans votre compte AWS. Le SDK a tout ce dont vous avez besoin pour créer des expériences d'appels et de collaboration personnalisées dans votre application iOS, y compris des méthodes pour: Configurer les séances de réunion, liste et sélectionner les appareils audio, changer de dispositif vidéo, démarrer et arrêter la visualisation de l'écran, recevoir des rappels lorsque les événements médiatiques se produisent tels À mesure que le volume change et gérer les fonctionnalités de réunion telles que les liaisons audio muet et carreaux vidéo.
Nous avons également un conseil de projet Amazon Chime SDK où vous pouvez trouver des demandes de communauté et leurs statuts.
Pour commencer, voir les ressources suivantes:
Et passez en revue les guides suivants:
Vous pouvez intégrer Amazon Chime SDK dans votre projet à partir de SPM, Cocoapods ou Binaires via GitHub Release.
Aux fins de la configuration, le dossier racine de votre projet (où vous pouvez trouver votre fichier .xcodeproj
) sera appelé root
.
Le SDK Amazon Chime est disponible via Cocoapods. Si vous n'avez pas installé CoCoApods, installez CocoAPods en exécutant la commande:
$ gem install cocoapods
$ pod setup
Selon les paramètres de votre système, vous devrez peut-être utiliser Sudo pour installer des cocoapodes comme suit:
$ sudo gem install cocoapods
$ pod setup
Dans le répertoire racine (le répertoire où est votre fichier * .xcodeproj), exécutez ce qui suit pour créer un podfile dans votre projet:
$ pod init
Modifiez le Podfile
pour inclure AmazonChimeSDK
dans votre projet:
target 'YourTarget' do
pod 'AmazonChimeSDK'
...
end
Si vous n'avez pas besoin de fonctionnalités de partage vidéo et de contenu ou de support de codec vidéo logiciel, vous pouvez utiliser AmazonChimeSDKNoVideoCodecs
pour réduire la taille:
target 'YourTarget' do
pod 'AmazonChimeSDKNoVideoCodecs'
...
end
(Facultatif) Si vous souhaitez utiliser des fonctionnalités de flou d'arrière-plan et de remplacement, ajoutez:
target 'YourTarget' do
pod 'AmazonChimeSDKMachineLearning'
...
end
Ensuite, exécutez la commande suivante pour installer les pods:
$ pod install --repo-update
Pour ouvrir votre projet, ouvrez le fichier *.xcworkspace
nouvellement généré dans le répertoire racine à l'aide de Xcode. Vous pouvez le faire en émettant la commande suivante dans votre dossier de projet
$ xed .
Remarque: N'utilisez pas * .xcodeproj pour ouvrir le projet.
Si vous utilisez des fonctionnalités de flou d'arrière-plan et de remplacement, sous l'onglet Build Settings
, dans la section Linking
, ajoutez -framework AmazonChimeSDKMachineLearning
à Other Linker Flags
.
Le SDK Amazon Chime est disponible via SPM. Si vous n'avez pas besoin de fonctionnalités de partage vidéo et de contenu ou de support de codec vidéo logiciel, vous pouvez choisir de ne pas utiliser de codecs vidéo SPM à la place.
Ouvrez votre projet dans Xcode
Accédez à Fichier > Swift Packages > Ajouter une dépendance des packages ...
Dans le champ Entrez URL du référentiel du package , entrez "https://github.com/aws/amazon-chime-sdk-ios-spm". Pour n'utiliser aucun module de médias vidéo vidéo à la place, entrez "https://github.com/aws/amazon-chime-sdk-ios-no-video-codecs-spm".
Entrez la dernière version (par exemple 0.23.1
) et cliquez sur Suivant .
Choisissez des packages pour votre projet et cliquez sur Terminer . AmazonChimeSDK
et AmazonChimeSDKMedia
sont nécessaires. Vérifiez AmazonChimeSDKMachineLearning
si vous souhaitez utiliser le flou d'arrière-plan et le remplacement d'arrière-plan.
AmazonChimeSDK
et AmazonChimeSDKMedia
à partir de la dernière version.AmazonChimeSDKMachineLearning
. Sinon, vous pouvez ignorer toutes les références à AmazonChimeSDKMachineLearning
dans les instructions ci-dessous.AmazonChimeSDKMediaNoVideoCodecs
binaire au lieu d' AmazonChimeSDKMedia
et traiter toutes les références à AmazonChimeSDKMedia
comme AmazonChimeSDKMediaNoVideoCodecs
dans les instructions ci-dessous.Remarque: Nous ne prenons pas en charge le mélange et les binaires correspondants à partir de différentes versions.
.framework
S ou .xcframework
pour root
, ce qui dépend du framework que votre projet utilise. Pour XCode12.3 et ultérieurement, veuillez utiliser .xcframework
si vous avez un problème de compilation. .xcframework
est disponible après Amazon Chime SDK iOS V0.15.0 Ouvrez votre fichier .xcodeproj
dans xcode et cliquez sur votre cible de construction.
Sous l'onglet Build Settings
,
Ajoutez $(PROJECT_DIR)
au Framework Search Path
.
Ajoutez @executable_path/Frameworks
pour Runpath Search Paths
.
Sous la section Linking
, ajoutez les deux drapeaux suivants dans Other Linker Flags
:
-lc++
-ObjC
Sous l'onglet General
, recherchez Frameworks, Libraries, and Embedded Content
. Cliquez sur +, puis Add Others
, puis Add Files
.
.framework
traditionnel, spécifiez l'emplacement d' AmazonChimeSDK.framework
, AmazonChimeSDKMedia.framework
et AmazonChimeSDKMachineLearning.framework
à partir de l'étape 1. .framework
vous avez une erreur de compilation tout en utilisant .xcframework
à la place, qui est disponible après Amazon Chime SDK iOS V0.15.0..xcframework
, spécifiez l'emplacement d' AmazonChimeSDK.xcframework
, AmazonChimeSDKMedia.xcframework
et AmazonChimeSDKMachineLearning.xcframework
à partir de l'étape 1.AmazonChimeSDK.framework
AmazonChimeSDKMedia.framework
et Frameworks, vérifiez que Embed & Sign
est sélectionné sous l'option Embed
. Pour AmazonChimeSDKMachineLearning.framework
, sélectionnez Do Not Embed
. Pour exécuter l'application de démonstration, suivez ces étapes.
git clone [email protected]:aws/amazon-chime-sdk-ios.git
Pour les deux cibles dans /AmazonChimeSDKDemo/Podfile
, remplacez AMAZON_CHIME_SDK_VERSION
par une version SDK spécifique, par exemple 0.19.3
ou supprimez-la si vous utilisez la dernière version d'Amazon Chime SDK.
Under /AmazonChimeSDKDemo
, exécutez la commande suivante pour installer des pods:
$ pod install --repo-update
Téléchargez AmazonChimeSDKMedia
et AmazonChimeSDKMachineLearning
Binaires de la dernière version.
Unzip et copier AmazonChimeSDKMedia.xcframework
à amazon-chime-sdk-ios/AmazonChimeSDK
Folder et AmazonChimeSDKMachineLearning.xcframework
vers amazon-chime-sdk-ios/AmazonChimeSDKDemo
.
Déployez la démo sans serveur depuis Amazon-Chime-Sdk-JS
AmazonChimeDemoSDKBroadcast.appex
est une extension de diffusion pour le partage d'écran au niveau de l'appareil utilisé par AmazonChimesdkDemo, vérifiez que Embed without Signing
est sélectionnée sous l'option Embed
. Supprimez-le des Frameworks, Libraries, and Embedded Content
si vous ne souhaitez pas tester cela. Pour chaque cible, sous l'onglet Signing & Capabilities
,
Signing
la section, utilisez votre propre équipe de développeur Apple et votre identifiant de bundle.App Groups
, sélectionnez vos propres groupes d'applications si vous souhaitez tester la capture d'écran du niveau du périphérique de partage. Voir le partage de contenu pour plus de détails. Mettre à jour l'URL et la région du serveur:
AppConfiguration.swift
avec l'URL du serveur et la région de la démo sans serveur.ViewControllerObjC.h
avec l'URL du serveur et la région de la démo sans serveur. (Facultatif) Mettre à jour broadcastBundleId
et appGroupId
dans AppConfiguration.swift
et SampleHandler.swift
avec l'ID de bundle d'extension de téléchargement de diffusion et l'ID de groupe d'application si vous souhaitez tester la capture d'écran de niveau de périphérique de partage. Voir le partage de contenu pour plus de détails.
Ouvrez AmazonChimeSDKDemo.xcworkspace
Fichier dans AmazonChimeSDKDemo/
Utilisation de XCode, sélectionnez les AmazonChimeSDKDemoPods
dans la liste déroulante du schéma dans la barre supérieure de Xcode IDE, choisissez un périphérique de construction et cliquez sur le bouton d'exécution.
Ouvrez AmazonChimeSDKDemo.xcworkspace
Fichier dans AmazonChimeSDKDemo/
Utilisation de XCode, sélectionnez AmazonChimeSDKDemo
dans la liste déroulante du schéma dans la barre supérieure de Xcode IDE, choisissez un périphérique de construction et cliquez sur le bouton d'exécution.
Sur l'écran d'adhésion, choisissez de rejoindre la réunion sans CallKit
ou rejoignez via CallKit
Call / Sortvant Call. Étant donné que l'application de démonstration n'a pas de notification push, il retarde la rejoindre via l'appel entrant de 10 secondes pour donner à l'utilisateur suffisamment de temps pour arranger l'application ou verrouiller l'écran pour imiter le comportement.
Si vous découvrez un problème de sécurité potentiel dans ce projet, nous vous demandons d'informer AWS / Amazon Security via notre page de rapport de vulnérabilité. Veuillez ne pas créer de problème de github public.
Vous devez démarrer la session de réunion pour commencer à envoyer et à recevoir du son.
meetingSession . audioVideo . start ( )
Les configurations par défaut sont:
.outputOnly
ou .none
Vous pouvez spécifier des options non défautes dans AudioVideoConfiguration
, puis démarrer la session de réunion.
var audioVideoConfig = AudioVideoConfiguration (
audioMode : . mono48k ,
audioDeviceCapabilities : . outputOnly ,
callKitEnabled : true ,
enableAudioRedundancy : false ,
reconnectTimeoutMs : 180 * 1000 )
meetingSession . audioVideo . start ( audioVideoConfiguration : audioVideoConfig )
Remarque: Pour éviter de manquer les événements, ajoutez un observateur avant le début de la session. Vous pouvez supprimer l'observateur en appelant des réunions.audiovideo.removeaudiovideoobserver (observateur).
class MyAudioVideoObserver : AudioVideoObserver {
func audioSessionDidStartConnecting ( reconnecting : Bool ) {
if ( reconnecting ) {
// e.g. the network connection is dropped.
}
}
func audioSessionDidStart ( reconnecting : Bool ) {
// Meeting session starts.
// Can use realtime, devices APIs.
}
func audioSessionDidDrop ( ) { }
func audioSessionDidStopWithStatus ( sessionStatus : MeetingSessionStatus ) {
// See the "Stopping a session" section for details.
}
func audioSessionDidCancelReconnect ( ) { }
func connectionDidRecover ( ) { }
func connectionDidBecomePoor ( ) { }
func videoSessionDidStartConnecting ( ) { }
func videoSessionDidStartWithStatus ( sessionStatus : MeetingSessionStatus ) {
// Video session starts.
// Can use video APIs.
}
func videoSessionDidStopWithStatus ( sessionStatus : MeetingSessionStatus ) { }
meetingSession . audioVideo . addAudioVideoObserver ( observer : self )
}
Liste des appareils audio disponibles pour la réunion.
// An list of MediaDevice objects
let audioDevices = meetingSession . audioVideo . listAudioDevices ( )
for device in audioDevices {
logger . info ( msg : " Device type: ( device . type ) , label: ( device . label ) " )
}
MediaDevice
.Remarque: vous devez appeler cela après le démarrage de la session ou ce sera sans opération. Vous devez appeler ChooseAuDiodEvice avec l'un des appareils renvoyés de ListAuDiDevices ().
let audioDevices = audioVideo . listAudioDevices ( )
val device = /* An item from audioDevices */
meetingSession . audioVideo . chooseAudioDevice ( mediaDevice : device )
Remarque: SwitchCamera () est sans option si vous utilisez une source de capture de caméra personnalisée. Veuillez vous référer à la vidéo personnalisée pour plus de détails.
Passer pour utiliser la caméra avant ou arrière sur l'appareil, si disponible.
meetingSession . audioVideo . switchCamera ( )
Ajoutez un DeviceChangeObserver
pour recevoir un rappel lorsqu'un nouveau périphérique audio se connecte ou lorsqu'un périphérique audio se déconnecte. audioDeviceDidChange
comprend une liste de périphériques mis à jour.
class MyDeviceChangeObserver : DeviceChangeObserver {
func audioDeviceDidChange ( freshAudioDeviceList : [ MediaDevice ] ) {
// A list of updated MediaDevice objects
for device in freshAudioDeviceList {
logger . info ( msg : " Device type: ( device . type ) , label: ( device . label ) " )
}
}
meetingSession . audioVideo . addDeviceChangeObserver ( observer : self )
}
let activeAudioDevice = meetingSession . audioVideo . getActiveAudioDevice ( )
Lorsque vous rejoignez une réunion, les mono / 16 kHz , les mono / 48 kHz et les stéréo / 48 kHz sont pris en charge. Stereo / 48KHz sera défini en mode audio par défaut s'il n'est pas spécifié explicitement lors du démarrage de la session audio.
meetingSession . audioVideo . start ( ) // starts the audio video session with Stereo/48KHz audio, audio input and output devices enabled, callkit disabled, and audio redundancy enabled
meetingSession . audioVideo . start ( audioVideoConfiguration ) // starts the audio video session with the specified [AudioVideoConfiguration]
Remarque: Jusqu'à présent, vous avez ajouté des observateurs pour recevoir des événements de cycle de vie de l'appareil et de session. Dans les cas d'utilisation suivants, vous utiliserez les méthodes d'API en temps réel pour envoyer et recevoir des indicateurs de volume et contrôler l'état de la mutation.
let muted = meetingSession . audioVideo . realtimeLocalMute ( ) // returns true if muted, false if failed
let unmuted = meetingSession . audioVideo . realtimeLocalUnmute // returns true if unmuted, false if failed
Vous pouvez l'utiliser pour construire l'interface utilisateur des indicateurs en temps réel et les mettre à jour pour les modifications fournies par le tableau.
Remarque: Ces rappels ne comprendront que le delta du rappel précédent.
class MyRealtimeObserver : RealtimeObserver {
func volumeDidChange ( volumeUpdates : [ VolumeUpdate ] ) {
for currentVolumeUpdate in volumeUpdates {
// Muted, NotSpeaking, Low, Medium, High
logger . info ( msg : " ( currentVolumeUpdate . attendeeInfo . attendeeId ) 's volume changed: ( currentVolumeUpdate . volumeLevel ) " )
}
}
func signalStrengthDidChange ( signalUpdates : [ SignalUpdate ] ) {
for currentSignalUpdate in signalUpdates {
// None, Low, High
logger . info ( msg : " ( currentSignalUpdate . attendeeInfo . attendeeId ) 's signal strength changed: ( currentSignalUpdate . signalStrength ) " )
}
}
func attendeesDidJoin ( attendeeInfo : [ AttendeeInfo ] ) {
for currentAttendeeInfo in attendeeInfo {
logger . info ( msg : " ( currentAttendeeInfo . attendeeId ) joined the meeting " )
}
}
func attendeesDidLeave ( attendeeInfo : [ AttendeeInfo ] ) {
for currentAttendeeInfo in attendeeInfo {
logger . info ( msg : " ( currentAttendeeInfo . attendeeId ) left the meeting " )
}
}
func attendeesDidDrop ( attendeeInfo : [ AttendeeInfo ] ) {
for currentAttendeeInfo in attendeeInfo {
logger . info ( msg : " ( currentAttendeeInfo . attendeeId ) dropped from the meeting " )
}
}
func attendeesDidMute ( attendeeInfo : [ AttendeeInfo ] ) {
for currentAttendeeInfo in attendeeInfo {
logger . info ( msg : " ( currentAttendeeInfo . attendeeId ) muted " )
}
}
func attendeesDidUnmute ( attendeeInfo : [ AttendeeInfo ] ) {
for currentAttendeeInfo in attendeeInfo {
logger . info ( msg : " ( currentAttendeeInfo . attendeeId ) unmuted " )
}
}
meetingSession . audioVideo . addRealtimeObserver ( observer : self )
}
Vous pouvez utiliser l'événement activeSpeakerDidDetect
pour agrandir ou souligner les tuiles vidéo du haut-parleur le plus actif si disponibles. En définissant le scoreCallbackIntervalMs
et en implémentant activeSpeakerScoreDidChange
, vous pouvez recevoir périodiquement des scores des haut-parleurs actifs.
class MyActiveSpeakerObserver : ActiveSpeakerObserver {
let activeSpeakerObserverId = UUID ( ) . uuidString
var observerId : String {
return activeSpeakerObserverId
}
func activeSpeakerDidDetect ( attendeeInfo : [ AttendeeInfo ] ) {
if !attendeeInfo . isEmpty {
logger . info ( msg : " ( attendeeInfo [ 0 ] . attendeeId ) is the most active speaker " )
}
}
var scoresCallbackIntervalMs : Int {
return 1000 // 1 second
}
func activeSpeakerScoreDidChange ( scores : [ AttendeeInfo : Double ] ) {
let scoresInString = scores . map { ( score ) -> String in
let ( key , value ) = score
return " ( key . attendeeId ) : ( value ) "
} . joined ( separator : " , " )
logger . info ( msg : " Scores of active speakers are: ( scoresInString ) " )
}
// Calculating the active speaker base on the SDK provided policy, you can provide any custom algorithm
meetingSession . audioVideo . addActiveSpeakerObserver ( policy : DefaultActiveSpeakerPolicy ( ) , observer : self )
}
Remarque: vous devrez lier la vidéo à
VideoRenderView
afin d'afficher la vidéo.Une tuile vidéo locale peut être identifiée à l'aide de la propriété
isLocalTile
.Une tuile vidéo de contenu peut être identifiée à l'aide de la propriété
isContent
. Voir l'écran et le partage de contenu.Une tuile est créée avec un nouvel ID de tuile lorsque le même participant à distance redémarre la vidéo.
Vous pouvez trouver plus de détails sur l'ajout / supprimer / visualiser la vidéo de la création d'une application de réunion sur iOS à l'aide du SDK Amazon Chime.
Vous pouvez appeler startRemoteVideo
pour commencer à recevoir des vidéos distantes, car cela ne se produit pas par défaut.
meetingSession . audioVideo . startRemoteVideo ( )
stopRemoteVideo
arrête de recevoir des vidéos distantes et déclenche onVideoTileRemoved
pour les vidéos distantes existantes.
meetingSession . audioVideo . stopRemoteVideo ( )
class MyVideoTileObserver : VideoTileObserver {
func videoTileDidAdd ( tileState : VideoTileState ) {
// Ignore local video (see View local video), content video (see Screen and content share)
if tileState . isLocalTile || tileState . isContent {
return
}
let videoRenderView = /* a VideoRenderView object in your application to show the video */
meetingSession . audioVideo . bind ( videoView : videoRenderView , tileId : tileState . tileId )
}
func videoTileDidRemove ( tileState : VideoTileState ) {
// unbind video view to stop viewing the tile
meetingSession . audioVideo . unbindVideoView ( tileId : tileState . tileId )
}
meetingSession . audioVideo . addVideoTileObserver ( observer : self )
}
// Use internal camera capture for the local video
meetingSession . audioVideo . startLocalVideo ( )
// Use internal camera capture and set configuration for the video, e.g. simulcastEnabled, maxBitRateKbps
// If maxBitRateKbps is not set, it will be self adjusted depending on number of users and videos in the meeting
// This can be called multiple times to enable/disable simulcast and adjust video max bit rate on the fly
let localVideoConfig = LocalVideoConfiguration ( simulcastEnabled : true, maxBitRateKbps : 600 )
meetingSession . audioVideo . startLocalVideo ( config : localVideoConfig )
// You can switch camera to change the video input device
meetingSession . audioVideo . switchCamera ( )
// Or you can inject custom video source for local video, see custom video guide
meetingSession . audioVideo . stopLocalVideo ( )
Remarque: la vidéo locale doit être reflétée. Définir videorenserview.mirror = true
class MyVideoTileObserver : VideoTileObserver {
func videoTileDidAdd ( tileState : VideoTileState ) {
if tileState . isLocalTile {
let localVideoView = /* a VideoRenderView object in your application to show the video */
meetingSession . audioVideo . bind ( videoView : localVideoView , tileId : tileState . tileId )
}
}
}
func videoTileDidRemove ( tileState : VideoTileState ) {
// unbind video view to stop viewing the tile
meetingSession . audioVideo . unbindVideoView ( tileId : tileState . tileId )
}
meetingSession . audioVideo . addVideoTileObserver ( observer : self )
}
Pour une gestion plus avancée des carreaux vidéo, jetez un œil à la pagination vidéo.
Remarque: Lorsque vous ou d'autres participants partagez du contenu (par exemple, la capture d'écran ou tout autre objet de vidéosorce), le contenu (participant-ID # contenu) rejoint la session et partage du contenu comme si un participant régulier partage une vidéo.
Par exemple, votre identifiant de participation est "My-ID". Lorsque vous appelez
meetingSession.audioVideo.startContentShare
, le contenu "My-ID # Content" rejoindra la session et partagera votre contenu.
class MyContentShareObserver : ContentShareObserver {
func contentShareDidStart ( ) {
logger . info ( msg : " Content Share has started " )
}
func contentShareDidStop ( status : ContentShareStatus ) {
logger . info ( msg : " Content Share has stopped " )
}
meetingSession . audioVideo . addContentShareObserver ( observer : self )
let contentShareSource = /* a ContentShareSource object, can use InAppScreenCaptureSource for screen share or any subclass with custom video source */
// ContentShareSource object is not managed by SDK, builders need to start, stop, release accordingly
meetingSession . audioVideo . startContentShare ( source : contentShareSource )
}
Vous pouvez définir la configuration pour le partage de contenu, par exemple maxbitratekbps. La qualité réelle obtenue peut varier tout au long de l'appel en fonction du système et du réseau peut fournir.
let contentShareConfig = LocalVideoConfiguration ( maxBitRateKbps : 200 )
meetingSession . audioVideo . startContentShare ( source : contentShareSource , config : contentShareConfig )
Voir le partage de contenu pour plus de détails.
meetingSession . audioVideo . stopContentShare ( )
Chime SDK permet deux actions de contenu simultanées par réunion. Les partages de contenu à distance déclencheront onVideoTileAdded
, tandis que la part locale ne le fera pas. Pour rendre la vidéo de l'aperçu, ajoutez une VideoSink
à la VideoSource
dans le ContentShareSource
.
class MyVideoTileObserver : VideoTileObserver {
func videoTileDidAdd ( tileState : VideoTileState ) {
if ( tileState . isContent ) {
// tileState.attendeeId is formatted as "attendee-id#content"
let attendeeId = tileState . attendeeId
// Get the attendee ID from "attendee-id#content"
let baseAttendeeId = DefaultModality ( attendeeId ) . base ( )
logger . info ( msg : " $baseAttendeeId is sharing screen " )
let screenVideoView = /* a VideoRenderView object in your application to show the video */
meetingSession . audioVideo . bindVideoView ( videoView : screenVideoView , tileId : tileState . tileId )
}
}
func videoTileDidRemove ( tileState : VideoTileState ) {
meetingSession . audioVideo . unbindVideoView ( tileId : tileState . tileId )
}
meetingSession . audioVideo . addVideoTileObserver ( observer : self )
}
Voir ObservableMetric
pour plus de mesures disponibles et pour surveiller la qualité de partage audio, vidéo et de contenu.
class MyMetricsObserver : MetricsObserver {
func metricsDidReceive ( metrics : [ AnyHashable : Any ] ) {
logger . info ( msg : " Media metrics have been received: ( metrics ) " )
}
meetingSession . audioVideo . addMetricsObserver ( observer : self )
}
Vous pouvez recevoir des messages en temps réel de plusieurs sujets après le début de la session de réunion.
class MyDataMessageObserver : DataMessageObserver {
let dataMessageTopic = " chat "
// A throttled message is returned by backend from local sender
func dataMessageDidReceived ( dataMessage : DataMessage ) {
logger . info ( msg : " ( dataMessage . timestampMs ) ( dataMessage . text ( ) ) ( dataMessage . senderAttendeeId ) " )
}
// You can also subscribe to multiple topics.
meetingSession . audioVideo . addRealtimeDataMessageObserver ( topic : dataMessageTopic , observer : self )
}
Vous pouvez envoyer un message en temps réel à n'importe quel sujet, auquel les observateurs abonnés seront informés.
Remarque: le sujet doit être alpha-numerique et il peut inclure des traits d'union et des soulignements. Les données ne peuvent pas dépasser 2KB et la durée de vie est facultative mais positive entier.
let dataMessageTopic = " chat "
let dataMessageLifetimeMs = 1000
do {
// Send "Hello Chime" to any subscribers who are listening to "chat" topic with 1 seconds of lifetime
try meetingSession
. audioVideo
. realtimeSendDataMessage ( topic : dataMessageTopic ,
data : " Hello Chime " ,
lifetimeMs : dataMessageLifetimeMs )
} catch let err as SendDataMessageError {
logger . error ( msg : " Failed to send message! ( err ) " )
} catch {
logger . error ( msg : " Unknown error ( error . localizedDescription ) " )
}
Remarque: assurez-vous de supprimer tous les observateurs et de libérer les ressources que vous avez ajoutées pour éviter toute fuite de mémoire.
class MyAudioVideoObserver : AudioVideoObserver {
func audioSessionDidStopWithStatus ( sessionStatus : MeetingSessionStatus ) {
// This is where meeting ended.
// You can do some clean up work here.
}
func videoSessionDidStopWithStatus ( sessionStatus : MeetingSessionStatus ) {
// This will be invoked as well.
}
meetingSession . audioVideo . addAudioVideoObserver ( observer : self )
meetingSession . audioVideo . stop ( )
}
Amazon Voice Focus réduit le bruit de fond de la réunion pour une meilleure expérience de réunion. Pour plus de détails, voir Amazon Voice Focus.
let enabled = audioVideo . realtimeSetVoiceFocusEnabled ( enabled : true ) // enabling Amazon Voice Focus successful
let disabled = audioVideo . realtimeSetVoiceFocusEnabled ( enabled : false ) // disabling Amazon Voice Focus successful
La source vidéo personnalisée vous permet de contrôler la vidéo, comme l'application d'un filtre vidéo. Pour plus de détails, voir la vidéo personnalisée.
À partir de la version 0.23.3, le SDK commence à envoyer des données audio redondantes à nos serveurs sur la détection de la perte de paquets pour aider à réduire son effet sur la qualité de l'audio. Les paquets audio redondants ne sont envoyés que pour des paquets contenant un audio actif, une parole ou de la musique. Cela peut augmenter la bande passante consommée par l'audio jusqu'à 3 fois le montant normal en fonction de la quantité de perte de paquets détectée. Le SDK arrête automatiquement d'envoyer des données redondantes si elle n'a détecté aucune perte de paquet pendant 5 minutes.
Si vous avez besoin de désactiver cette fonctionnalité, vous pouvez le faire via le AudiovideOnonfiguration avant de commencer la session.
meetingSession . audioVideo . start ( AudioVideoConfiguration ( enableAudioRedundancy : false ) )
Bien qu'il existe une option pour désactiver la fonctionnalité, nous vous recommandons de le garder activé pour une meilleure qualité audio. Une raison possible de le désactiver pourrait être si vos clients ont des limitations de bande passante très strictes.
Reportez-vous à la FAQ générale pour Amazon Chime SDK.
Les applications peuvent obtenir des journaux du SDK de Chime en passant des instances de bûcheron lors de la création de réunions. Amazon Chime SDK a certaines implémentations par défaut de Logger que votre application peut utiliser, comme Consolelogger qui se connecte à Console. ConsoleLogger
est défini sur le niveau INFO
par défaut. Par conséquent, afin d'obtenir tous les journaux, y compris les journaux multimédias, créez un journaliste en suivant:
logger = ConsoleLogger ( name : " logger " , level : . DEFAULT )
Vous et vos utilisateurs finaux êtes responsables de tous les contenus (y compris toutes les images) téléchargés pour une utilisation avec remplacement d'arrière-plan, et doivent s'assurer que ce contenu ne viole pas la loi, portefuient ou n'appropriait pas les droits d'un tiers, ou ne viole pas autrement un terme matériel de votre accord avec Amazon (y compris la documentation, les conditions de service AWS ou la politique d'utilisation acceptable).
Copyright Amazon.com, Inc. ou ses affiliés. Tous droits réservés.