Mengelola rekaman panggilan pada klien

Penting

Fungsionalitas yang dijelaskan dalam dokumen ini saat ini berada 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 merekam panggilan mereka yang dilakukan dengan Azure Communication Services. Di sini kita akan belajar bagaimana mengelola rekaman di sisi klien. Sebelum ini dapat bekerja, Anda perlu mengatur perekaman sisi server.

Prasyarat

Memasang SDK

Menggunakan perintah npm install untuk memasang panggilan Azure Communication Services dan SDK umum untuk JavaScript.

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

Menginisialisasi objek yang diperlukan

CallClient, instans diperlukan untuk sebagian besar operasi panggilan. Mari buat CallClient instans baru. Anda dapat mengonfigurasinya dengan opsi khusus seperti Pencatat instans.

Bila Anda memiliki instans CallClient, Anda dapat membuat instans CallAgent dengan memanggil metode createCallAgent pada instans CallClient. 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 wherever desired. To console, file, buffer, REST API, etc...
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()

Merekam panggilan

Catatan

API ini disediakan sebagai pratinjau untuk pengembang dan dapat berubah menurut umpan balik yang kami terima. Jangan gunakan API ini dalam lingkungan produksi. Untuk menggunakan api ini, silakan gunakan rilis 'beta' dari Azure Communication Services Calling Web SDK.

Perekaman panggilan adalah fitur tambahan dari Call API 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 callTransferApi = call.feature(Features.Recording);

Kemudian, untuk memeriksa apakah panggilan sedang direkam, periksa properti isRecordingActive dari 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);

Memasang SDK

Temukan build.gradle tingkat proyek Anda dan pastikan untuk menambahkan mavenCentral() ke daftar repositori di bawah buildscript dan allprojects

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

Kemudian, di level modul build.gradle tambahkan baris berikut ke bagian dependensi

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

Menginisialisasi objek yang diperlukan

Untuk membuat instans CallAgent, Anda harus memanggil metode createCallAgent pada instans CallClient. Ini secara asinkron mengembalikan objek instans CallAgent. Metode createCallAgent mengambil CommunicationUserCredential sebagai argumen, yang merangkum token akses. Untuk mengakses DeviceManager, instans callAgent harus dibuat terlebih dahulu, kemudian Anda dapat menggunakan metode CallClient.getDeviceManager 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

Peringatan

Hingga versi 1.1.0 dan rilis beta versi 1.1.0-beta.1 dari Azure Communication Services Calling Android SDK memiliki isRecordingActive dan addOnIsRecordingActiveChangedListener merupakan bagian Call dari objek . Untuk rilis beta baru, API tersebut telah dipindahkan sebagai fitur perluasan Call seperti yang dijelaskan berikut.

Catatan

API ini disediakan sebagai pratinjau untuk pengembang dan dapat berubah menurut umpan balik yang kami terima. Jangan gunakan API ini dalam lingkungan produksi. Untuk menggunakan api ini, silakan gunakan rilis 'beta' dari Azure Communication Services Memanggil Android SDK

Perekaman panggilan adalah fitur yang diperluas dari objek inti 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 Anda, ikuti terlebih dahulu Ikhtisar Perekaman Panggilan untuk langkah-langkah menyiapkan perekaman panggilan.

Setelah Anda memiliki pengaturan perekaman panggilan di server Anda, dari aplikasi Android Anda, Anda perlu mendapatkan nilai ServerCallId dari panggilan dan kemudian mengirimkannya ke server Anda untuk memulai proses perekaman. Nilai ServerCallId dapat ditemukan menggunakan getServerCallId() dari kelas CallInfo, yang dapat ditemukan di objek kelas 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) {

}

Jika rekaman dimulai dari server, peristiwa handleCallOnIsRecordingChanged akan dipicu dan nilai callRecordingFeature.isRecordingActive() akan berupa true.

Seperti halnya memulai rekaman panggilan, jika ingin menghentikan rekaman panggilan, Anda harus mendapatkan ServerCallId dan mengirimkannya ke server rekaman Anda agar rekaman panggilan dapat dihentikan.

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) {

}

Jika rekaman dihentikan dari server, peristiwa handleCallOnIsRecordingChanged akan dipicu dan nilai callRecordingFeature.isRecordingActive() akan berupa false.

Siapkan sistem Anda

Buat proyek Xcode

Di Xcode, buat proyek iOS baru dan pilih templat Single View App. Tutorial ini menggunakan kerangka kerja SwiftUI, jadi Anda harus mengatur Bahasa pemrograman ke Swift dan Antarmuka Pengguna ke SwiftUI.

Anda tidak akan membuat tes unit selama proses mulai cepat ini. Jangan ragu untuk menghapus kotak teks Sertakan Tes Unit dan Sertakan Tes UI.

Screenshot that shows the window for creating a project within Xcode.

Menginstal paket dan dependensi dengan CocoaPods

  1. Buat Podfile untuk aplikasi Anda, seperti ini:

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

  3. Buka .xcworkspace dengan Xcode.

Meminta akses ke mikrofon

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

Klik kanan Info.plist entri pohon proyek dan 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>

Siapkan kerangka kerja aplikasi

Buka file ContentView.swift proyek Anda dan tambahkan import deklarasi ke bagian atas file untuk diimpor ke 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, Anda harus meneruskan 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)
}

Berikan 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

Peringatan

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

Catatan

API ini disediakan sebagai pratinjau untuk pengembang dan dapat berubah menurut umpan balik yang kami terima. Jangan gunakan API ini dalam lingkungan produksi. Untuk menggunakan api ini, silakan gunakan rilis 'beta' Azure Communication Services Memanggil iOS SDK

Perekaman panggilan adalah fitur yang diperluas dari objek inti 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 perubahan rekaman dengan menerapkan delegasi RecordingCallFeatureDelegate 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, ikuti terlebih dahulu Ringkasan Rekaman Panggilan untuk langkah-langkah penyiapan rekaman panggilan.

Setelah rekaman panggilan disiapkan di server Anda, dari aplikasi iOS, Anda harus mendapatkan nilai ServerCallId dari panggilan, lalu mengirimkannya ke server Anda untuk memulai proses rekaman. Nilai ServerCallId dapat ditemukan menggunakan getServerCallId() dari kelas CallInfo, yang dapat ditemukan di objek kelas menggunakan getInfo().

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

Jika rekaman dimulai dari server, peristiwa didChangeRecordingState akan dipicu dan nilai recordingFeature.isRecordingActive akan berupa true.

Seperti halnya memulai rekaman panggilan, jika ingin menghentikan rekaman panggilan, Anda harus mendapatkan ServerCallId dan mengirimkannya ke server rekaman Anda agar rekaman panggilan dapat dihentikan.

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

Jika rekaman dihentikan dari server, peristiwa didChangeRecordingState akan dipicu dan nilai recordingFeature.isRecordingActive akan berupa false.

Langkah berikutnya