Bagikan melalui


Mengelola rekaman panggilan pada klien

Penting

Fungsionalitas yang dijelaskan dalam artikel ini saat ini dalam pratinjau publik. Versi pratinjau ini disediakan tanpa perjanjian tingkat layanan, dan tidak disarankan untuk beban kerja produksi. Fitur tertentu mungkin tidak didukung atau mungkin memiliki kemampuan terbatas. Untuk mengetahui informasi selengkapnya, lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.

Perekaman panggilan memungkinkan pengguna Anda merekam panggilan yang mereka lakukan dengan Azure Communication Services. Dalam artikel ini, Anda mempelajari cara mengelola rekaman di sisi klien. Sebelum memulai, Anda perlu menyiapkan perekaman di sisi server.

Prasyarat

Pasang SDK

npm install Gunakan perintah untuk menginstal SDK Umum dan Panggilan Azure Communication Services untuk JavaScript:

npm install @azure/communication-common --save
npm install @azure/communication-calling --save

Menginisialisasi objek yang diperlukan

Instans CallClient diperlukan untuk sebagian besar operasi panggilan. Saat membuat instans baru CallClient , Anda dapat mengonfigurasinya dengan opsi kustom seperti Logger instans.

CallClient Dengan instans, Anda dapat membuat CallAgent instans dengan memanggil createCallAgent. Metode ini secara asinkron mengembalikan objek instans CallAgent.

Metode createCallAgent menggunakan CommunicationTokenCredential sebagai argumen. Hal ini menerima token akses pengguna.

Anda dapat menggunakan metode getDeviceManager pada instans CallClient untuk mengakses deviceManager.

const { CallClient } = require('@azure/communication-calling');
const { AzureCommunicationTokenCredential} = require('@azure/communication-common');
const { AzureLogger, setLogLevel } = require("@azure/logger");

// Set the logger's log level
setLogLevel('verbose');

// Redirect log output to console, file, buffer, REST API, or whatever location you want
AzureLogger.log = (...args) => {
    console.log(...args); // Redirect log output to console
};

const userToken = '<USER_TOKEN>';
callClient = new CallClient(options);
const tokenCredential = new AzureCommunicationTokenCredential(userToken);
const callAgent = await callClient.createCallAgent(tokenCredential, {displayName: 'optional Azure Communication Services user name'});
const deviceManager = await callClient.getDeviceManager()

Cara terbaik mengelola konektivitas SDK ke infrastruktur Microsoft

Call Agent Instans ini membantu Anda mengelola panggilan (untuk bergabung atau memulai panggilan). Untuk bekerja, SDK panggilan Anda perlu tersambung ke infrastruktur Microsoft untuk mendapatkan pemberitahuan panggilan masuk dan mengoordinasikan detail panggilan lainnya. Anda Call Agent memiliki dua kemungkinan status:

Tersambung - Nilai Call Agent Connected connectionStatue berarti SDK klien terhubung dan mampu menerima pemberitahuan dari infrastruktur Microsoft.

Terputus - Nilai Call Agent Disconnected status connectionStatue ada masalah yang mencegah SDK menyambungkannya dengan benar. Call Agent harus dibuat ulang.

  • invalidToken: Jika token kedaluwarsa atau instans tidak valid Call Agent terputus dengan kesalahan ini.
  • connectionIssue: Jika ada masalah dengan klien yang terhubung ke microsoft infrascture, setelah banyak percobaan Call Agent ulang mengekspos connectionIssue kesalahan.

Anda dapat memeriksa apakah lokal Call Agent Anda tersambung ke infrastruktur Microsoft dengan memeriksa nilai connectionState properti saat ini. Selama panggilan aktif, Anda dapat mendengarkan connectionStateChanged acara untuk menentukan apakah Call Agent perubahan dari status Tersambung ke Terputus .

const connectionState = callAgentInstance.connectionState;
console.log(connectionState); // it may return either of 'Connected' | 'Disconnected'

const connectionStateCallback = (args) => {
    console.log(args); // it will return an object with oldState and newState, each of having a value of either of 'Connected' | 'Disconnected'
    // it will also return reason, either of 'invalidToken' | 'connectionIssue'
}
callAgentInstance.on('connectionStateChanged', connectionStateCallback);

Catatan

