Kinesis Video Streams 데이터 모델 - Amazon Kinesis Video Streams

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Kinesis Video Streams 데이터 모델

생산자 라이브러리스트림 구문 분석기 라이브러리가 비디오 데이터와 함께 정보를 포함하는 것을 지원하는 형식으로 비디오 데이터를 전송하고 수신합니다. 이 형식은 Matroska(MKV) 사양을 기반으로 합니다.

MKV 형식은 미디어 데이터에 적용되는 공개 사양입니다. Amazon Kinesis Video Streams 개발자 안내서의 모든 라이브러리 및 코드 예제는 MKV 형식으로 데이터를 보내거나 받습니다.

StreamDefinitionFrame 유형을 Kinesis 비디오 스트림 프로듀서 라이브러리 사용하여 MKV 스트림 헤더, 프레임 헤더 및 프레임 데이터를 생성합니다.

전체 MKV 사양에 관한 내용은 Matroska 사양을 참조하십시오.

다음 단원에서는 C++ 생산자 라이브러리에 의해 생성되는 MKV 형식 데이터의 구성 요소를 설명합니다.

스트림 헤더 요소

다음과 같은 MKV 헤더 요소는 StreamDefinition에 의해 사용됩니다(StreamDefinition.h에 정의되어 있음).

Element Description 일반적인 값
stream_name Kinesis 비디오 스트림의 이름에 해당합니다. my-stream
retention_period Kinesis Video Streams가 스트림 데이터를 유지하는 기간 (시간) 입니다. 데이터를 보존하지 않는 0 스트림에 대해 지정하십시오. 24
태그 사용자 데이터의 키-값 모음입니다. 이 데이터는 AWS Management Console에 표시되며, 클라이언트 애플리케이션이 읽어 필터링하거나 스트림에 관한 정보를 얻을 수 있습니다.
kms_key_id 사용자 정의 AWS KMS 키가 있는 경우 스트림의 데이터를 암호화하는 데 사용자 정의 키가 사용됩니다. 없는 경우 Kinesis에서 제공한 키 () 로 데이터가 암호화됩니다. aws/kinesis-video 01234567-89ab-cdef-0123-456789ab
streaming_type 현재 유효한 유일한 스트리밍은 STREAMING_TYPE_REALTIME입니다. STREAMING_TYPE_REALTIME
content_type 사용자 정의 콘텐츠 유형입니다. 콘솔에서 재생할 비디오 데이터 스트리밍의 경우 콘텐츠 유형이 video/h264이어야 합니다. video/h264
max_latency 이 값은 현재 사용되지 않으므로 0으로 설정해야 합니다. 0
fragment_duration 이는 조각 길이의 추정치로서 최적화에 사용됩니다. 실제 조각 지속 시간은 스트리밍 데이터에 의해 결정됩니다. 2
timecode_scale

프레임 타임스탬프가 사용하는 스케일을 나타냅니다. 기본값은 1밀리초입니다. 0을 지정하면 기본값 1밀리초도 할당됩니다. 이 값은 100나노초에서 1초 사이일 수 있습니다.

자세한 내용은 Matroska TimecodeScale설명서를 참조하십시오.

key_frame_fragmentation true인 경우, 키프레임 수신 시 스트림이 새 클러스터를 시작합니다. true
frame_timecodes 경우 true Kinesis Video Streams는 수신된 프레임의 프레젠테이션 타임스탬프 (pts) 및 디코딩 타임스탬프 (dts) 값을 사용합니다. 경우 false Kinesis Video Streams는 프레임이 수신될 때 시스템에서 생성한 시간 값과 함께 해당 프레임을 스탬프합니다. true
absolute_fragment_time true인 경우 클러스터 타임코드가 절대 시간(예: 생산자 시스템 시계의 값)을 사용하는 것으로 해석됩니다. false인 경우, 클러스터 타임코드가 스트림 시작 시간에 상대적인 것으로 해석됩니다. true
fragment_acks 경우 true Kinesis Video Streams가 데이터를 수신할 때 승인 (ACK) 이 전송됩니다. ACK는 KinesisVideoStreamFragmentAck 또는 KinesisVideoStreamParseFragmentAck 콜백을 사용하여 수신할 수 있습니다. true
restart_on_error 스트림 오류가 발생한 후 스트림이 전송을 다시 시작해야 하는지 여부를 나타냅니다. true
nal_adaptation_flags 콘텐츠에 NAL(Network Abstraction Layer) 적응 또는 코덱 프라이빗 데이터가 존재하는지를 나타냅니다. 유효한 플래그에는 NAL_ADAPTATION_ANNEXB_NALSNAL_ADAPTATION_ANNEXB_CPD_NALS가 있습니다. NAL_ADAPTATION_ANNEXB_NALS
frame_rate 콘텐츠 프레임 속도의 추정치입니다. 이 값은 최적화에 사용되며, 실제 프레임 속도는 수신 데이터의 속도에 의해 결정됩니다. 0을 지정하면 기본값 24가 할당됩니다. 24
avg_bandwidth_bps 콘텐츠 대역폭의 추정치 (Mbps). 이 값은 최적화에 사용되며, 실제 속도는 수신 데이터의 대역폭에 따라 결정됩니다. 예를 들어, 25FPS로 실행되는 720p 해상도 비디오 스트림의 경우 평균 대역폭을 5Mbps로 예상할 수 있습니다. 5
buffer_duration 콘텐츠가 생산자에서 버퍼링되는 기간입니다. 네트워크 지연 시간이 짧으면 이 값을 줄일 수 있습니다. 네트워크 지연 시간이 긴 경우 이 값을 늘리면 더 작은 버퍼에 프레임을 넣는 할당이 실패하여 프레임이 전송되기 전에 삭제되는 것을 방지할 수 있습니다.
replay_duration 연결이 끊긴 경우 비디오 데이터 스트림이 “되감기”되는 시간입니다. 연결 끊김으로 인한 프레임 손실이 우려되지 않는 경우 이 값은 0이 될 수 있습니다. 사용 중인 응용 프로그램에서 중복 프레임을 제거할 수 있는 경우 이 값을 높일 수 있습니다. 이 값은 버퍼 지속 시간보다 작아야 합니다. 그렇지 않으면 버퍼 지속 시간이 사용됩니다.
connection_staleness 수신 데이터가 없을 경우 연결이 유지되는 기간입니다.
codec_id 콘텐츠에 사용되는 코덱입니다. 자세한 내용은 Matroska 사양의 CodecID를 참조하십시오. V_MPEG2
track_name 사용자가 정의하는 트랙 이름입니다. my_track
codecPrivateData 프레임 데이터를 디코딩하는 목적으로 사용되며 인코더에 의해 제공되는 데이터(예: 프레임 픽셀의 높이 및 폭)로서, 다수의 다운스트림 소비자가 필요로 합니다. C++ 생산자 라이브러리에서는 MkvStatics.cppgMkvTrackVideoBits 어레이에 프레임의 픽셀 폭과 높이가 포함되어 있습니다.
codecPrivateData크기 codecPrivateData 파라미터에 있는 데이터의 크기입니다.
track_type 스트림에 대한 트랙의 유형입니다. MKV_TRACK_INFO_TYPE_AUDIO 또는 MKV_TRACK_INFO_TYPE_VIDEO
segment_uuid 사용자 정의 세그먼트 uuid(16바이트)입니다.
default_track_id 트랙에 대한 고유한 0이 아닌 숫자입니다. 1

