Dewan Proyek Amazon Chime SDK
CATATAN: Jika membangun dengan kode sumber SDK, cabang
development
berisi perubahan pendarahan yang mungkin tidak dibangun dengan perpustakaan media chime yang tersedia secara publik atau mungkin tidak stabil seperti rilis publik.
Amazon Chime SDK untuk iOS memudahkan untuk menambahkan panggilan audio kolaboratif, panggilan video, dan fitur tampilan berbagi layar ke aplikasi iOS dengan menggunakan layanan infrastruktur yang sama yang menyumbangkan pertemuan di layanan Amazon Chime.
Amazon Chime SDK untuk iOS ini berfungsi dengan menghubungkan ke sumber daya sesi pertemuan yang telah Anda buat di akun AWS Anda. SDK memiliki semua yang Anda butuhkan untuk membangun pengalaman panggilan dan kolaborasi khusus dalam aplikasi iOS Anda, termasuk metode untuk: Mengkonfigurasi sesi pertemuan, daftar dan pilih perangkat audio, beralih perangkat video, mulai dan berhenti berbagi layar, menerima panggilan balik ketika peristiwa media terjadi seperti itu seperti halnya Saat volume berubah, dan mengelola fitur pertemuan seperti binding ubin audio dan ubin video.
Kami juga memiliki Dewan Proyek Amazon Chime SDK di mana Anda dapat menemukan permintaan komunitas dan status mereka.
Untuk memulai, lihat sumber daya berikut:
Dan tinjau pemandu berikut:
Anda dapat mengintegrasikan Amazon Chime SDK dalam proyek Anda dari SPM, Cocoapods atau binari melalui rilis GitHub.
Untuk tujuan pengaturan, folder root proyek Anda (di mana Anda dapat menemukan file .xcodeproj
Anda) akan disebut sebagai root
.
Amazon Chime SDK tersedia melalui cocoapods. Jika Anda belum memasang cocoapod, pasang cocoapod dengan menjalankan perintah:
$ gem install cocoapods
$ pod setup
Bergantung pada pengaturan sistem Anda, Anda mungkin harus menggunakan sudo untuk memasang cocoapod sebagai berikut:
$ sudo gem install cocoapods
$ pod setup
Di direktori root (direktori tempat file *.xcodeproj Anda), jalankan berikut ini untuk membuat podfile dalam proyek Anda:
$ pod init
Edit Podfile
untuk memasukkan AmazonChimeSDK
ke dalam proyek Anda:
target 'YourTarget' do
pod 'AmazonChimeSDK'
...
end
Jika Anda tidak memerlukan fungsionalitas berbagi video dan konten, atau dukungan codec video perangkat lunak, Anda dapat menggunakan AmazonChimeSDKNoVideoCodecs
sebagai gantinya untuk mengurangi ukuran:
target 'YourTarget' do
pod 'AmazonChimeSDKNoVideoCodecs'
...
end
(Opsional) Jika Anda ingin menggunakan fitur latar belakang blur dan penggantian, tambahkan:
target 'YourTarget' do
pod 'AmazonChimeSDKMachineLearning'
...
end
Kemudian jalankan perintah berikut untuk menginstal pod:
$ pod install --repo-update
Untuk membuka proyek Anda, buka file *.xcworkspace
yang baru dihasilkan di direktori root menggunakan Xcode. Anda dapat melakukan ini dengan mengeluarkan perintah berikut di folder proyek Anda
$ xed .
Catatan: Jangan gunakan *.xcodeproj untuk membuka proyek.
Jika Anda menggunakan fitur latar belakang blur dan penggantian, di bawah tab Build Settings
, di bawah bagian Linking
, tambahkan -framework AmazonChimeSDKMachineLearning
ke Other Linker Flags
.
Amazon Chime SDK tersedia melalui SPM. Jika Anda tidak memerlukan fungsionalitas berbagi video dan konten, atau dukungan codec video perangkat lunak, Anda dapat memilih untuk tidak menggunakan codec video SPM sebagai gantinya.
Buka proyek Anda di Xcode
Pergi ke File > Paket Swift > Tambahkan Ketergantungan Paket ...
Di bidang masukkan URL repositori paket , masukkan "https://github.com/aws/amazon-chime-sdk-ios-spm". Untuk tidak menggunakan modul media Codecs Video, masukkan "https://github.com/aws/amazon-chime-sdk-ios-no-video-codecs-spm".
Masukkan versi terbaru (mis. 0.23.1
) dan klik Next .
Pilih paket untuk proyek Anda dan klik Selesai . Diperlukan AmazonChimeSDK
dan AmazonChimeSDKMedia
. Periksa AmazonChimeSDKMachineLearning
jika Anda ingin menggunakan latar belakang blur dan penggantian latar belakang.
AmazonChimeSDK
dan AmazonChimeSDKMedia
dari rilis terbaru.AmazonChimeSDKMachineLearning
. Jika tidak, Anda dapat mengabaikan semua referensi ke AmazonChimeSDKMachineLearning
dalam instruksi di bawah ini.AmazonChimeSDKMediaNoVideoCodecs
alih -alih AmazonChimeSDKMedia
dan memperlakukan semua referensi ke AmazonChimeSDKMedia
sebagai AmazonChimeSDKMediaNoVideoCodecs
dalam instruksi di bawah ini.Catatan: Kami tidak mendukung pencampuran dan pencocokan binari dari rilis yang berbeda.
.framework
S atau .xcframework
s untuk root
, yang tergantung pada kerangka kerja yang digunakan proyek Anda. Untuk xcode12.3 dan yang lebih baru, silakan gunakan .xcframework
jika Anda memiliki masalah kompilasi. .xcframework
tersedia setelah Amazon Chime SDK IOS V0.15.0 Buka file .xcodeproj
Anda di xcode dan klik target build Anda.
Di bawah tab Build Settings
,
Tambahkan $(PROJECT_DIR)
ke Framework Search Path
.
Tambahkan @executable_path/Frameworks
ke Runpath Search Paths
.
Di bawah bagian Linking
, tambahkan dua bendera berikut di Other Linker Flags
:
-lc++
-ObjC
Di bawah Tab General
, cari Frameworks, Libraries, and Embedded Content
. Klik +, lalu Add Others
, lalu Add Files
.
.framework
tradisional, tentukan lokasi AmazonChimeSDK.framework
, AmazonChimeSDKMedia.framework
, dan AmazonChimeSDKMachineLearning.framework
dari Langkah 1. Jika Anda memiliki kesalahan kompilasi saat menggunakan .framework
TRADISEN, yang terjadi di Xcode 12.3 dan yang lebih baru, silakan gunakan .xcframework
sebagai gantinya, yang tersedia setelah Amazon Chime SDK IOS V0.15.0..xcframework
, tentukan lokasi AmazonChimeSDK.xcframework
, AmazonChimeSDKMedia.xcframework
, dan AmazonChimeSDKMachineLearning.xcframework
dari Langkah 1.AmazonChimeSDK.framework
AmazonChimeSDKMedia.framework
DAN RUANG, memverifikasi bahwa Embed & Sign
dipilih di bawah opsi Embed
. Untuk AmazonChimeSDKMachineLearning.framework
, pilih Do Not Embed
. Untuk menjalankan aplikasi demo, ikuti langkah -langkah ini.
git clone [email protected]:aws/amazon-chime-sdk-ios.git
Untuk kedua target di /AmazonChimeSDKDemo/Podfile
, ganti AMAZON_CHIME_SDK_VERSION
dengan versi SDK tertentu, misalnya 0.19.3
atau hapus jika menggunakan versi terbaru Amazon Chime SDK.
Under /AmazonChimeSDKDemo
, jalankan perintah berikut untuk menginstal pod:
$ pod install --repo-update
Unduh binari AmazonChimeSDKMedia
dan AmazonChimeSDKMachineLearning
dari rilis terbaru.
Unzip dan salin AmazonChimeSDKMedia.xcframework
ke folder amazon-chime-sdk-ios/AmazonChimeSDK
dan AmazonChimeSDKMachineLearning.xcframework
ke folder amazon-chime-sdk-ios/AmazonChimeSDKDemo
.
Menyebarkan demo tanpa server dari Amazon-chime-sdk-js
AmazonChimeDemoSDKBroadcast.appex
adalah ekstensi siaran untuk berbagi layar tingkat perangkat yang digunakan oleh AmazonChimesDkDemo, verifikasi bahwa Embed without Signing
dipilih di bawah opsi Embed
. Hapus dari Frameworks, Libraries, and Embedded Content
jika Anda tidak ingin menguji ini. Untuk setiap target, di bawah tab Signing & Capabilities
,
Signing
, gunakan tim pengembang apel Anda sendiri dan pengidentifikasi bundel.App Groups
(Opsional), pilih grup aplikasi Anda sendiri jika Anda ingin menguji tangkapan layar tingkat perangkat berbagi. Lihat Bagikan Konten untuk detail lebih lanjut. Perbarui URL dan Wilayah Server:
AppConfiguration.swift
dengan URL server dan wilayah demo tanpa server.ViewControllerObjC.h
dengan URL server dan wilayah demo tanpa server. (Opsional) Perbarui broadcastBundleId
dan appGroupId
di kedua AppConfiguration.swift
dan SampleHandler.swift
dengan ID bundel ekstensi unggahan siaran dan ID grup aplikasi jika Anda ingin menguji tangkapan layar tingkat perangkat berbagi. Lihat Bagikan Konten untuk detail lebih lanjut.
Buka file AmazonChimeSDKDemo.xcworkspace
di AmazonChimeSDKDemo/
Menggunakan Xcode, pilih AmazonChimeSDKDemoPods
dari daftar dropdown skema di bilah atas XCODE IDE, pilih perangkat build dan klik tombol RUN.
Buka file AmazonChimeSDKDemo.xcworkspace
di AmazonChimeSDKDemo/
Menggunakan Xcode, pilih AmazonChimeSDKDemo
dari daftar dropdown skema di bilah atas XCODE IDE, pilih perangkat build dan klik tombol RUN.
Di layar bergabung, pilih untuk bergabung dengan rapat tanpa CallKit
atau bergabung melalui panggilan masuk/keluar CallKit
. Karena aplikasi demo tidak memiliki pemberitahuan push, ia menunda bergabung melalui panggilan masuk dengan 10 detik untuk memberi pengguna waktu yang cukup untuk latar belakang aplikasi atau mengunci layar untuk meniru perilaku.
Jika Anda menemukan masalah keamanan potensial dalam proyek ini, kami meminta Anda memberi tahu AWS/Amazon Security melalui halaman pelaporan kerentanan kami. Tolong jangan buat masalah gitub publik.
Anda harus memulai sesi pertemuan untuk mulai mengirim dan menerima audio.
meetingSession . audioVideo . start ( )
Konfigurasi default adalah:
.outputOnly
atau .none
menghindari memerlukan izin perekaman audio) Anda dapat menentukan opsi non-default dalam AudioVideoConfiguration
, dan kemudian memulai sesi pertemuan.
var audioVideoConfig = AudioVideoConfiguration (
audioMode : . mono48k ,
audioDeviceCapabilities : . outputOnly ,
callKitEnabled : true ,
enableAudioRedundancy : false ,
reconnectTimeoutMs : 180 * 1000 )
meetingSession . audioVideo . start ( audioVideoConfiguration : audioVideoConfig )
Catatan: Untuk menghindari kehilangan peristiwa apa pun, tambahkan pengamat sebelum sesi dimulai. Anda dapat menghapus pengamat dengan menelepon rapat -rapat. Audiovideo.removeaudiovideoBserver (pengamat).
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 )
}
Daftar perangkat audio yang tersedia untuk rapat.
// 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
.Catatan: Anda harus memanggil ini setelah sesi dimulai atau tidak akan menjadi op. Anda harus menghubungi ChooseAudiodevice dengan salah satu perangkat yang dikembalikan dari Listaudiodevices ().
let audioDevices = audioVideo . listAudioDevices ( )
val device = /* An item from audioDevices */
meetingSession . audioVideo . chooseAudioDevice ( mediaDevice : device )
Catatan: SwitchCamera () tidak ada op jika Anda menggunakan sumber pengambilan kamera khusus. Silakan merujuk ke video khusus untuk lebih jelasnya.
Beralih untuk menggunakan kamera depan atau belakang pada perangkat, jika tersedia.
meetingSession . audioVideo . switchCamera ( )
Tambahkan DeviceChangeObserver
untuk menerima panggilan balik ketika perangkat audio baru terhubung atau ketika perangkat audio terputus. audioDeviceDidChange
mencakup daftar perangkat yang diperbarui.
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 ( )
Saat bergabung dengan rapat, Mono/16KHz , Mono/48KHz dan Stereo/48KHz didukung. Stereo/48KHz akan ditetapkan sebagai mode audio default jika tidak ditentukan secara eksplisit saat memulai sesi 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]
Catatan: Sejauh ini, Anda telah menambahkan pengamat untuk menerima acara siklus hidup perangkat dan sesi. Dalam kasus penggunaan berikut, Anda akan menggunakan metode API real-time untuk mengirim dan menerima indikator volume dan mengontrol keadaan bisu.
let muted = meetingSession . audioVideo . realtimeLocalMute ( ) // returns true if muted, false if failed
let unmuted = meetingSession . audioVideo . realtimeLocalUnmute // returns true if unmuted, false if failed
Anda dapat menggunakan ini untuk membangun indikator waktu nyata UI dan memperbarui mereka untuk perubahan yang dikirimkan oleh array.
Catatan: Panggilan balik ini hanya akan menyertakan delta dari panggilan balik sebelumnya.
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 )
}
Anda dapat menggunakan acara activeSpeakerDidDetect
untuk memperbesar atau menekankan ubin video speaker paling aktif jika tersedia. Dengan menetapkan scoreCallbackIntervalMs
dan menerapkan activeSpeakerScoreDidChange
, Anda dapat menerima skor speaker aktif secara berkala.
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 )
}
Catatan: Anda harus mengikat video ke
VideoRenderView
untuk menampilkan video.Ubin video lokal dapat diidentifikasi menggunakan properti
isLocalTile
.Ubin video konten dapat diidentifikasi menggunakan properti
isContent
. Lihat Layar dan Bagikan Konten.Sebuah ubin dibuat dengan ID ubin baru ketika peserta jarak jauh yang sama restart video.
Anda dapat menemukan detail lebih lanjut tentang menambahkan/menghapus/menonton video dari membangun aplikasi pertemuan di iOS menggunakan Amazon Chime SDK.
Anda dapat menghubungi startRemoteVideo
untuk mulai menerima video jarak jauh, karena ini tidak terjadi secara default.
meetingSession . audioVideo . startRemoteVideo ( )
stopRemoteVideo
berhenti menerima video jarak jauh dan memicu onVideoTileRemoved
untuk video jarak jauh yang ada.
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 ( )
Catatan: Video lokal harus dicerminkan. Setel videorEnderView.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 )
}
Untuk manajemen ubin video yang lebih canggih, lihat pagination video.
Catatan: Ketika Anda atau peserta lainnya berbagi konten (misalnya tangkapan layar atau objek VideoSource lainnya), peserta konten (konten peserta-id) bergabung dengan sesi tersebut dan membagikan konten seolah-olah peserta reguler membagikan video.
Misalnya, ID peserta Anda adalah "My-ID". Saat Anda menelepon
meetingSession.audioVideo.startContentShare
, peserta konten "My-ID#Content" akan bergabung dengan sesi dan membagikan konten Anda.
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 )
}
Anda dapat mengatur konfigurasi untuk berbagi konten, misalnya maxbitratekbps. Kualitas aktual yang dicapai dapat bervariasi di seluruh panggilan tergantung pada sistem dan jaringan apa yang dapat disediakan.
let contentShareConfig = LocalVideoConfiguration ( maxBitRateKbps : 200 )
meetingSession . audioVideo . startContentShare ( source : contentShareSource , config : contentShareConfig )
Lihat Bagikan Konten untuk detail lebih lanjut.
meetingSession . audioVideo . stopContentShare ( )
Chime SDK memungkinkan dua saham konten simultan per pertemuan. Saham konten jarak jauh akan memicu onVideoTileAdded
, sedangkan saham lokal tidak akan. Untuk membuat video untuk pratinjau, tambahkan VideoSink
ke VideoSource
di 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 )
}
Lihat ObservableMetric
untuk lebih banyak metrik yang tersedia dan untuk memantau kualitas audio, video, dan konten berbagi.
class MyMetricsObserver : MetricsObserver {
func metricsDidReceive ( metrics : [ AnyHashable : Any ] ) {
logger . info ( msg : " Media metrics have been received: ( metrics ) " )
}
meetingSession . audioVideo . addMetricsObserver ( observer : self )
}
Anda dapat menerima pesan real-time dari beberapa topik setelah memulai sesi pertemuan.
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 )
}
Anda dapat mengirim pesan waktu nyata ke topik apa pun, di mana pengamat yang telah berlangganan akan diberitahu.
CATATAN: Topik perlu alfa-numerik dan dapat mencakup tanda hubung dan garis bawah. Data tidak dapat melebihi 2KB dan seumur hidup adalah opsional tetapi bilangan bulat positif.
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 ) " )
}
Catatan: Pastikan untuk menghapus semua pengamat dan melepaskan sumber daya yang telah Anda tambahkan untuk menghindari kebocoran memori.
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 mengurangi kebisingan latar belakang dalam pertemuan untuk pengalaman pertemuan yang lebih baik. Untuk detail lebih lanjut, lihat 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
Sumber video khusus memungkinkan Anda untuk mengontrol video, seperti menerapkan filter video. Untuk detail lebih lanjut, lihat video khusus.
Mulai dari versi 0.23.3, SDK mulai mengirim data audio yang berlebihan ke server kami tentang mendeteksi kehilangan paket untuk membantu mengurangi efeknya pada kualitas audio. Paket audio yang berlebihan hanya dikirim untuk paket yang berisi audio aktif, IE pidato atau musik. Ini dapat meningkatkan bandwidth yang dikonsumsi oleh audio hingga 3 kali jumlah normal tergantung pada jumlah kerugian paket yang terdeteksi. SDK akan secara otomatis berhenti mengirim data yang berlebihan jika belum mendeteksi kerugian paket selama 5 menit.
Jika Anda perlu menonaktifkan fitur ini, Anda dapat melakukannya melalui audiovideoconfiguration sebelum memulai sesi.
meetingSession . audioVideo . start ( AudioVideoConfiguration ( enableAudioRedundancy : false ) )
Meskipun ada opsi untuk menonaktifkan fitur, kami sarankan agar tetap diaktifkan untuk kualitas audio yang lebih baik. Salah satu alasan yang mungkin untuk menonaktifkannya mungkin jika pelanggan Anda memiliki batasan bandwidth yang sangat ketat.
Lihat FAQ Umum untuk Amazon Chime SDK.
Aplikasi bisa mendapatkan log dari Chime SDK dengan memberikan contoh Logger saat membuat pertemuan. Amazon Chime SDK memiliki beberapa implementasi default dari Logger yang dapat digunakan aplikasi Anda, seperti Consolelogger yang masuk ke konsol. ConsoleLogger
diatur ke tingkat INFO
sebagai default. Oleh karena itu, untuk mendapatkan semua log, termasuk log media, membuat logger dengan mengikuti:
logger = ConsoleLogger ( name : " logger " , level : . DEFAULT )
Anda dan pengguna akhir Anda bertanggung jawab atas semua konten (termasuk gambar apa pun) yang diunggah untuk digunakan dengan penggantian latar belakang, dan harus memastikan bahwa konten tersebut tidak melanggar hukum, melanggar atau menyalahgunakan hak -hak pihak ketiga mana pun, atau dengan sebaliknya melanggar istilah material suatu materi perjanjian Anda dengan Amazon (termasuk dokumentasi, persyaratan layanan AWS, atau kebijakan penggunaan yang dapat diterima).
Copyright Amazon.com, Inc. atau afiliasinya. Semua hak dilindungi undang -undang.