클라이언트에서 통화 녹음/녹화 관리
Important
이 문서에 설명된 기능은 현재 공개 미리 보기로 제공됩니다. 이 미리 보기 버전은 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.
통화 녹음/녹화 를 사용하면 사용자가 Azure Communication Services를 사용하여 호출을 기록할 수 있습니다. 이 문서에서는 클라이언트 쪽에서 기록을 관리하는 방법을 알아봅니다. 시작하기 전에 서버 쪽에서 녹음/녹화를 설정해야 합니다.
필수 조건
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- 배포된 Communication Services 리소스. Communication Services 리소스 만들기
- 호출 클라이언트를 사용하도록 설정하는 사용자 액세스 토큰입니다. 자세한 내용은 액세스 토큰 만들기 및 관리를 참조하세요.
- 선택 사항: 애플리케이션에 음성 통화를 추가하는 빠른 시작 완료
SDK 설치
명령을 npm install
사용하여 JavaScript용 Azure Communication Services Common 및 Calling SDK를 설치합니다.
npm install @azure/communication-common --save
npm install @azure/communication-calling --save
필수 개체 초기화
CallClient
인스턴스는 대부분의 호출 작업에 필요합니다. 여기서는 새 CallClient
인스턴스를 만듭니다. 인스턴스와 같은 Logger
사용자 지정 옵션을 사용하여 구성할 수 있습니다.
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 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()
참고 항목
이 API는 개발자를 위한 미리 보기로 제공되며 받은 피드백에 따라 변경될 수 있습니다. 프로덕션 환경에서는 이 API를 사용하지 마세요. 이 API를 사용하려면 Azure Communication Services Calling Web SDK의 베타 릴리스를 사용합니다.
클라우드 녹음/녹화
통화 녹음/녹화는 핵심 통화 API의 확장 기능입니다. 먼저 통화 SDK에서 통화 기능을 가져와야 합니다.
import { Features} from "@azure/communication-calling";
그런 다음 호출 인스턴스에서 녹음 기능의 API 개체를 가져올 수 있습니다.
const callRecordingApi = call.feature(Features.Recording);
호출이 기록되고 있는지 검사 하려면 .의 isRecordingActive
callRecordingApi
속성을 검사합니다. Boolean
를 반환합니다.
const isRecordingActive = callRecordingApi.isRecordingActive;
변경 내용 기록을 구독할 수도 있습니다.
const isRecordingActiveChangedHandler = () => {
console.log(callRecordingApi.isRecordingActive);
};
callRecordingApi.on('isRecordingActiveChanged', isRecordingActiveChangedHandler);
의 속성을 callRecordingApi
사용하여 recordings
녹음/녹화 목록을 가져올 수 있습니다. 클라우드 기록의 현재 상태를 포함하는 반환 RecordingInfo[]
합니다.
const recordings = callRecordingApi.recordings;
recordings.forEach(r => {
console.log("State: ${r.state}");
업데이트된 녹음/녹화 컬렉션을 구독 recordingsUpdated
하고 가져올 수도 있습니다. 이 이벤트는 기록 업데이트가 있을 때마다 트리거됩니다.
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 );
SDK 설치
프로젝트 수준 build.gradle 파일을 찾아 아래 및 아래의 리포지 allprojects
buildscript
토리 목록에 추가 mavenCentral()
합니다.
buildscript {
repositories {
...
mavenCentral()
...
}
}
allprojects {
repositories {
...
mavenCentral()
...
}
}
그런 다음, 모듈 수준 build.gradle 파일에서 섹션에 다음 줄을 dependencies
추가합니다.
dependencies {
...
implementation 'com.azure.android:azure-communication-calling:1.0.0'
...
}
필요한 개체 초기화
인스턴스를 CallAgent
만들려면 인스턴스에서 메서드를 createCallAgent
호출해야 합니다 CallClient
. 이 호출은 인스턴스 개체를 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();
통화 녹음
참고 항목
이 API는 개발자를 위한 미리 보기로 제공되며 받은 피드백에 따라 변경될 수 있습니다. 프로덕션 환경에서는 이 API를 사용하지 마세요. 이 API를 사용하려면 Android SDK를 호출하는 Azure Communication Services의 베타 릴리스를 사용합니다.
통화 녹음/녹화는 핵심 Call
개체의 확장 기능입니다.
Warning
Android SDK isRecordingActive
addOnIsRecordingActiveChangedListener
를 호출하는 Azure Communication Services의 버전 1.1.0 및 베타 릴리스 버전 1.1.0-beta.1까지 이 개체의 Call
일부였습니다. 새 베타 릴리스의 경우 해당 API가 확장 기능 Call
으로 이동되었습니다.
먼저 레코딩 기능 개체를 가져와야 합니다.
RecordingCallFeature callRecordingFeature = call.feature(Features.RECORDING);
그런 다음 호출이 기록되고 있는지 검사 .isRecordingActive
callRecordingFeature
boolean
를 반환합니다.
boolean isRecordingActive = callRecordingFeature.isRecordingActive();
변경 내용 기록을 구독할 수도 있습니다.
private void handleCallOnIsRecordingChanged(PropertyChangedEvent args) {
boolean isRecordingActive = callRecordingFeature.isRecordingActive();
}
callRecordingFeature.addOnIsRecordingActiveChangedListener(handleCallOnIsRecordingChanged);
애플리케이션에서 녹음/녹화를 시작하려면 먼저 통화 녹음/녹화 개요에 따라 통화 녹음/녹화를 설정하는 단계를 수행합니다.
서버에서 통화 녹음/녹화를 설정한 후 Android 애플리케이션에서 통화에서 값을 가져온 ServerCallId
다음 서버에 보내 녹음/녹화 프로세스를 시작해야 합니다. 클래스에서 ServerCallId
CallInfo
사용하여 getServerCallId()
값을 찾을 수 있습니다. 를 사용하여 getInfo()
클래스 개체에서 클래스를 찾을 CallInfo
수 있습니다.
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로 설정해야 합니다.
이 빠른 시작 중에는 테스트를 만들지 않을 것입니다. 테스트 포함 검사 상자를 자유롭게 지웁니다.
CocoaPods를 사용하여 패키지 및 종속성 설치
다음 예제와 같이 애플리케이션에 대한 Podfile을 만듭니다.
platform :ios, '13.0' use_frameworks! target 'AzureCommunicationCallingSample' do pod 'AzureCommunicationCalling', '~> 1.0.0' end
pod install
를 실행합니다.Xcode를 사용하여 엽니다
.xcworkspace
.
마이크에 대한 액세스 요청
디바이스의 마이크에 액세스하려면 을 사용하여 NSMicrophoneUsageDescription
앱의 정보 속성 목록을 업데이트해야 합니다. 연결된 값을 시스템에서 사용자의 액세스를 요청하는 데 사용하는 대화 상자에 포함될 문자열로 설정합니다.
프로젝트 트리의 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")
}
})
통화 녹음
참고 항목
이 API는 개발자를 위한 미리 보기로 제공되며 받은 피드백에 따라 변경될 수 있습니다. 프로덕션 환경에서는 이 API를 사용하지 마세요. 이 API를 사용하려면 Azure Communication Services Calling iOS SDK의 베타 릴리스를 사용합니다.
통화 녹음/녹화는 핵심 Call
개체의 확장 기능입니다.
Warning
iOS SDK isRecordingActive
를 호출하는 Azure Communication Services의 버전 1.1.0 및 베타 릴리스 버전 1.1.0-beta.1까지 개체의 Call
일부였으며 didChangeRecordingState
대리자의 CallDelegate
일부였습니다. 새 베타 릴리스의 경우 해당 API가 확장 기능 Call
으로 이동되었습니다.
먼저 레코딩 기능 개체를 가져와야 합니다.
let callRecordingFeature = call.feature(Features.recording)
그런 다음 호출이 기록되고 있는지 검사 .isRecordingActive
callRecordingFeature
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
CallInfo
사용하여 getServerCallId()
값을 찾을 수 있습니다. 를 사용하여 getInfo()
클래스 개체에서 클래스를 찾을 CallInfo
수 있습니다.
// 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
.
시스템 설정
Visual Studio 프로젝트 만들기
UWP 앱의 경우 Visual Studio 2022에서 새 빈 앱(유니버설 Windows) 프로젝트를 만듭니다. 프로젝트 이름을 입력한 후에는 10.0.17763.0 이후의 Windows SDK를 자유롭게 선택할 수 있습니다.
WinUI 3 앱의 경우 빈 앱 패키지(데스크톱의 WinUI 3) 템플릿을 사용하여 새 프로젝트를 만들어 단일 페이지 WinUI 3 앱을 설정합니다. Windows 앱 SDK 버전 1.3 이상이 필요합니다.
NuGet 패키지 관리자 사용하여 패키지 및 종속성 설치
Calling SDK API와 라이브러리는 NuGet 패키지를 통해 공개적으로 사용할 수 있습니다.
다음 단계에서는 통화 SDK NuGet 패키지를 찾고, 다운로드하고, 설치하는 방법을 예시합니다.
- 도구 NuGet 패키지 관리자Manage NuGet Packages for Solution을> 선택하여 NuGet 패키지 관리자> 엽니다.
- 찾아보기를 선택한 다음 검색 상자에 입력
Azure.Communication.Calling.WindowsClient
합니다. - 시험판 포함 검사 상자가 선택되어 있는지 확인합니다.
Azure.Communication.Calling.WindowsClient
패키지를 선택한 다음 1.4.0-beta.1 이상 버전을 선택합니다Azure.Communication.Calling.WindowsClient
.- 오른쪽 탭에서 Communication Services 프로젝트에 해당하는 검사box를 선택합니다.
- 설치 단추를 선택합니다.
통화 녹음
통화 녹음/녹화는 핵심 Call
개체의 확장 기능입니다. 먼저 레코딩 기능 개체를 가져와야 합니다.
RecordingCallFeature recordingFeature = call.Features.Recording;
그런 다음 호출이 기록되고 있는지 검사 .IsRecordingActive
recordingFeature
boolean
를 반환합니다.
boolean isRecordingActive = recordingFeature.IsRecordingActive;
변경 내용 기록을 구독할 수도 있습니다.
private async void Call__OnIsRecordingActiveChanged(object sender, PropertyChangedEventArgs args)
boolean isRecordingActive = recordingFeature.IsRecordingActive;
}
recordingFeature.IsRecordingActiveChanged += Call__OnIsRecordingActiveChanged;
규정 준수 기록
규정 준수 기록은 Microsoft Teams 정책에 따라 기록됩니다. 통화에 대한 Teams 정책 기반 녹음/녹화 소개 자습서 를 사용하여 사용하도록 설정할 수 있습니다.
정책 기반 녹음/녹화는 정책이 있는 사용자가 통화에 참가할 때 자동으로 시작됩니다. Azure Communication Services에서 기록에 대한 알림을 받으려면 다음 코드를 사용합니다.
const callRecordingApi = call.feature(Features.Recording);
const isComplianceRecordingActive = callRecordingApi.isRecordingActive;
const isComplianceRecordingActiveChangedHandler = () => {
console.log(callRecordingApi.isRecordingActive);
};
callRecordingApi.on('isRecordingActiveChanged', isComplianceRecordingActiveChangedHandler);
사용자 지정 기록 봇을 사용하여 규정 준수 기록을 구현할 수도 있습니다. GitHub 예제를 참조하세요.