스트림 트랙 데이터

다음과 같은 MKV 트랙 요소는 StreamDefinition에 의해 사용됩니다(StreamDefinition.h에 정의되어 있음).

Element Description 일반적인 값
track_name 사용자 정의 트랙 이름입니다. 예를 들어, 오디오 트랙의 경우 "audio"입니다. audio
codec_id 트랙에 대한 코덱 ID입니다. 예를 들어, 오디오 트랙의 경우 "A_AAC"입니다. A_AAC
cpd 프레임 데이터의 디코딩에 사용되는, 인코더에서 제공하는 데이터입니다. 이 데이터에는 다수의 다운스트림 소비자가 필요로 하는 프레임 픽셀의 폭 및 높이가 포함될 수 있습니다. C++ 프로듀서 MkvStatics 라이브러리에서.cpp의 gMkvTrack VideoBits 배열에는 프레임의 픽셀 너비와 높이가 포함됩니다.
cpd_size 파라미터의 데이터 크기. codecPrivateData
track_type 트랙의 유형입니다. 예를 들어, 오디오의 경우 MKV_TRACK_INFO_TYPE_AUDIO의 열거 값을 사용할 수 있습니다. MKV_TRACK_INFO_TYPE_AUDIO

프레임 헤더 요소

Frame은 다음 MKV 헤더 요소를 사용합니다(KinesisVideoPic 패키지의 mkvgen/Include.h에 정의).

  • 프레임 인덱스: 단순 증가 값.

  • 플래그: 프레임의 유형 유효한 값은 다음과 같습니다.

    • FRAME_FLAGS_NONE

    • FRAME_FLAG_KEY_FRAME: key_frame_fragmentation가 스트림에 설정되어 있는 경우, 키 프레임이 새 조각을 시작합니다.

    • FRAME_FLAG_DISCARDABLE_FRAME: 디코딩이 느린 경우 이 프레임을 무시할 수 있음을 디코더에 알립니다.

    • FRAME_FLAG_INVISIBLE_FRAME: 이 블록의 지속 시간은 0입니다.

  • 디코딩 타임스탬프: 이 프레임이 디코딩된 시점의 타임스탬프입니다. 이전 프레임이 이 프레임을 사용하여 디코딩하는 경우 이 타임스탬프가 이전 프레임보다 빠를 수 있습니다. 이 값은 조각의 시작을 기준으로 합니다.

  • 프레젠테이션 타임스탬프: 이 프레임이 표시되는 시점의 타임스탬프입니다. 이 값은 조각의 시작을 기준으로 합니다.

  • 지속 시간: 프레임의 재생 시간입니다.

  • 크기 프레임 데이터의 바이트 단위 크기입니다.

MKV 프레임 데이터

frame.frameData에 있는 데이터는 사용되는 인코딩 스키마에 따라 프레임에 대한 미디어 데이터만 포함할 수도 있고, 더 중첩된 헤더 정보를 포함할 수도 있습니다. 에 표시되려면 데이터가 H.264 코덱으로 인코딩되어야 AWS Management Console 하지만 Kinesis Video Streams는 어떤 형식으로든 시간 직렬화된 데이터 스트림을 수신할 수 있습니다.