기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
프로듀서 콜백 SDK
Amazon Kinesis Video Streams SDK Producer의 클래스와 메서드는 자체 프로세스를 유지 관리하지 않습니다. 그 대신, 수신 함수 호출 및 이벤트를 사용하여 애플리케이션과 통신할 콜백을 예약합니다.
애플리케이션이 다음과 상호 작용하는 데 사용할 수 있는 두 가지 콜백 패턴이 있습니다. SDK
-
CallbackProvider
— 이 객체는 플랫폼 독립적 code () PIC 구성 요소의 모든 콜백을 애플리케이션에 노출합니다. 이 패턴을 사용하면 모든 기능을 사용할 수 있지만 구현시 C++ 계층의 모든 공개 API 메서드와 서명을 처리해야 한다는 의미이기도 합니다. -
StreamCallbackProvider및 ClientCallbackProvider — 이러한 객체는 스트림별 콜백과 클라이언트별 콜백을 노출하고 의 C++ 계층은 나머지 콜백을 노출합니다. SDK 이는 프로듀서와 상호작용할 때 선호되는 콜백 패턴입니다. SDK
다음 다이어그램은 콜백 객체의 객체 모델을 보여줍니다.
위 다이어그램에서는 에서 DefaultCallbackProvider
파생되며 CallbackProvider
(의 모든 콜백이 표시됨) 및 를 포함합니다. PIC StreamCallbackProvider
ClientCallbackProvider
이 주제는 다음 섹션을 포함하고 있습니다.
ClientCallbackProvider
ClientCallbackProvider
객체는 클라이언트 수준 콜백 함수를 공개합니다. 이 함수의 세부 정보는 ClientCallbacks 구조 단원에서 설명합니다.
콜백 메서드:
-
getClientReadyCallback
— 클라이언트의 준비 상태를 보고합니다. -
getStorageOverflowPressureCallback
— 스토리지 오버플로 또는 압력을 보고합니다. 스토리지 활용도가 전체 스토리지 크기의 5%인STORAGE_PRESSURE_NOTIFICATION_THRESHOLD
값 밑으로 떨어지면 이 콜백이 호출됩니다. 자세한 내용은 StorageInfo 단원을 참조하십시오.
StreamCallbackProvider
StreamCallbackProvider
객체는 스트림 수준 콜백 함수를 공개합니다.
콜백 메서드:
-
getDroppedFragmentReportCallback
: 드롭된 조각을 보고합니다. -
getDroppedFrameReportCallback
— 프레임 드롭을 보고합니다. -
getFragmentAckReceivedCallback
— 스트림에 대해 ACK 프래그먼트가 수신되었음을 보고합니다. -
getStreamClosedCallback
— 스트림이 종료된 상태를 보고합니다. -
getStreamConnectionStaleCallback
— 부실 연결 상태를 보고합니다. 이 상태에서는 생산자가 서비스에 데이터를 보내고 있지만 승인을 받지 못합니다. -
getStreamDataAvailableCallback
— 스트림에서 데이터를 사용할 수 있다고 보고합니다. -
getStreamErrorReportCallback
— 스트림 오류 상태를 보고합니다. -
getStreamLatencyPressureCallback
— 누적 버퍼 크기가max_latency
값보다 큰 경우인 스트림 지연 시간을 보고합니다. 자세한 내용은 StreamDefinition/StreamInfo 단원을 참조하십시오. -
getStreamReadyCallback
: —스트림 준비 상태를 보고합니다. -
getStreamUnderflowReportCallback
— 스트림 언더플로우 상태를 보고합니다. 이 함수는 현재 사용되지 않으며 나중에 사용할 수 있도록 예약되어 있습니다.
의 소스 코드는 StreamCallbackProvider
StreamCallbackProvider.h를 참조하십시오.
ClientCallbacks 구조
이 ClientCallbacks
구조체에는 특정 이벤트가 발생할 때 PIC 호출하는 콜백 함수 진입점이 포함됩니다. 구조에는 CALLBACKS_CURRENT_VERSION
필드에 있는 버전 정보, 및 개별 콜백 함수를 통해 반환되는 사용자 정의 데이터에 대한 customData
필드도 포함됩니다.
다음 코드 예와 같이, 클라이언트 애플리케이션은 this
포인터를 custom_data
필드에 사용하여 멤버 함수를 정적 ClientCallback
함수에 실행 시간에 매핑합니다.
STATUS TestStreamCallbackProvider::streamClosedHandler(UINT64 custom_data, STREAM_HANDLE stream_handle, UINT64 stream_upload_handle) { LOG_INFO("Reporting stream stopped."); TestStreamCallbackProvider* streamCallbackProvider = reinterpret_cast<TestStreamCallbackProvider*> (custom_data); streamCallbackProvider->streamClosedHandler(...);
이벤트 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
함수 | 설명 | 형식 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CreateDeviceFunc |
백엔드에서 현재 구현되지 않습니다. Java 또는 C++에서 호출되면 이 호출이 실패합니다. 다른 클라이언트는 플랫폼별 초기화를 수행합니다. | 백엔드 API | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CreateStreamFunc |
스트림이 생성될 때 호출됩니다. | 백엔드 API | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DescribeStreamFunc |
DescribeStream 이 호출될 때 호출됩니다. |
백엔드 API | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetStreamingEndpointFunc |
GetStreamingEndpoint 이 호출될 때 호출됩니다. |
백엔드 API | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetStreamingTokenFunc |
GetStreamingToken 이 호출될 때 호출됩니다. |
백엔드 API | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PutStreamFunc |
PutStream 이 호출될 때 호출됩니다. |
백엔드 API | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TagResourceFunc |
TagResource 이 호출될 때 호출됩니다. |
백엔드 API | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CreateMutexFunc |
동기화 뮤텍스를 생성합니다. | 동기화 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
FreeMutexFunc |
뮤텍스를 비웁니다. | 동기화 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LockMutexFunc |
동기화 뮤텍스를 잠급니다. | 동기화 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TryLockMutexFunc |
뮤텍스를 잠그려고 시도합니다. 현재 구현되지 않습니다. | 동기화 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
UnlockMutexFunc |
뮤텍스 잠금을 해제합니다. | 동기화 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ClientReadyFunc |
클라이언트가 준비 상태에 들어갈 때 호출됩니다. | Notification | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DroppedFrameReportFunc |
프레임이 드롭될 때 보고합니다. | Notification | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DroppedFragmentReportFunc |
조각이 드롭될 때 보고합니다. 이 함수는 현재 사용되지 않으며 나중에 사용할 수 있도록 예약되어 있습니다. | Notification | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
FragmentAckReceivedFunc |
프래그먼트 ACK (버퍼링, 수신, 지속, 오류) 가 수신될 때 호출됩니다. | Notification | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
StorageOverflowPressureFunc |
스토리지 활용도가 전체 스토리지 크기의 5%로 정의되는 STORAGE_PRESSURE_NOTIFICATION_THRESHOLD 값 밑으로 떨어지면 호출됩니다. |
Notification | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
StreamClosedFunc |
나머지 프레임의 마지막 비트가 스트리밍될 때 호출됩니다. | Notification | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
StreamConnectionStaleFunc |
스트림이 기한 경과 연결 상태에 들어갈 때 호출됩니다. 이 조건에서 생산자는 서비스에 데이터를 전송하지만 승인을 받지 않습니다. | Notification | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
StreamDataAvailableFunc |
스트림 데이터를 사용할 수 있을 때 호출됩니다. | Notification | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
StreamErrorReportFunc |
스트림 오류가 발생할 경우 호출됩니다. 이 경우 스트림이 PIC 자동으로 닫힙니다. | Notification | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
StreamLatencyPressureFunc |
스트림이 지연 시간 조건에 들어갈 때 호출됩니다. 이 조건은 누적된 버퍼 크기가 max_latency 값보다 큰 경우입니다. 자세한 내용은 StreamDefinition/StreamInfo 단원을 참조하십시오. |
Notification | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
StreamReadyFunc |
스트림이 준비 상태에 들어갈 때 호출됩니다. | Notification | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
StreamUnderflowReportFunc |
이 함수는 현재 사용되지 않으며 나중에 사용할 수 있도록 예약되어 있습니다. | Notification | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DeviceCertToTokenFunc |
연결 인증서를 토큰으로 반환합니다. | 플랫폼 통합 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetCurrentTimeFunc |
현재 시간을 반환합니다. | 플랫폼 통합 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetDeviceCertificateFunc |
디바이스 인증서를 반환합니다. 이 함수는 현재 사용되지 않으며 나중에 사용할 수 있도록 예약되어 있습니다. | 플랫폼 통합 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetDeviceFingerprintFunc |
디바이스 지문을 반환합니다. 이 함수는 현재 사용되지 않으며 나중에 사용할 수 있도록 예약되어 있습니다. | 플랫폼 통합 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetRandomNumberFunc |
0과 RAND_MAX 사이의 임의 숫자를 반환합니다. |
플랫폼 통합 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetSecurityTokenFunc |
API백엔드와 통신하는 함수에 전달된 보안 토큰을 반환합니다. 구현은 직렬화된 AccessKeyId , SecretKeyId 및 세션 토큰을 지정할 수 있습니다. |
플랫폼 통합 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LogPrintFunc |
태그와 로그 수준을 사용하여 텍스트 줄을 기록합니다. 자세한 내용은 PlatformUtils.h 단원을 참조하십시오. |
플랫폼 통합 |
위의 표에 있는 플랫폼 통합 함수의 경우 마지막 파라미터는 ServiceCallContext
구조이며, 이 구조에는 다음 필드가 있습니다.
-
version
: 구조의 버전입니다. -
callAfter
: 함수를 호출할 때까지의 절대 시간입니다. -
timeout
: 작업 제한 시간입니다(100나노초 단위). -
customData
: 다시 클라이언트에게 전달할 사용자 정의 값입니다. -
pAuthInfo
: 호출에 대한 자격 증명입니다. 자세한 내용은 다음(__AuthInfo
) 구조를 참조하십시오.
권한 부여 정보는 __AuthInfo
구조를 사용하여 제공되며, 이 구조는 직렬화된 자격 증명 또는 공급자별 인증 토큰일 수 있습니다. 이 구조에는 다음 필드가 있습니다.
-
version
:__AuthInfo
구조의 버전입니다. -
type
: 자격 증명의 유형(인증서 또는 보안 토큰)을 정의하는AUTH_INFO_TYPE
값입니다. -
data
: 인증 정보가 포함된 바이트 배열입니다. -
size
:data
파라미터의 크기입니다. -
expiration
: 100나노초 단위로 표시되는 자격 증명의 만료입니다.
스트리밍 재시도를 위한 콜백 구현
Kinesis 비디오 프로듀서는 콜백 함수를 통해 스트리밍 상태를 SDK 제공합니다. 스트리밍 중에 발생하는 일시적인 네트워크 문제를 복구하려면 다음 콜백 메커니즘을 구현하는 것이 좋습니다.
-
스트림 지연 압력 콜백 - 이 콜백 메커니즘은 스트림 지연 상황이 발생할 때 시작됩니다. SDK 이는 누적된 버퍼 크기가 _ 값보다 클 때 발생합니다. MAX LATENCY 스트림이 생성되면 스트리밍 애플리케이션은 MAX LATENCY _를 기본값인 60초로 설정합니다. 이 콜백의 일반적인 구현 방법은 연결을 재설정하는 것입니다. 필요에 따라 https://github.com/awslabs/amazon-kinesis-video-streamsproducer-sdk-cpp-/blob/master/ /src/source/ kinesis-video-c-producer .c에서
샘플 구현을 사용할 수 있습니다. StreamLatencyStateMachine 단, 네트워크 중단으로 인해 전송되지 않은 프레임을 보조 스토리지에 저장하여 백필할 수 있는 옵션은 없습니다. -
스트림 부실 콜백 - 이 콜백은 생산자가 Amazon Kinesis Data Streams 서비스 (업링크) 로 데이터를 보낼 수는 있지만 확인 메시지를 제때 (ACK버퍼링) 받을 수 없을 때 시작됩니다 (기본값은 60초). 네트워크 설정에 따라 스트림 지연 압력 콜백이나 스트림 지연 콜백 또는 둘 다 시작될 수 있습니다. 스트림 지연 시간 압력 콜백의 재시도 구현과 마찬가지로, 일반적인 구현 방법은 연결을 재설정하고 스트리밍을 위한 연결을 새로 시작하는 것입니다. 필요에 따라 https://github.com/awslabs/amazon-kinesis-video-streamsConnectionStaleStateMachine-producer-c/blob/master/src/source/
.c에서 샘플 구현을 사용할 수 있습니다. -
스트림 오류 콜백 - 이 콜백은 서비스 호출 SDK 중에 네트워크 연결에 제한 시간이 초과되거나 기타 오류가 발생하면 시작됩니다. KVS API
-
드롭된 프레임 콜백 - 이 콜백은 네트워크 속도가 느리거나 스트림 오류로 인해 스토리지 크기가 가득 차면 시작됩니다. 네트워크 속도로 인해 프레임이 손실되는 경우 네트워크 속도에 맞게 스토리지 크기를 늘리거나 비디오 프레임 크기를 줄이거나 프레임 속도를 줄일 수 있습니다.