클라이언트에서 통화 녹음/녹화 관리
중요
이 문서에 설명된 기능은 현재 공개 미리 보기 상태입니다. 이 미리 보기 버전은 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.
통화 녹음/녹화를 사용하면 사용자가 Azure Communication Services로 통화한 통화를 녹음/녹화할 수 있습니다. 여기서는 클라이언트 쪽에서 기록을 관리하는 방법을 알아봅니다. 이 작업을 수행하려면 서버 쪽 레코딩을 설정해야 합니다.
필수 구성 요소
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- 배포된 Communication Services 리소스. Communication Services 리소스를 만듭니다.
- 호출 클라이언트를 사용하도록 설정하는 사용자 액세스 토큰입니다. 자세한 내용은 액세스 토큰 만들기 및 관리를 참조하세요.
- 선택 사항: 빠른 시작을 완료하여 애플리케이션에 음성 통화를 추가합니다.
SDK 설치
npm install
명령을 사용하여 JavaScript용 Azure Communication Services 통화 SDK 및 일반 SDK를 설치합니다.
npm install @azure/communication-common --save
npm install @azure/communication-calling --save
필수 개체 초기화
CallClient 인스턴스는 대부분의 호출 작업에 필요합니다. 새 CallClient
인스턴스를 만들어 보겠습니다. 로거 인스턴스와 같은 사용자 지정 옵션을 사용하여 구성할 수 있습니다.
CallClient
인스턴스가 있으면 CallClient
인스턴스에서 createCallAgent
메서드를 호출하여 CallAgent
인스턴스를 만들 수 있습니다. 이 메서드는 CallAgent
인스턴스 개체를 비동기적으로 반환됩니다.
createCallAgent
메서드는 CommunicationTokenCredential
을 인수로 사용합니다. 사용자 액세스 토큰이 허용됩니다.
CallClient
인스턴스에서 getDeviceManager
메서드를 사용하여 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()
통화 녹음
참고
이 API는 개발자를 위한 미리 보기로 제공되며 수신한 피드백을 기반으로 변경될 수 있습니다. 프로덕션 환경에서 이 API를 사용하지 마세요. 이 API를 사용하려면 Azure Communication Services 통화 웹 SDK의 '베타' 릴리스를 사용하세요.
통화 레코딩은 핵심 Call
API의 확장 기능입니다. 먼저 통화 SDK에서 호출 기능을 가져와야 합니다.
import { Features} from "@azure/communication-calling";
그런 다음, 통화 인스턴스에서 레코딩 기능 API 개체를 가져올 수 있습니다.
const callRecordingApi = call.feature(Features.Recording);
그런 다음, 통화가 녹음되고 있는지 확인하려면 callRecordingApi
의 isRecordingActive
속성을 검사합니다. Boolean
를 반환합니다.
const isRecordingActive = callRecordingApi.isRecordingActive;
레코딩 변화를 구독할 수도 있습니다.
const isRecordingActiveChangedHandler = () => {
console.log(callRecordingApi.isRecordingActive);
};
callRecordingApi.on('isRecordingActiveChanged', isRecordingActiveChangedHandler);
SDK 설치
프로젝트 수준 build.gradle을 찾고, mavenCentral()
을 buildscript
및 allprojects
아래의 리포지토리 목록에 추가해야 합니다.
buildscript {
repositories {
...
mavenCentral()
...
}
}
allprojects {
repositories {
...
mavenCentral()
...
}
}
그런 다음, 모듈 수준 build.gradle에서 dependencies 섹션에 다음 줄을 추가합니다.
dependencies {
...
implementation 'com.azure.android:azure-communication-calling:1.0.0'
...
}
필요한 개체 초기화
CallAgent
인스턴스를 만들려면 CallClient
인스턴스에서 createCallAgent
메서드를 호출해야 합니다. 이렇게 하면 CallAgent
인스턴스 개체가 비동기적으로 반환됩니다.
createCallAgent
메서드는 CommunicationUserCredential
을 인수로 사용하여 액세스 토큰을 캡슐화합니다.
DeviceManager
에 액세스하려면 먼저 callAgent 인스턴스를 만든 다음, CallClient.getDeviceManager
메서드를 사용하여 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();
호출자의 표시 이름을 설정하려면 다음과 같은 대체 방법을 사용합니다.
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();
통화 녹음
경고
Azure Communication Services 호출 Android SDK의 버전 1.1.0 및 베타 릴리스 버전 1.1.0-beta.1까지는 isRecordingActive
및 addOnIsRecordingActiveChangedListener
가 Call
개체의 일부입니다. 새 베타 릴리스의 경우 해당 API는 아래 설명과 같이 Call
의 확장 기능으로 이동되었습니다.
참고
이 API는 개발자를 위한 미리 보기로 제공되며 수신한 피드백을 기반으로 변경될 수 있습니다. 프로덕션 환경에서 이 API를 사용하지 마세요. 이 API를 사용하려면 Azure Communication Services 통화 Android SDK의 '베타' 릴리스를 사용하세요.
통화 녹음/녹화는 핵심 Call
개체의 확장 기능입니다. 먼저 레코딩 기능 개체를 가져와야 합니다.
RecordingCallFeature callRecordingFeature = call.feature(Features.RECORDING);
그런 다음, 통화가 녹음되고 있는지 확인하려면 callRecordingFeature
의 isRecordingActive
속성을 검사합니다. boolean
를 반환합니다.
boolean isRecordingActive = callRecordingFeature.isRecordingActive();
레코딩 변화를 구독할 수도 있습니다.
private void handleCallOnIsRecordingChanged(PropertyChangedEvent args) {
boolean isRecordingActive = callRecordingFeature.isRecordingActive();
}
callRecordingFeature.addOnIsRecordingActiveChangedListener(handleCallOnIsRecordingChanged);
애플리케이션에서 녹음/녹화를 시작하려면 먼저 통화 녹음/녹화 개요에 따라 통화 녹음/녹화를 설정하는 단계를 따르세요.
서버에 통화 녹음/녹화를 설정하고 나면 Android 애플리케이션에서 통화에서 ServerCallId
값을 얻은 다음 이를 서버로 보내 녹음/녹화 프로세스를 시작해야 합니다. ServerCallId
값은 getInfo()
를 사용하여 클래스 개체에서 찾을 수 있는 CallInfo
클래스의 getServerCallId()
를 사용하여 찾을 수 있습니다.
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) {
}
서버에서 녹음/녹화가 시작되면 handleCallOnIsRecordingChanged
이벤트가 트리거되고 callRecordingFeature.isRecordingActive()
의 값은 true
가 됩니다.
통화 녹음/녹화를 시작하는 것과 마찬가지로 통화 녹음/녹화를 중지하려면 ServerCallId
를 가져와 녹음/녹화 서버로 보내 통화 녹음/녹화를 중지해야 합니다.
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) {
}
서버에서 녹음/녹화가 중지되면 handleCallOnIsRecordingChanged
이벤트가 트리거되고 callRecordingFeature.isRecordingActive()
값은 false
가 됩니다.
시스템 설정
Xcode 프로젝트 만들기
Xcode에서 새 iOS 프로젝트를 만들고 단일 보기 앱 템플릿을 선택합니다. 이 빠른 시작에서는 SwiftUI 프레임워크를 사용하므로 언어를 Swift로 설정하고 사용자 인터페이스를 SwiftUI로 설정해야 합니다.
이 빠른 시작 중에는 단위 테스트 또는 UI 테스트를 만들지 않습니다. 단위 테스트 포함 및 UI 테스트 포함 텍스트 상자 선택을 취소할 수 있습니다.
CocoaPods를 사용하여 패키지 및 종속성 설치
다음과 같이 애플리케이션에 대한 Podfile을 만듭니다.
platform :ios, '13.0' use_frameworks! target 'AzureCommunicationCallingSample' do pod 'AzureCommunicationCalling', '~> 1.0.0' end
pod install
을 실행합니다.Xcode에서
.xcworkspace
를 엽니다.
마이크에 대한 액세스 요청
디바이스의 마이크에 액세스하려면 앱의 정보 속성 목록을 NSMicrophoneUsageDescription
으로 업데이트해야 합니다. 연결된 값을 시스템이 사용자의 액세스를 요청하는 데 사용하는 대화 상자에 포함될 string
으로 설정합니다.
프로젝트 트리의 Info.plist
항목을 마우스 오른쪽 단추로 클릭하고 다음 형식으로 열기>소스 코드를 선택합니다. 최상위 <dict>
섹션에 다음 줄을 추가한 다음, 파일을 저장합니다.
<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>
앱 프레임워크 설정
프로젝트의 ContentView.swift 파일을 열고 파일 맨 위에 import
선언을 추가하여 AzureCommunicationCalling
라이브러리를 가져옵니다. 추가로 AVFoundation
을 가져옵니다. 코드에서 오디오 권한 요청에 필요합니다.
import AzureCommunicationCalling
import AVFoundation
CallAgent 초기화
CallAgent
에서 CallClient
인스턴스를 만들려면 초기화된 후 비동기적으로 callClient.createCallAgent
개체를 반환하는 CallAgent
메서드를 사용해야 합니다.
통화 클라이언트를 만들려면 CommunicationTokenCredential
개체를 전달해야 합니다.
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)
}
만든 CommunicationTokenCredential
개체를 CallClient
에 전달하고 표시 이름을 설정합니다.
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")
}
})
통화 녹음
경고
Azure Communication Services 통화 iOS SDK의 버전 1.1.0 및 베타 릴리스 버전 1.1.0-beta.1까지는 isRecordingActive
가 Call
개체의 일부이고 didChangeRecordingState
는 CallDelegate
대리자의 일부입니다. 새 베타 릴리스의 경우 해당 API는 아래 설명과 같이 Call
의 확장 기능으로 이동되었습니다.
참고
이 API는 개발자를 위한 미리 보기로 제공되며 수신한 피드백을 기반으로 변경될 수 있습니다. 프로덕션 환경에서 이 API를 사용하지 마세요. 이 API를 사용하려면 Azure Communication Services 통화 iOS SDK의 '베타' 릴리스를 사용하세요.
통화 녹음/녹화는 핵심 Call
개체의 확장 기능입니다. 먼저 레코딩 기능 개체를 가져와야 합니다.
let callRecordingFeature = call.feature(Features.recording)
그런 다음, 통화가 녹음되고 있는지 확인하려면 callRecordingFeature
의 isRecordingActive
속성을 검사합니다. Bool
를 반환합니다.
let isRecordingActive = callRecordingFeature.isRecordingActive;
이벤트 didChangeRecordingState
를 사용하여 클래스에 RecordingCallFeatureDelegate
대리자를 구현하여 변경 내용 기록을 구독할 수도 있습니다.
callRecordingFeature.delegate = self
// didChangeRecordingState is a member of RecordingCallFeatureDelegate
public func recordingCallFeature(_ recordingCallFeature: RecordingCallFeature, didChangeRecordingState args: PropertyChangedEventArgs) {
let isRecordingActive = recordingFeature.isRecordingActive
}
애플리케이션에서 녹음/녹화를 시작하려면 먼저 통화 녹음/녹화 개요에 따라 통화 녹음/녹화를 설정하는 단계를 따르세요.
서버에 통화 녹음/녹화를 설정하고 나면 iOS 애플리케이션에서 통화에서 ServerCallId
값을 얻은 다음, 이를 서버로 보내 녹음/녹화 프로세스를 시작해야 합니다. ServerCallId
값은 getInfo()
를 사용하여 클래스 개체에서 찾을 수 있는 CallInfo
클래스의 getServerCallId()
를 사용하여 찾을 수 있습니다.
// Send serverCallId to your recording server to start the call recording.
let serverCallId = call.info.getServerCallId(){ (serverId, error) in }
서버에서 녹음/녹화가 시작되면 didChangeRecordingState
이벤트가 트리거되고 recordingFeature.isRecordingActive
의 값은 true
가 됩니다.
통화 녹음/녹화를 시작하는 것과 마찬가지로 통화 녹음/녹화를 중지하려면 ServerCallId
를 가져와 녹음/녹화 서버로 보내 통화 녹음/녹화를 중지해야 합니다.
// Send serverCallId to your recording server to stop the call recording.
let serverCallId = call.info.getServerCallId(){ (serverId, error) in }
서버에서 녹음/녹화가 중지되면 didChangeRecordingState
이벤트가 트리거되고 recordingFeature.isRecordingActive
값은 false
가 됩니다.