API ini disediakan sebagai pratinjau untuk pengembang dan mungkin berubah berdasarkan umpan balik yang kami terima. Jangan gunakan API ini di lingkungan produksi. Untuk menggunakan API ini, gunakan rilis beta azure Communication Services Calling Web SDK.

Perekaman cloud

Perekaman panggilan adalah fitur tambahan dari API Panggilan inti. Pertama-tama Anda perlu mengimpor fitur panggilan dari SDK Panggilan:

import { Features} from "@azure/communication-calling";

Kemudian Anda bisa mendapatkan objek API fitur perekaman dari instans panggilan:

const callRecordingApi = call.feature(Features.Recording);

Untuk memeriksa apakah panggilan sedang direkam, periksa isRecordingActive properti .callRecordingApi Hal ini mengembalikan Boolean.

const isRecordingActive = callRecordingApi.isRecordingActive;

Anda juga dapat berlangganan perubahan rekaman:

const isRecordingActiveChangedHandler = () => {
    console.log(callRecordingApi.isRecordingActive);
};

callRecordingApi.on('isRecordingActiveChanged', isRecordingActiveChangedHandler);

Anda bisa mendapatkan daftar rekaman dengan menggunakan recordings properti .callRecordingApi Ini mengembalikan RecordingInfo[], yang memiliki status rekaman cloud saat ini.

const recordings = callRecordingApi.recordings;

