클라이언트에서 통화 녹음/녹화 관리

Important

이 문서에 설명된 기능은 현재 공개 미리 보기로 제공됩니다. 이 미리 보기 버전은 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.

통화 녹음/녹화 를 사용하면 사용자가 Azure 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);

호출이 기록되고 있는지 검사 하려면 .의 isRecordingActivecallRecordingApi속성을 검사합니다. 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 파일을 찾아 아래 및 아래의 리포지 allprojectsbuildscript 토리 목록에 추가 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 isRecordingActiveaddOnIsRecordingActiveChangedListener 를 호출하는 Azure Communication Services의 버전 1.1.0 및 베타 릴리스 버전 1.1.0-beta.1까지 이 개체의 Call 일부였습니다. 새 베타 릴리스의 경우 해당 API가 확장 기능 Call으로 이동되었습니다.

먼저 레코딩 기능 개체를 가져와야 합니다.

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

그런 다음 호출이 기록되고 있는지 검사 .isRecordingActivecallRecordingFeature boolean를 반환합니다.

boolean isRecordingActive = callRecordingFeature.isRecordingActive();

변경 내용 기록을 구독할 수도 있습니다.

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

callRecordingFeature.addOnIsRecordingActiveChangedListener(handleCallOnIsRecordingChanged);

애플리케이션에서 녹음/녹화를 시작하려면 먼저 통화 녹음/녹화 개요에 따라 통화 녹음/녹화를 설정하는 단계를 수행합니다.

서버에서 통화 녹음/녹화를 설정한 후 Android 애플리케이션에서 통화에서 값을 가져온 ServerCallId 다음 서버에 보내 녹음/녹화 프로세스를 시작해야 합니다. 클래스에서 ServerCallIdCallInfo 사용하여 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설정해야 합니다.

이 빠른 시작 중에는 테스트를 만들지 않을 것입니다. 테스트 포함 검사 상자를 자유롭게 지웁니다.

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

CocoaPods를 사용하여 패키지 및 종속성 설치

  1. 다음 예제와 같이 애플리케이션에 대한 Podfile을 만듭니다.

    platform :ios, '13.0'
    use_frameworks!
    target 'AzureCommunicationCallingSample' do
        pod 'AzureCommunicationCalling', '~> 1.0.0'
    end
    
  2. pod install를 실행합니다.

  3. 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)
}

만든 개체를 CommunicationTokenCredentialCallClient전달하고 표시 이름을 설정합니다.

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)

그런 다음 호출이 기록되고 있는지 검사 .isRecordingActivecallRecordingFeature 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 다음 서버로 보내 녹음/녹화 프로세스를 시작해야 합니다. 클래스에서 ServerCallIdCallInfo 사용하여 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 패키지를 찾고, 다운로드하고, 설치하는 방법을 예시합니다.

  1. 도구 NuGet 패키지 관리자Manage NuGet Packages for Solution을> 선택하여 NuGet 패키지 관리자> 엽니다.
  2. 찾아보기를 선택한 다음 검색 상자에 입력 Azure.Communication.Calling.WindowsClient 합니다.
  3. 시험판 포함 검사 상자가 선택되어 있는지 확인합니다.
  4. Azure.Communication.Calling.WindowsClient 패키지를 선택한 다음 1.4.0-beta.1 이상 버전을 선택합니다Azure.Communication.Calling.WindowsClient.
  5. 오른쪽 탭에서 Communication Services 프로젝트에 해당하는 검사box를 선택합니다.
  6. 설치 단추를 선택합니다.

통화 녹음

통화 녹음/녹화는 핵심 Call 개체의 확장 기능입니다. 먼저 레코딩 기능 개체를 가져와야 합니다.

RecordingCallFeature recordingFeature = call.Features.Recording;

그런 다음 호출이 기록되고 있는지 검사 .IsRecordingActiverecordingFeature 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 예제를 참조하세요.

다음 단계