recordings.forEach(r => {
    console.log("State: ${r.state}");

Anda juga dapat berlangganan recordingsUpdated dan mendapatkan kumpulan rekaman yang diperbarui. Kejadian ini dipicu setiap kali ada pembaruan rekaman.

const cloudRecordingsUpdatedHandler = (args: { added: SDK.RecordingInfo[], removed: SDK.RecordingInfo[]}) => {
                        console.log('Recording started by: ');
                        args.added?.forEach(a => {
                            console.log('State: ${a.state}');
                        });

                        console.log('Recording stopped by: ');
                        args.removed?.forEach(r => {
                            console.log('State: ${r.state}');
                        });
                    };
callRecordingApi.on('recordingsUpdated', cloudRecordingsUpdatedHandler );

Pasang SDK

Temukan file build.gradle tingkat proyek Anda dan tambahkan mavenCentral() ke daftar repositori di bawah buildscript dan allprojects:

buildscript {
    repositories {
    ...
        mavenCentral()
    ...
    }
}
allprojects {
    repositories {
    ...
        mavenCentral()
    ...
    }
}

Kemudian, di file build.gradle tingkat modul Anda, tambahkan baris berikut ke bagian dependencies :

dependencies {
    ...
    implementation 'com.azure.android:azure-communication-calling:1.0.0'
    ...
}

Menginisialisasi objek yang diperlukan

Untuk membuat CallAgent instans, Anda harus memanggil createCallAgent metode pada CallClient instans. Panggilan ini secara asinkron mengembalikan objek instans CallAgent .

Metode ini createCallAgent mengambil CommunicationUserCredential sebagai argumen, yang merangkum token akses.

Untuk mengakses DeviceManager, Anda harus membuat instans terlebih callAgent dahulu. Kemudian Anda dapat menggunakan CallClient.getDeviceManager metode untuk mendapatkan DeviceManager.

String userToken = '<user token>';
CallClient callClient = new CallClient();
CommunicationTokenCredential tokenCredential = new CommunicationTokenCredential(userToken);
android.content.Context appContext = this.getApplicationContext(); // From within an activity, for instance
CallAgent callAgent = callClient.createCallAgent(appContext, tokenCredential).get();
DeviceManager deviceManager = callClient.getDeviceManager(appContext).get();

Untuk mengatur nama tampilan penelepon, gunakan metode alternatif ini:

String userToken = '<user token>';
CallClient callClient = new CallClient();
CommunicationTokenCredential tokenCredential = new CommunicationTokenCredential(userToken);
android.content.Context appContext = this.getApplicationContext(); // From within an activity, for instance
CallAgentOptions callAgentOptions = new CallAgentOptions();
callAgentOptions.setDisplayName("Alice Bob");
DeviceManager deviceManager = callClient.getDeviceManager(appContext).get();
CallAgent callAgent = callClient.createCallAgent(appContext, tokenCredential, callAgentOptions).get();

Merekam panggilan

Catatan

API ini disediakan sebagai pratinjau untuk pengembang dan mungkin berubah berdasarkan umpan balik yang kami terima. Jangan gunakan API ini di lingkungan produksi. Untuk menggunakan API ini, gunakan rilis beta Azure Communication Services Memanggil Android SDK.

Perekaman panggilan adalah fitur yang diperluas dari objek inti Call .

Peringatan

Hingga versi 1.1.0 dan rilis beta versi 1.1.0-beta.1 dari Azure Communication Services Memanggil Android SDK, isRecordingActive dan addOnIsRecordingActiveChangedListener merupakan bagian Call dari objek. Untuk rilis beta baru, API tersebut dipindahkan sebagai fitur yang diperluas dari Call.

Anda harus terlebih dahulu mendapatkan objek fitur perekaman:

RecordingCallFeature callRecordingFeature = call.feature(Features.RECORDING);

Kemudian, untuk memeriksa apakah panggilan sedang direkam, periksa properti isRecordingActive dari callRecordingFeature. Hal ini mengembalikan boolean.

boolean isRecordingActive = callRecordingFeature.isRecordingActive();

Anda juga dapat berlangganan perubahan rekaman:

private void handleCallOnIsRecordingChanged(PropertyChangedEvent args) {
  boolean isRecordingActive = callRecordingFeature.isRecordingActive();
}

callRecordingFeature.addOnIsRecordingActiveChangedListener(handleCallOnIsRecordingChanged);

Jika Anda ingin mulai merekam dari aplikasi, pertama-tama ikuti Gambaran umum perekaman panggilan untuk langkah-langkah menyiapkan perekaman panggilan.

Setelah menyiapkan perekaman panggilan di server, dari aplikasi Android, Anda perlu mendapatkan ServerCallId nilai dari panggilan lalu mengirimkannya ke server Anda untuk memulai proses perekaman. Anda dapat menemukan nilai dengan ServerCallId menggunakan getServerCallId() dari CallInfo kelas . Anda dapat menemukan CallInfo kelas di objek kelas dengan menggunakan getInfo().

try {
    String serverCallId = call.getInfo().getServerCallId().get();
    // Send serverCallId to your recording server to start the call recording.
} catch (ExecutionException | InterruptedException e) {

} catch (UnsupportedOperationException unsupportedOperationException) {

}

Saat Anda mulai merekam dari server, peristiwa handleCallOnIsRecordingChanged dipicu dan nilainya callRecordingFeature.isRecordingActive() adalah true.

Sama seperti memulai perekaman panggilan, jika Anda ingin menghentikan perekaman panggilan, Anda perlu mendapatkan ServerCallId dan mengirimnya ke server perekaman Anda sehingga dapat menghentikan perekaman:

try {
    String serverCallId = call.getInfo().getServerCallId().get();
    // Send serverCallId to your recording server to stop the call recording.
} catch (ExecutionException | InterruptedException e) {

} catch (UnsupportedOperationException unsupportedOperationException) {

}

Ketika Anda berhenti merekam dari server, peristiwa handleCallOnIsRecordingChanged dipicu dan nilainya callRecordingFeature.isRecordingActive() adalah false.

Siapkan sistem Anda

Buat proyek Xcode

Di Xcode, buat proyek iOS baru dan pilih templat Aplikasi Tampilan Tunggal. Mulai cepat ini menggunakan kerangka kerja SwiftUI, jadi Anda harus mengatur Bahasa ke Swift dan mengatur Antarmuka ke SwiftUI.

Anda tidak akan membuat pengujian selama mulai cepat ini. Jangan ragu untuk menghapus kotak centang Sertakan Pengujian.

Cuplikan layar yang memperlihatkan jendela untuk membuat proyek dalam Xcode.

Pasang paket dan dependensi dengan menggunakan CocoaPods

  1. Buat Podfile untuk aplikasi Anda, seperti contoh ini:

    platform :ios, '13.0'
    use_frameworks!
    target 'AzureCommunicationCallingSample' do
        pod 'AzureCommunicationCalling', '~> 1.0.0'
    end
    
  2. Jalankan pod install.

  3. Buka .xcworkspace dengan menggunakan Xcode.

Minta akses ke mikrofon

Untuk mengakses mikrofon perangkat, Anda perlu memperbarui daftar properti informasi aplikasi dengan menggunakan NSMicrophoneUsageDescription. Anda mengatur nilai terkait ke string yang akan disertakan dalam dialog yang digunakan sistem untuk meminta akses dari pengguna.

Klik kanan entri Info.plist dari pohon proyek, lalu pilih Buka Sebagai>Kode Sumber. Tambahkan baris berikut ke bagian <dict> tingkat atas, lalu simpan file.

<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>

Menyiapkan kerangka kerja aplikasi

Buka file ContentView.swift proyek Anda. import Tambahkan deklarasi ke bagian atas file untuk mengimpor AzureCommunicationCalling pustaka. Selain itu, impor AVFoundation. Anda akan memerlukannya untuk permintaan izin audio dalam kode.

import AzureCommunicationCalling
import AVFoundation

Inisialisasi CallAgent

Untuk membuat CallAgent instans dari CallClient, Anda harus menggunakan callClient.createCallAgent metode yang secara asinkron mengembalikan CallAgent objek setelah diinisialisasi.

Untuk membuat klien panggilan, berikan CommunicationTokenCredential objek:

import AzureCommunication

let tokenString = "token_string"
var userCredential: CommunicationTokenCredential?
do {
    let options = CommunicationTokenRefreshOptions(initialToken: token, refreshProactively: true, tokenRefresher: self.fetchTokenSync)
    userCredential = try CommunicationTokenCredential(withOptions: options)
} catch {
    updates("Couldn't created Credential object", false)
    initializationDispatchGroup!.leave()
    return
}

// tokenProvider needs to be implemented by Contoso, which fetches a new token
public func fetchTokenSync(then onCompletion: TokenRefreshOnCompletion) {
    let newToken = self.tokenProvider!.fetchNewToken()
    onCompletion(newToken, nil)
}

Teruskan CommunicationTokenCredential objek yang Anda buat ke CallClient, dan atur nama tampilan:

self.callClient = CallClient()
let callAgentOptions = CallAgentOptions()
options.displayName = " iOS Azure Communication Services User"

self.callClient!.createCallAgent(userCredential: userCredential!,
    options: callAgentOptions) { (callAgent, error) in
        if error == nil {
            print("Create agent succeeded")
            self.callAgent = callAgent
        } else {
            print("Create agent failed")
        }
})

Merekam panggilan

Catatan

API ini disediakan sebagai pratinjau untuk pengembang dan mungkin berubah berdasarkan umpan balik yang kami terima. Jangan gunakan API ini di lingkungan produksi. Untuk menggunakan API ini, gunakan rilis beta Azure Communication Services Calling iOS SDK.

Perekaman panggilan adalah fitur yang diperluas dari objek inti Call .

Peringatan

Hingga versi 1.1.0 dan rilis beta versi 1.1.0-beta.1 dari Azure Communication Services Calling iOS SDK, isRecordingActive adalah bagian Call dari objek dan didChangeRecordingState merupakan bagian CallDelegate dari delegasi. Untuk rilis beta baru, API tersebut dipindahkan sebagai fitur yang diperluas dari Call.

Anda harus terlebih dahulu mendapatkan objek fitur perekaman:

let callRecordingFeature = call.feature(Features.recording)

Kemudian, untuk memeriksa apakah panggilan sedang direkam, periksa properti isRecordingActive dari callRecordingFeature. Hal ini mengembalikan Bool.

let isRecordingActive = callRecordingFeature.isRecordingActive;

Anda juga dapat berlangganan untuk merekam perubahan dengan menerapkan RecordingCallFeatureDelegate delegasi di kelas Anda dengan peristiwa didChangeRecordingState:

callRecordingFeature.delegate = self

// didChangeRecordingState is a member of RecordingCallFeatureDelegate
public func recordingCallFeature(_ recordingCallFeature: RecordingCallFeature, didChangeRecordingState args: PropertyChangedEventArgs) {
    let isRecordingActive = recordingFeature.isRecordingActive
}

Jika Anda ingin mulai merekam dari aplikasi, pertama-tama ikuti Gambaran umum perekaman panggilan untuk langkah-langkah menyiapkan perekaman panggilan.

Setelah menyiapkan perekaman panggilan di server, dari aplikasi iOS, Anda perlu mendapatkan ServerCallId nilai dari panggilan lalu mengirimkannya ke server Anda untuk memulai proses perekaman. Anda dapat menemukan nilai dengan ServerCallId menggunakan getServerCallId() dari CallInfo kelas . Anda dapat menemukan CallInfo kelas di objek kelas dengan menggunakan getInfo().

// Send serverCallId to your recording server to start the call recording.
let serverCallId = call.info.getServerCallId(){ (serverId, error) in }

Saat Anda mulai merekam dari server, peristiwa didChangeRecordingState dipicu dan nilainya recordingFeature.isRecordingActive adalah true.

Sama seperti memulai perekaman panggilan, jika Anda ingin menghentikan perekaman panggilan, Anda perlu mendapatkan ServerCallId dan mengirimnya ke server perekaman Anda sehingga dapat menghentikan perekaman:

// Send serverCallId to your recording server to stop the call recording.
let serverCallId = call.info.getServerCallId(){ (serverId, error) in }

Ketika Anda berhenti merekam dari server, peristiwa didChangeRecordingState dipicu dan nilainya recordingFeature.isRecordingActive adalah false.

Siapkan sistem Anda

Membuat proyek Visual Studio

Untuk aplikasi UWP, di Visual Studio 2022, buat proyek Aplikasi Kosong (Universal Windows) baru. Setelah Anda memasukkan nama proyek, jangan ragu untuk memilih Windows SDK apa pun yang lebih baru dari 10.0.17763.0.

Untuk aplikasi WinUI 3, buat proyek baru dengan templat Aplikasi Kosong, Dipaketkan (WinUI 3 di Desktop) untuk menyiapkan aplikasi WinUI 3 satu halaman. SDK Aplikasi Windows versi 1.3 atau yang lebih baru diperlukan.

Instal paket dan dependensi dengan menggunakan NuGet Package Manager

API dan pustaka SDK Panggilan tersedia untuk umum melalui paket NuGet.

Langkah-langkah berikut ini mencontohkan cara menemukan, mengunduh, dan menginstal paket NuGet SDK Panggilan:

  1. Buka Manajer Paket NuGet dengan memilih Alat>Pengelola>Paket NuGet Kelola Paket NuGet untuk Solusi.
  2. Pilih Telusuri, lalu masukkan Azure.Communication.Calling.WindowsClient di kotak pencarian.
  3. Pastikan bahwa kotak centang Sertakan prarilis dipilih.
  4. Azure.Communication.Calling.WindowsClient Pilih paket, lalu pilih Azure.Communication.Calling.WindowsClient 1.4.0-beta.1 atau versi yang lebih baru.
  5. Pilih kotak centang yang sesuai dengan proyek Communication Services di tab sisi kanan.
  6. Pilih tombol Instal.

Merekam panggilan

Perekaman panggilan adalah fitur yang diperluas dari objek inti Call . Anda harus terlebih dahulu mendapatkan objek fitur perekaman:

RecordingCallFeature recordingFeature = call.Features.Recording;

Kemudian, untuk memeriksa apakah panggilan sedang direkam, periksa properti IsRecordingActive dari recordingFeature. Hal ini mengembalikan boolean.

boolean isRecordingActive = recordingFeature.IsRecordingActive;

Anda juga dapat berlangganan perubahan rekaman:

private async void Call__OnIsRecordingActiveChanged(object sender, PropertyChangedEventArgs args)
  boolean isRecordingActive = recordingFeature.IsRecordingActive;
}

recordingFeature.IsRecordingActiveChanged += Call__OnIsRecordingActiveChanged;

Perekaman kepatuhan

Perekaman kepatuhan adalah perekaman yang didasarkan pada kebijakan Microsoft Teams. Anda dapat mengaktifkannya dengan menggunakan tutorial ini: Pengenalan rekaman berbasis kebijakan Teams untuk panggilan.

Perekaman berbasis kebijakan dimulai secara otomatis saat pengguna yang memiliki kebijakan bergabung dalam panggilan. Untuk mendapatkan pemberitahuan dari Azure Communication Services tentang perekaman, gunakan kode berikut:

const callRecordingApi = call.feature(Features.Recording);

const isComplianceRecordingActive = callRecordingApi.isRecordingActive;

const isComplianceRecordingActiveChangedHandler = () => {
    console.log(callRecordingApi.isRecordingActive);
};

callRecordingApi.on('isRecordingActiveChanged', isComplianceRecordingActiveChangedHandler);

Anda juga dapat menerapkan perekaman kepatuhan dengan menggunakan bot perekaman kustom. Lihat contoh GitHub.

Langkah berikutnya