

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

# Amazon Kinesis Video Streams 예제
<a name="examples"></a>

다음 코드 예제에서는 Kinesis Video Streams API를 사용하는 방법을 보여줍니다.

## 예: Kinesis Video Streams로 데이터 전송
<a name="examples-toc-producer"></a>
+ [예: Kinesis Video Streams 생산자 SDK GStreamer 플러그인 - kvssink](examples-gstreamer-plugin.md): GStreamer 대상으로 사용할 Kinesis Video Streams 생산자 SDK를 빌드하는 방법을 보여줍니다.
+ [Docker 컨테이너에서 GStreamer 요소 실행](examples-gstreamer-plugin.md#examples-gstreamer-plugin-docker): IP 카메라에서 Kinesis Video Streams로 실시간 스트리밍 프로토콜(RTSP) 비디오를 전송하기 위해 사전 구축된 Docker 이미지를 사용하는 방법을 보여줍니다.
+ [예: RTSP 소스에서 스트리밍](examples-rtsp.md): 자체 Docker 이미지를 빌드하고 IP 카메라에서 Kinesis Video Streams로 RTSP 비디오를 전송하는 방법을 보여줍니다.
+ [예: PutMedia API를 사용하여 Kinesis Video Streams로 데이터 전송](examples-putmedia.md): [Java 생산자 라이브러리 사용](producer-sdk-javaapi.md)를 사용하여 [PutMedia](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_PutMedia.html) API를 사용하여 이미 컨테이너 형식(MKV)인 Kinesis Video Streams로 데이터를 전송하는 방법을 보여줍니다.

## 예: Kinesis Video Streams에서 데이터 검색
<a name="examples-toc-consumer"></a>
+ [KinesisVideoExample](parser-library-write.md#parser-library-write-example): Kinesis Video Streams Parser Library를 사용하여 비디오 조각을 구문 분석하고 로깅하는 방법을 보여줍니다.
+ [예: Kinesis Video Streams 조각 구문 분석 및 렌더링](examples-renderer.md): [JCodec](http://jcodec.org/) 및 [JFrame](https://docs.oracle.com/javase/7/docs/api/javax/swing/JFrame.html)을 사용하여 Kinesis 비디오 스트림 조각을 구문 분석하고 렌더링하는 방법을 보여줍니다.

## 예: 비디오 데이터 재생
<a name="examples-toc-playback"></a>
+ [예: HTML 및 JavaScript에서 HLS 사용](hls-playback.md#how-hls-ex1): Kinesis 비디오 스트림에 대한 HLS 스트리밍 세션을 검색하고 웹 페이지에서 재생하는 방법을 보여줍니다.

## 사전 조건
<a name="examples-prerequisites"></a>
+ 샘플 코드에서는 자격 증명 프로필 파일에 설정한 프로필을 지정하거나 통합 개발 환경(IDE)의 Java 시스템 속성에 자격 증명을 제공하여 AWS 자격 증명을 제공합니다. 아직 설정하지 않은 경우 먼저 자격 증명을 설정합니다. 자세한 내용은 [개발을 위한 AWS 자격 증명 및 리전 설정을 참조하세요](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup-credentials.html).
+ Java IDE를 사용하여 코드를 보고 실행하는 것이 좋습니다(예: 다음 중 하나).
  + [Eclipse Java Neon](https://www.eclipse.org/downloads/packages/release/neon/3/eclipse-jee-neon-3)
  + [JetBrains IntelliJ IDEA](https://www.jetbrains.com/idea/)

# 예: Kinesis Video Streams 생산자 SDK GStreamer 플러그인 - kvssink
<a name="examples-gstreamer-plugin"></a>

이 주제에서는 GStreamer 플러그인으로 사용할 Amazon Kinesis Video Streams 생산자 SDK를 빌드하는 방법을 설명합니다.

**Topics**
+ [GStreamer 요소 다운로드, 빌드 및 구성](#examples-gstreamer-plugin-download)
+ [GStreamer 요소 실행](#examples-gstreamer-plugin-run)
+ [GStreamer 시작 명령 예제](#examples-gstreamer-plugin-launch)
+ [Docker 컨테이너에서 GStreamer 요소 실행](#examples-gstreamer-plugin-docker)
+ [GStreamer 요소 파라미터 참조](examples-gstreamer-plugin-parameters.md)

[GStreamer](https://gstreamer.freedesktop.org/)는 모듈식 플러그인을 결합하여 사용자 지정 미디어 파이프라인을 생성하기 위해 여러 카메라 및 비디오 소스에서 사용하는 인기 있는 미디어 프레임워크입니다. Kinesis Video Streams GStreamer 플러그인은 기존 GStreamer 미디어 파이프라인과 Kinesis Video Streams의 통합을 간소화합니다. GStreamer를 통합한 후 웹캠 또는 실시간 스트리밍 프로토콜(RTSP) 카메라에서 Kinesis Video Streams로 비디오를 스트리밍하여 실시간 이상의 재생, 스토리지 및 추가 분석을 수행할 수 있습니다.

GStreamer 플러그인은 Kinesis Video Streams 생산자 SDK에서 제공하는 기능을 GStreamer 싱크 요소에 캡슐화하여 Kinesis Video Streams로의 비디오 스트림 전송을 자동으로 관리합니다`kvssink`. GStreamer 프레임워크는 추가 처리, 렌더링 또는 저장을 위해 카메라와 같은 디바이스 또는 기타 비디오 소스의 미디어 흐름을 구성하기 위한 표준 관리형 환경을 제공합니다.

GStreamer 파이프라인은 일반적으로 소스(비디오 카메라)와 싱크 요소(비디오를 렌더링하기 위한 플레이어 또는 오프라인 검색을 위한 스토리지) 간의 링크로 구성됩니다. 이 예제에서는 생산자 SDK 요소를 *싱크* 또는 미디어 대상으로 비디오 소스(웹캠 또는 IP 카메라)에 사용합니다. SDK를 캡슐화하는 플러그인 요소는 비디오 스트림을 Kinesis Video Streams로 전송합니다.

이 주제에서는 일반적으로 중간 인코딩 단계(H.264 인코딩 사용)를 통해 Kinesis Video Streams에 연결된 웹 카메라 또는 RTSP 스트림과 같은 비디오 소스에서 비디오를 스트리밍할 수 있는 GStreamer 미디어 파이프라인을 구성하는 방법을 설명합니다. 비디오 스트림을 Kinesis 비디오 스트림으로 사용할 수 있는 경우 [파서 라이브러리를 사용하여 카메라의 출력 보기](parser-library.md)를 사용하여 비디오 스트림을 추가로 처리, 재생, 저장 또는 분석할 수 있습니다.

![\[카메라에서 서비스로 비디오를 스트리밍하기 위한 GStreamer 미디어 파이프라인의 기능 보기입니다.\]](http://docs.aws.amazon.com/ko_kr/kinesisvideostreams/latest/dg/images/gstreamer-pipeline.png)


## GStreamer 요소 다운로드, 빌드 및 구성
<a name="examples-gstreamer-plugin-download"></a>

GStreamer 플러그인 예제는 Kinesis Video Streams C\$1\$1 생산자 SDK에 포함되어 있습니다. SDK 사전 조건 및 다운로드에 대한 자세한 내용은 [C\$1\$1 생산자 라이브러리 코드 다운로드 및 구성](producersdk-cpp-download.md) 단원을 참조하십시오.

macOS, Ubuntu, Raspberry Pi 또는 Windows에서 생산자 SDK GStreamer 싱크를 동적 라이브러리로 빌드할 수 있습니다. GStreamer 플러그인은 `build` 디렉터리에 있습니다. 이 플러그인을 로드하려면 플러그인이에 있어야 합니다`GST_PLUGIN_PATH`. 다음 명령을 실행합니다.

```
export GST_PLUGIN_PATH=`pwd`/build
```

**참고**  
macOS에서는 도커 컨테이너에서 GStreamer를 실행할 때만 네트워크 카메라에서 비디오를 스트리밍할 수 있습니다. 도커 컨테이너에서 macOS의 USB 카메라에서 비디오를 스트리밍하는 작업은 지원되지 않습니다.

## GStreamer 요소 실행
<a name="examples-gstreamer-plugin-run"></a>

Kinesis Video Streams 생산자 SDK 요소를 싱크로 사용하여 GStreamer를 실행하려면 `gst-launch-1.0` 명령을 사용합니다. GStreamer 플러그인에 적합한 업스트림 요소를 사용합니다. 예를 들어 Linux 시스템의 v4l2 디바이스에는 [v4l2src](https://gstreamer.freedesktop.org/documentation/video4linux2/v4l2src.html?gi-language=c#v4l2src-page)를 사용하고, RTSP 디바이스에는 [rtspsrc](https://gstreamer.freedesktop.org/documentation/rtsp/rtspsrc.html#rtspsrc-page)를 사용합니다. 생산자 SDK에 비디오를 전송하기 위한 싱크(파이프라인의 최종 대상)로 `kvssink`를 지정합니다.

자격 [증명을 제공하고](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/examples-gstreamer-plugin-parameters.html#credentials-to-kvssink) [리전을 제공하는](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/examples-gstreamer-plugin-parameters.html#kvssink-region) 것 외에도 `kvssink`요소에는 다음과 같은 필수 파라미터가 있습니다.
+ `stream-name` - 대상 Kinesis Video Streams의 이름입니다.

`kvssink` 선택적 파라미터에 대한 자세한 내용은 [GStreamer 요소 파라미터 참조](examples-gstreamer-plugin-parameters.md) 단원을 참조하십시오.

GStreamer 플러그인 및 파라미터에 대한 최신 정보는 [GStreamer 플러그인](https://gstreamer.freedesktop.org/documentation/plugins_doc.html?gi-language=c)을 참조하세요. GStreamer 요소 또는 플러그인의 이름 `gst-inspect-1.0` 뒤에를 사용하여 정보를 인쇄하고 디바이스에서 사용할 수 있는지 확인할 수도 있습니다.

```
gst-inspect-1.0 kvssink
```

빌드에 `kvssink` 실패했거나 GST\$1PLUGIN\$1PATH가 제대로 설정되지 않은 경우 출력은 다음과 같습니다.

```
No such element or plugin 'kvssink'
```

## GStreamer 시작 명령 예제
<a name="examples-gstreamer-plugin-launch"></a>

다음 예제에서는 `kvssink` GStreamer 플러그인을 사용하여 다양한 유형의 디바이스에서 비디오를 스트리밍하는 방법을 보여줍니다.

### 예제 1: Ubuntu의 RTSP 카메라에서 비디오 스트리밍
<a name="examples-gstreamer-plugin-launch-ex1"></a>

다음 명령은 [rtspsrc](https://gstreamer.freedesktop.org/documentation/rtsp/rtspsrc.html?gi-language=c) GStreamer 플러그인을 사용하여 네트워크 RTSP 카메라에서 스트리밍하는 GStreamer 파이프라인을 Ubuntu에서 생성합니다.

```
gst-launch-1.0 -v rtspsrc location="rtsp://YourCameraRtspUrl" short-header=TRUE ! rtph264depay ! h264parse ! kvssink stream-name="YourStreamName" storage-size=128
```

### 예제 2: Ubuntu의 USB 카메라에서 비디오 인코딩 및 스트리밍
<a name="examples-gstreamer-plugin-launch-ex2"></a>

다음 명령은 USB 카메라의 스트림을 H.264 형식으로 인코딩하는 GStreamer 파이프라인을 Ubuntu에 생성하고 Kinesis Video Streams로 스트리밍합니다. 이 예제에서는 [v4l2src](https://gstreamer.freedesktop.org/documentation/video4linux2/v4l2src.html?gi-language=c#v4l2src-page) GStreamer 플러그인을 사용합니다.

```
gst-launch-1.0 v4l2src do-timestamp=TRUE device=/dev/video0 ! videoconvert ! video/x-raw,format=I420,width=640,height=480,framerate=30/1 ! x264enc  bframes=0 key-int-max=45 bitrate=500 ! video/x-h264,stream-format=avc,alignment=au,profile=baseline ! kvssink stream-name="YourStreamName" storage-size=512 access-key="YourAccessKey" secret-key="YourSecretKey" aws-region="YourAWSRegion"
```

### 예제 3: Ubuntu의 USB 카메라에서 사전 인코딩된 비디오 스트리밍
<a name="examples-gstreamer-plugin-launch-ex3"></a>

다음 명령은 카메라가 이미 H.264 형식으로 인코딩한 비디오를 Kinesis Video Streams로 스트리밍하는 GStreamer 파이프라인을 Ubuntu에 생성합니다. 이 예제에서는 [v4l2src](https://gstreamer.freedesktop.org/documentation/video4linux2/v4l2src.html?gi-language=c#v4l2src-page) GStreamer 플러그인을 사용합니다.

```
gst-launch-1.0 v4l2src do-timestamp=TRUE device=/dev/video0 ! h264parse ! video/x-h264,stream-format=avc,alignment=au ! kvssink stream-name="plugin" storage-size=512 access-key="YourAccessKey" secret-key="YourSecretKey" aws-region="YourAWSRegion"
```

### 예제 4: macOS의 네트워크 카메라에서 비디오 스트리밍
<a name="examples-gstreamer-plugin-launch-ex4"></a>

다음 명령은 네트워크 카메라에서 Kinesis Video Streams로 비디오를 스트리밍하는 GStreamer 파이프라인을 macOS에 생성합니다. 이 예제에서는 [rtspsrc](https://gstreamer.freedesktop.org/documentation/rtsp/rtspsrc.html#rtspsrc-page) GStreamer 플러그인을 사용합니다.

```
gst-launch-1.0 rtspsrc location="rtsp://YourCameraRtspUrl" short-header=TRUE ! rtph264depay ! h264parse ! video/x-h264, format=avc,alignment=au ! kvssink stream-name="YourStreamName" storage-size=512  access-key="YourAccessKey" secret-key="YourSecretKey" aws-region="YourAWSRegion"
```

### 예제 5: Windows의 네트워크 카메라에서 비디오 스트리밍
<a name="examples-gstreamer-plugin-launch-ex5"></a>

다음 명령은 Windows에서 네트워크 카메라에서 Kinesis Video Streams로 비디오를 스트리밍하는 GStreamer 파이프라인을 생성합니다. 이 예제에서는 [rtspsrc](https://gstreamer.freedesktop.org/documentation/rtsp/rtspsrc.html#rtspsrc-page) GStreamer 플러그인을 사용합니다.

```
gst-launch-1.0 rtspsrc location="rtsp://YourCameraRtspUrl" short-header=TRUE ! rtph264depay ! video/x-h264, format=avc,alignment=au ! kvssink stream-name="YourStreamName" storage-size=512  access-key="YourAccessKey" secret-key="YourSecretKey" aws-region="YourAWSRegion"
```

### 예제 6: Raspberry Pi의 카메라에서 비디오 스트리밍
<a name="examples-gstreamer-plugin-launch-ex6"></a>

다음 명령은 Kinesis Video Streams로 비디오를 스트리밍하는 Raspberry Pi에 GStreamer 파이프라인을 생성합니다. 이 예제에서는 [v4l2src](https://gstreamer.freedesktop.org/documentation/video4linux2/v4l2src.html?gi-language=c#v4l2src-page) GStreamer 플러그인을 사용합니다.

```
gst-launch-1.0 v4l2src do-timestamp=TRUE device=/dev/video0 ! videoconvert ! video/x-raw,format=I420,width=640,height=480,framerate=30/1 ! omxh264enc control-rate=1 target-bitrate=5120000 periodicity-idr=45 inline-header=FALSE ! h264parse ! video/x-h264,stream-format=avc,alignment=au,width=640,height=480,framerate=30/1,profile=baseline ! kvssink stream-name="YourStreamName" access-key="YourAccessKey" secret-key="YourSecretKey" aws-region="YourAWSRegion"
```

### 예제 7: Raspberry Pi 및 Ubuntu에서 오디오와 비디오 모두 스트리밍
<a name="examples-gstreamer-plugin-launch-ex7"></a>

[gst-launch-1.0 명령을 실행하여 Raspberry-PI 및 Ubuntu의 오디오 및 비디오 모두를 스트리밍하기 시작](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/docs/linux.md#running-the-gst-launch-10-command-to-start-streaming-both-audio-and-video-in-raspberry-pi-and-ubuntu)하는 방법을 알아봅니다.

### 예제 8: macOS의 디바이스 소스에서 오디오와 비디오 모두 스트리밍
<a name="examples-gstreamer-plugin-launch-ex8"></a>

[gst-launch-1.0 명령을 실행하여 MacOS의 오디오 및 비디오 모두를 스트리밍하기 시작](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/docs/macos.md#running-the-gst-launch-10-command-to-start-streaming-both-audio-and-raw-video-in-mac-os)하는 방법을 알아봅니다.

### 예제 9: 오디오와 비디오가 모두 포함된 MKV 파일 업로드
<a name="examples-gstreamer-plugin-launch-ex9"></a>

[gst-launch-1.0 명령을 실행하여 오디오와 비디오가 모두 포함된 MKV 파일을 업로드](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/docs/windows.md#running-the-gst-launch-10-command-to-upload-mkv-file-that-contains-both-audio-and-video)하는 방법을 알아봅니다. h.264 및 AAC 인코딩 미디어가 포함된 MKV 테스트 파일이 필요합니다.

## Docker 컨테이너에서 GStreamer 요소 실행
<a name="examples-gstreamer-plugin-docker"></a>

도커는 컨테이너를 사용하여 애플리케이션을 개발, 배포 및 실행하기 위한 플랫폼입니다. Docker를 사용하여 GStreamer 파이프라인을 생성하면 Kinesis Video Streams의 운영 환경이 표준화되어 애플리케이션 구축 및 사용이 간소화됩니다.

도커를 설치하고 구성하려면 다음을 참조하십시오.
+ [도커 다운로드 지침](https://docs.docker.com/engine/install/)
+ [도커 시작하기](https://docs.docker.com/guides/getting-started/)

Docker를 설치한 후 아래 제공된 `docker pull` 명령 중 하나를 사용하여 Amazon Elastic Container Registry에서 Kinesis Video Streams C\$1\$1 생산자 SDK(및 GStreamer 플러그인)를 다운로드할 수 있습니다.

Kinesis Video Streams 생산자 SDK 요소를 Docker 컨테이너의 싱크로 사용하여 GStreamer를 실행하려면 다음을 수행합니다.

**Topics**
+ [Docker 클라이언트 인증](#examples-gstreamer-plugin-docker-authenticate)
+ [Ubuntu, macOS, Windows 또는 Raspberry Pi용 Docker 이미지 다운로드](#examples-gstreamer-plugin-docker-download)
+ [Docker 이미지 실행](#examples-gstreamer-plugin-docker-run)

### Docker 클라이언트 인증
<a name="examples-gstreamer-plugin-docker-authenticate"></a>

이미지를 가져오려는 Amazon ECR 레지스트리에 대해 Docker 클라이언트를 인증합니다. 사용된 각 레지스트리에 대한 인증 토큰을 가져와야 합니다. 토큰은 12시간 동안 유효합니다. 자세한 내용은 *Amazon Elastic Container Registry 사용 설명서*의 [레지스트리 권한](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)을 참조하세요.

**Example : Amazon ECR을 사용하여 인증**  
Amazon ECR로 인증하려면 표시된 대로 다음 명령을 복사하여 붙여넣습니다.  

```
sudo aws ecr get-login-password --region us-west-2 | docker login -u AWS --password-stdin https://546150905175.dkr.ecr.us-west-2.amazonaws.com
```
성공하면 `Login Succeeded` 출력이 인쇄됩니다.

### Ubuntu, macOS, Windows 또는 Raspberry Pi용 Docker 이미지 다운로드
<a name="examples-gstreamer-plugin-docker-download"></a>

운영 체제에 따라 다음 명령 중 하나를 사용하여 도커 이미지를 도커 환경으로 다운로드합니다.

#### Ubuntu용 Docker 이미지 다운로드
<a name="examples-gstreamer-plugin-docker-download-ubuntu"></a>

```
sudo docker pull 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-linux:latest
```

#### macOS용 Docker 이미지 다운로드
<a name="examples-gstreamer-plugin-docker-download-macos"></a>

```
docker pull 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-linux:latest
```

#### Windows용 Docker 이미지 다운로드
<a name="examples-gstreamer-plugin-docker-download-windows"></a>

```
docker pull 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-windows:latest
```

#### Raspberry Pi용 Docker 이미지 다운로드
<a name="examples-gstreamer-plugin-docker-download-rpi"></a>

```
sudo docker pull 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-raspberry-pi:latest
```

이미지가 성공적으로 추가되었는지 확인하려면 다음 명령을 사용합니다.

```
docker images
```

### Docker 이미지 실행
<a name="examples-gstreamer-plugin-docker-run"></a>

운영 체제에 따라 다음 명령 중 하나를 사용하여 도커 이미지를 실행합니다.

#### Ubuntu에서 Docker 이미지 실행
<a name="examples-gstreamer-plugin-docker-run-ubuntu"></a>

```
sudo docker run -it --network="host" --device=/dev/video0 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-linux /bin/bash
```

#### macOS에서 Docker 이미지 실행
<a name="examples-gstreamer-plugin-docker-run-macos"></a>

```
sudo docker run -it --network="host" 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-linux /bin/bash
```

#### Windows에서 Docker 이미지 실행
<a name="examples-gstreamer-plugin-docker-run-windows"></a>

```
docker run -it 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-windows AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY RTSP_URL STREAM_NAME
```

#### Raspberry Pi에서 Docker 이미지 실행
<a name="examples-gstreamer-plugin-docker-run-rpi"></a>

```
sudo docker run -it --device=/dev/video0 --device=/dev/vchiq -v /opt/vc:/opt/vc 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-raspberry-pi /bin/bash
```

Docker는 컨테이너를 시작하고 컨테이너 내에서 명령을 사용하기 위한 명령 프롬프트를 제공합니다.

컨테이너에서 다음 명령을 사용하여 환경 변수를 설정합니다.

```
export LD_LIBRARY_PATH=/opt/awssdk/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/lib:$LD_LIBRARY_PATH
export PATH=/opt/awssdk/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/bin:$PATH
export GST_PLUGIN_PATH=/opt/awssdk/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/lib:$GST_PLUGIN_PATH
```

를 `kvssink` 사용하여 로 스트리밍`gst-launch-1.0`을 시작하여 디바이스 및 비디오 소스에 적합한 파이프라인을 실행합니다. 파이프라인 예제는 단원을 참조하십시오[GStreamer 시작 명령 예제](#examples-gstreamer-plugin-launch).

# GStreamer 요소 파라미터 참조
<a name="examples-gstreamer-plugin-parameters"></a>

Amazon Kinesis Video Streams 생산자 C\$1\$1 SDK로 비디오를 보내려면 파이프라인의 *싱크* 또는 최종 대상으로 `kvssink`를 지정합니다. 이 참조는 `kvssink` 필수 및 선택적 파라미터에 대한 정보를 제공합니다. 자세한 내용은 [예: Kinesis Video Streams 생산자 SDK GStreamer 플러그인 - kvssink](examples-gstreamer-plugin.md) 단원을 참조하십시오.

**주제**
+ [에 자격 증명 제공 `kvssink`](#credentials-to-kvssink)
+ [에 리전 제공 `kvssink`](#kvssink-region)
+ [`kvssink` 선택적 파라미터](#kvssink-optional-parameters)

## 에 자격 증명 제공 `kvssink`
<a name="credentials-to-kvssink"></a>

`kvssink` GStreamer 요소가 요청을 하도록 허용하려면 Amazon Kinesis Video Streams 서비스를 호출할 때 사용할 자격 AWS 증명을 AWS제공합니다. 자격 증명 공급자 체인은 다음 순서로 자격 증명을 찾습니다.

### 1. AWS IoT 자격 증명
<a name="collapsible-section-1"></a>

 AWS IoT 자격 증명을 설정하려면 섹션을 참조하세요[를 사용하여 Kinesis Video Streams 리소스에 대한 액세스 제어 AWS IoT](how-iot.md).

`iot-credentials` 파라미터 값은 로 시작하고 다음 *키*=*값* 페어의 쉼표로 구분된 목록 뒤에 `iot-certificate,` 와야 합니다.


****  

| Key(키) | 필수 | 설명 | 
| --- | --- | --- | 
| ca-path | 예 | TLS를 통해 백엔드 서비스와 신뢰를 구축하는 데 사용되는 CA 인증서의 파일 경로입니다. 

**Example**  
**예**: ` /file/path/to/certificate.pem` | 
| cert-path | 예 | X.509 인증서의 파일 경로입니다. 

**Example**  
**예**: `/file/path/to/certificateID-certificate.pem.crt` | 
| endpoint | 예 |  AWS 계정의 AWS IoT Core 자격 증명 엔드포인트 공급자 엔드포인트입니다. [AWS IoT 개발자 안내서](https://docs.aws.amazon.com//iot/latest/developerguide/authorizing-direct-aws.html)를 참조하세요. 

**Example**  
**예**: `credential-account-specific-prefix.credentials.iot.aws-region.amazonaws.com` | 
| key-path | 예 | 퍼블릭/프라이빗 키 페어에 사용되는 프라이빗 키의 파일 경로입니다. 

**Example**  
**예**: `/file/path/to/certificateID-private.pem.key` | 
| role-aliases | 예 | 에 연결할 때 사용할 AWS IAM 역할을 가리키는 역할 별칭의 이름입니다 AWS IoT Core. 

**Example**  
**예**: `KvsCameraIoTRoleAlias` | 
| iot-thing-name | 아니요 | `iot-thing-name`은 선택 사항입니다. `iot-thing-name`이 제공되지 않으면 `stream-name` 파라미터 값이 사용됩니다. 

**Example**  
**예**: `kvs_example_camera` | 

**Example**  
**예:**  

```
gst-launch-1.0 -v ... ! kvssink stream-name="YourStream" aws-region="YourRegion" iot-certificate="iot-certificate,endpoint=credential-account-specific-prefix.credentials.iot.aws-region.amazonaws.com,cert-path=certificateID-certificate.pem.crt,key-path=certificateID-private.pem.key,ca-path=certificate.pem,role-aliases=YourRoleAlias,iot-thing-name=YourThingName"
```

### 2. 환경 변수
<a name="collapsible-section-2"></a>

환경에서 자격 증명을 `kvssink` 사용하도록 하려면 다음 환경 변수를 설정합니다.


****  

| 환경 변수 이름 | 필수 | 설명 | 
| --- | --- | --- | 
| AWS\$1ACCESS\$1KEY\$1ID | 예 | Amazon Kinesis Video Streams에 AWS 액세스하는 데 사용되는 액세스 키입니다. | 
| AWS\$1SECRET\$1ACCESS\$1KEY | 예 | 액세스 키와 연결된 AWS 보안 키입니다. | 
| AWS\$1SESSION\$1TOKEN | 아니요 | 작업에서 AWS STS 직접 임시 보안 자격 증명을 사용하는 경우 필요한 세션 토큰 값을 지정합니다. | 

환경 변수를 설정하면 사용되는 값이 변경되어 쉘 세션이 종료될 때까지 또는 변수를 다른 값으로 설정할 때까지 유지됩니다. 향후 세션에서 변수를 영구화하려면 셸의 시작 스크립트에서 변수를 설정합니다.

### 3. `access-key`, `secret-key` 파라미터
<a name="collapsible-section-3"></a>

자격 증명을 `kvssink` 파라미터로 직접 지정하려면 다음 파라미터를 설정합니다.


****  

| `kvssink` 파라미터 이름 | 필수 | 설명 | 
| --- | --- | --- | 
| access-key | 예 | Amazon Kinesis Video Streams에 AWS 액세스하는 데 사용되는 액세스 키입니다. | 
| secret-key | 예 | 액세스 키와 연결된 AWS 보안 키입니다. | 
| session-token | 아니요 | 작업에서 AWS STS 직접 임시 보안 자격 증명을 사용하는 경우 필요한 세션 토큰 값을 지정합니다. | 

**Example**  
**정적 자격 증명 사용:**  

```
gst-launch-1.0 -v ... ! kvssink stream-name="YourStream" aws-region="YourRegion" access-key="AKIDEXAMPLE" secret-key="SKEXAMPLE"
```

**Example**  
**임시 자격 증명 사용:**  

```
gst-launch-1.0 -v ... ! kvssink stream-name="YourStream" aws-region="YourRegion" access-key="AKIDEXAMPLE" secret-key="SKEXAMPLE" session-token="STEXAMPLE"
```

### 4. 자격 증명 파일
<a name="collapsible-section-4"></a>

**중요**  
이전 방법 중 하나를 선택한 경우 `credential-path` `kvssink` 파라미터를 사용할 수 없습니다.


****  

| `kvssink` 파라미터 이름 | 필수 | 설명 | 
| --- | --- | --- | 
| credential-path | 예 | 특정 형식의 자격 증명이 포함된 텍스트 파일의 경로입니다. | 

텍스트 파일에는 다음 형식 중 하나의 자격 증명이 포함되어야 합니다.
+ CREDENTIALS *YourAccessKey* *YourSecretKey*
+ CREDENTIALS *YourAccessKey* *만료* *YourSecretKey* *SessionToken*

**Example**  
**예:** `credentials.txt` 파일은에 있으며 다음을 `/home/ubuntu` 포함합니다.  
`CREDENTIALS AKIDEXAMPLE 2023-08-10T22:43:00Z SKEXAMPLE STEXAMPLE`  
에서 사용하려면 다음을 `kvssink`입력합니다.  

```
gst-launch-1.0 -v ... ! kvssink stream-name="YourStream" aws-region="YourRegion" credential-path="/home/ubuntu/credentials.txt" 
```
만료 시간은 향후 최소 5 \$1 30 \$1 3 = **38**초여야 합니다. 유예 기간은에서 `IOT_CREDENTIAL_FETCH_GRACE_PERIOD` 변수로 정의됩니다[https://github.com/awslabs/amazon-kinesis-video-streams-producer-c/blob/master/src/source/Common/IotCredentialProvider.h](https://github.com/awslabs/amazon-kinesis-video-streams-producer-c/blob/master/src/source/Common/IotCredentialProvider.h). 를 시작할 때 자격 증명이 만료에 너무 가까우면 오류 코드가 `kvssink`표시됩니다`0x52000049 - STATUS_INVALID_TOKEN_EXPIRATION`.
`kvssink`는 자격 증명 파일을 수정하지 않습니다. 임시 자격 증명을 사용하는 경우 만료 시간에서 유예 기간을 빼기 전에 외부 소스에서 자격 증명 파일을 업데이트해야 합니다.

## 에 리전 제공 `kvssink`
<a name="kvssink-region"></a>

다음은 리전 조회 순서입니다.

1. `AWS_DEFAULT_REGION` 환경 변수를 먼저 검토합니다. 설정된 경우 해당 리전을 사용하여 클라이언트를 구성합니다.

1. `aws-region` 파라미터는 다음에 검토됩니다. 설정된 경우 해당 리전을 사용하여 클라이언트를 구성합니다.

1. 이전 메서드를 모두 사용하지 않은 경우 `kvssink` 기본값은 입니다`us-west-2`.

## `kvssink` 선택적 파라미터
<a name="kvssink-optional-parameters"></a>

`kvssink` 요소에는 다음과 같은 선택적 파라미터가 있습니다. 이런 파라미터에 대한 자세한 내용은 [Kinesis 비디오 스트림 구조](producer-reference-structures-stream.md) 섹션을 참조하세요.


****  

| 파라미터 | 설명 | 단위/유형 | 기본값 | 
| --- | --- | --- | --- | 
| stream-name  | 대상 Amazon Kinesis 비디오 스트림의 이름입니다. stream-name을 지정하지 않으면 기본 스트림 이름인 “DEFAULT\$1STREAM”이 사용됩니다. 해당 기본 이름의 스트림이 아직 없는 경우 스트림이 생성됩니다.  |  |  | 
| absolute-fragment-times | 절대 조각 시간을 사용할지 여부입니다. | 부울 | true | 
| access-key | Kinesis Video Streams에 AWS 액세스하는 데 사용되는 액세스 키입니다.  AWS 자격 증명이 설정되어 있거나이 파라미터를 제공해야 합니다. 이 정보를 제공하려면 다음을 입력합니다. <pre>export AWS_ACCESS_KEY_ID=</pre> |  |  | 
| avg-bandwidth-bps | 스트림용 예상 평균 대역폭. | 초당 비트 수 | 4194304 | 
| aws-region | 사용할 AWS 리전 입니다.  리전에 `AWS_DEFAULT_REGION` 환경 변수를 제공할 수도 있습니다. 환경 변수와 kvssink 파라미터가 모두 설정된 경우 환경 변수가 우선합니다.   달리 지정`us-west-2`하지 않으면 리전은 기본적으로 로 설정됩니다.   | 문자열 | "us-west-2" | 
| buffer-duration | 스트림 버퍼 지속 시간입니다. | 초 | 120 | 
| codec-id | 스트림의 코덱 ID입니다. | 문자열 | "V\$1MPEG4/ISO/AVC" | 
| connection-staleness | 스트림 기한 경과 콜백이 호출되는 시간입니다. | 초 | 60 | 
| content-type | 스트림의 콘텐츠 유형입니다. | 문자열 | "video/h264" | 
| fragment-acks | 조각 ACK를 사용할지 여부입니다. | 부울 | true | 
| fragment-duration | 원하는 조각 지속 시간입니다. | 밀리초 | 2000 | 
| framerate | 예상 프레임 속도입니다. | 초당 프레임 | 25 | 
| frame-timecodes | 현재 시간 콜백을 사용하여 프레임 타임코드를 사용할지 타임스탬프를 생성할지 여부. | 부울 | true | 
| key-frame-fragmentation | 키 프레임에서 조각을 생성할지 여부입니다. | 부울 | true | 
| log-config | 로그 구성 경로입니다. | 문자열 | "../kvs\$1log\$1configuration" | 
| max-latency | 스트림의 최대 지연 시간입니다. | 초 | 60 | 
| recalculate-metrics | 지표를 다시 계산할지 여부입니다. | 부울 | true | 
| replay-duration | 다시 시작이 활성화된 경우 오류가 발생한 동안 현재 리더를 뒤로 롤하여 다시 재생하는 기간입니다. | 초 | 40 | 
| restart-on-error | 오류 발생 시 다시 시작할지 여부입니다. | 부울 | true | 
| retention-period | 스트림이 보존되는 시간의 길이입니다. | 시간 | 2 | 
| rotation-period | 키 교체 기간입니다. 자세한 내용은 [키 교체 AWS KMS 를 참조하세요](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html). | 초 | 3600 | 
| secret-key |  Kinesis Video Streams에 액세스하는 데 사용되는 AWS 보안 키입니다.  AWS 자격 증명이 설정되어 있거나이 파라미터를 제공해야 합니다. <pre>export AWS_SECRET_ACCESS_KEY=</pre>  |  |  | 
| session-token | 작업에서 AWS STS 직접 임시 보안 자격 증명을 사용하는 경우 필요한 세션 토큰 값을 지정합니다. |  |  | 
| storage-size | 메비바이트(MiB) 단위의 디바이스 스토리지 크기입니다. 디바이스 스토리지 구성에 대한 자세한 내용은 [StorageInfo](producer-reference-structures-producer.md#producer-reference-structures-producer-storageinfo) 단원을 참조하십시오. | 메비바이트(MiB) | 128 | 
| streaming-type | 스트리밍 유형입니다. 유효한 값으로는 다음이 포함됩니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/kinesisvideostreams/latest/dg/examples-gstreamer-plugin-parameters.html) | 열거형 GstKvsSinkStreamingType | 0: 실시간 | 
| timecode-scale | MKV 타임코드 척도입니다. | 밀리초 | 1 | 
| track-name | MKV 트랙 이름 | 문자열 | "kinesis\$1video" | 
| iot-certificate | AWS IoT `kvssink` 요소에 사용할 자격 증명입니다. `iot-certificate`는 다음 키와 값을 허용합니다.  는 **선택 사항**`iot-thing-name`입니다. `iot-thing-name`이 제공되지 않으면 `stream-name` 파라미터 값이 사용됩니다.  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/kinesisvideostreams/latest/dg/examples-gstreamer-plugin-parameters.html) | 문자열 | 없음 | 

# 예: PutMedia API를 사용하여 Kinesis Video Streams로 데이터 전송
<a name="examples-putmedia"></a>

이 예제는 [PutMedia](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_PutMedia.html) API를 사용하는 방법을 보여 줍니다. 컨테이너 형식(MKV)에 이미 있는 데이터를 보내는 방법을 보여줍니다. 전송하기 전에 데이터를 컨테이너 형식으로 어셈블해야 하는 경우(예: 카메라 비디오 데이터를 프레임으로 어셈블하는 경우) 단원을 참조하십시오[Kinesis Video Streams에 업로드](producer-sdk.md).

**참고**  
`PutMedia` 작업은 C\$1\$1 및 Java SDKs. 이는 연결, 데이터 흐름 및 승인의 전이중 관리 때문입니다. 다른 언어에서는 지원되지 않습니다.

**Topics**
+ [코드 다운로드 및 구성](#examples-putmedia-download)
+ [코드 작성 및 검사](#examples-putmedia-write)
+ [코드 실행 및 확인](#examples-putmedia-run)

## 코드 다운로드 및 구성
<a name="examples-putmedia-download"></a>

단계에 따라 Java 예제 코드를 다운로드하고, 프로젝트를 Java IDE로 가져오고, 라이브러리 위치를 구성하고, 자격 증명을 사용하도록 AWS 코드를 구성합니다.

1. 디렉터리를 생성하고 GitHub 리포지토리에서 예제 소스 코드를 복제합니다. `PutMedia` 예제는 [Java](producer-sdk-javaapi.md)의 일부입니다.

   ```
   git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-java
   ```

1. 사용 중인 Java IDE(예: [Eclipse](https://www.eclipse.org/) 또는 [IntelliJ IDEA](https://www.jetbrains.com/idea/))를 열고 다운로드한 Apache Maven 프로젝트를 가져옵니다.
   + **Eclipse에서** **파일**, **가져오기**, **Maven**, **Existing Maven Projects**(기존 Maven 프로젝트)를 차례로 선택한 후 다운로드한 패키지의 루트로 이동합니다. `pom.xml` 파일을 선택합니다.
   + **IntelliJ Idea에서 ** [**Import**]를 선택합니다. 다운로드한 패키지의 루트에 있는 `pom.xml` 파일을 찾습니다.

    자세한 내용은 관련 IDE 문서를 참조하십시오.

1. 가져온 라이브러리를 IDE가 알 수 있도록 프로젝트를 업데이트합니다.
   + IntelliJ IDEA의 경우 다음을 수행합니다.

     1. 프로젝트의 [**lib**] 디렉터리의 컨텍스트 메뉴를 열고(오른쪽 버튼 클릭) [**Add as library**]를 선택합니다.

     1. **파일을** 선택한 다음 **프로젝트 구조를** 선택합니다.

     1. **Project Settings**에서 **Modules**를 선택합니다.

     1. **소스** 탭에서 **Language Level(언어 레벨)**을 **7** 이상으로 설정합니다.
   + Eclipse의 경우 다음을 수행합니다.

     1. 프로젝트의 컨텍스트 메뉴를 열고(오른쪽 버튼 클릭) [**Properties**], [**Java Build Path**], [**Source**]를 차례로 선택합니다. 뒤이어 다음과 같이 하세요.

        1. [**Source**] 탭에서 [**Native library location**]을 두 번 클릭합니다.

        1. [**Native Library Folder Configuration**] 마법사에서, [**Workspace**]를 선택합니다.

        1. [**Native Library Folder**] 선택에서 프로젝트에 있는 [**lib**] 디렉터리를 선택합니다.

     1. 프로젝트에 대한 컨텍스트 메뉴를 열고(마우스 오른쪽 버튼 클릭) [**Properties**]를 선택합니다. 뒤이어 다음과 같이 하세요.

        1. [**Libraries**] 탭에서 [**Add Jars**]를 선택합니다.

        1. **JAR selection(JAR 선택)** 마법사에서 프로젝트의 `lib` 디렉터리에 있는 모든 .jar을 선택합니다.

## 코드 작성 및 검사
<a name="examples-putmedia-write"></a>

`PutMedia` API 예제()는 다음과 같은 코딩 패턴을 보입니다.`PutMediaDemo`

**Topics**
+ [PutMediaClient 생성](#producersdk-javaapi-writecode-putmediaapi-putmediaclient)
+ [미디어 스트리밍 및 스레드 일시 중지](#producersdk-javaapi-writecode-putmediaapi-run)

이 단원의 코드 예제는 `PutMediaDemo` 클래스가 출처입니다.

### PutMediaClient 생성
<a name="producersdk-javaapi-writecode-putmediaapi-putmediaclient"></a>

`PutMediaClient` 객체를 생성하려면 다음 파라미터가 필요합니다.
+ `PutMedia` 엔드포인트의 URI.
+ 스트리밍할 MKV 파일로 향하는 `InputStream`
+ 스트림 이름입니다. 이 예제에서는 [Java 생산자 라이브러리 사용](producer-sdk-javaapi.md)에서 생성된 스트림을 사용합니다(`my-stream`). 다른 스트림을 사용하려면 다음 파라미터를 변경합니다.

  ```
  private static final String STREAM_NAME="my-stream";
  ```
**참고**  
`PutMedia` API 예제에서는 스트림을 생성하지 않습니다. [Java 생산자 라이브러리 사용](producer-sdk-javaapi.md), Kinesis Video Streams 콘솔 또는에 대한 테스트 애플리케이션을 사용하여 스트림을 생성해야 합니다 AWS CLI.
+ 현재 타임스탬프.
+ 타임 코드 유형. 예제에서는 `RELATIVE`를 사용하는데, 타임스탬프가 컨테이너 시작 기준이라는 것을 가리킵니다.
+ 수신된 패킷이 인가된 발신자에 의해 전송되었음을 확인하는 `AWSKinesisVideoV4Signer` 객체.
+ 최대 업스트림 대역폭(단위: Kbps)
+ 패킷을 받았다는 인정을 수신하는 `AckConsumer` 객체.

다음 코드는 `PutMediaClient` 객체를 생성합니다.

```
/* actually URI to send PutMedia request */
final URI uri = URI.create(KINESIS_VIDEO_DATA_ENDPOINT + PUT_MEDIA_API);

/* input stream for sample MKV file */
final InputStream inputStream = new FileInputStream(MKV_FILE_PATH);

/* use a latch for main thread to wait for response to complete */
final CountDownLatch latch = new CountDownLatch(1);

/* a consumer for PutMedia ACK events */
final AckConsumer ackConsumer = new AckConsumer(latch);

/* client configuration used for AWS SigV4 signer */
final ClientConfiguration configuration = getClientConfiguration(uri);

/* PutMedia client */
final PutMediaClient client = PutMediaClient.builder()
        .putMediaDestinationUri(uri)
        .mkvStream(inputStream)
        .streamName(STREAM_NAME)
        .timestamp(System.currentTimeMillis())
        .fragmentTimeCodeType("RELATIVE")
        .signWith(getKinesisVideoSigner(configuration))
        .upstreamKbps(MAX_BANDWIDTH_KBPS)
        .receiveAcks(ackConsumer)
        .build();
```

### 미디어 스트리밍 및 스레드 일시 중지
<a name="producersdk-javaapi-writecode-putmediaapi-run"></a>

클라이언트가 생성된 후에는 샘플이 `putMediaInBackground`로 비동기식 스트리밍을 시작합니다. 그러면 메인 스레드가 `AckConsumer`가 반환될 때 까지, 즉 클라이언트가 닫히는 시점까지 `latch.await`에 의해 일시 중지됩니다.

```
 /* start streaming video in a background thread */
            client.putMediaInBackground();

            /* wait for request/response to complete */
            latch.await();

            /* close the client */
            client.close();
```

## 코드 실행 및 확인
<a name="examples-putmedia-run"></a>

`PutMedia` API 예제를 실행하려면 다음을 수행합니다.

1. Kinesis Video Streams 콘솔`my-stream`에서 또는를 사용하여 라는 스트림을 생성합니다 AWS CLI.

1. 작업 디렉터리를 Java 생산자 SDK 디렉터리로 변경합니다.

   ```
   cd /<YOUR_FOLDER_PATH_WHERE_SDK_IS_DOWNLOADED>/amazon-kinesis-video-streams-producer-sdk-java/
   ```

1. Java SDK와 데모 애플리케이션을 컴파일합니다.

   ```
   mvn package
   ```

1. `/tmp` 디렉터리에 임시 파일 이름을 생성합니다.

   ```
   jar_files=$(mktemp)
   ```

1. 로컬 리포지토리에서 파일로 종속성의 classpath 문자열을 생성합니다.

   ```
   mvn -Dmdep.outputFile=$jar_files dependency:build-classpath
   ```

1. 다음과 같이 `LD_LIBRARY_PATH`환경 변수의 값을 설정합니다.

   ```
   export LD_LIBRARY_PATH=/<YOUR_FOLDER_PATH_WHERE_SDK_IS_DOWNLOADED>/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/lib:$LD_LIBRARY_PATH
   $ classpath_values=$(cat $jar_files)
   ```

1. 다음과 같이 명령줄에서 데모를 실행하고 자격 증명을 제공합니다. AWS 

   ```
   java -classpath target/kinesisvideo-java-demo-1.0-SNAPSHOT.jar:$classpath_values -Daws.accessKeyId=${ACCESS_KEY} -Daws.secretKey=${SECRET_KEY} -Djava.library.path=/opt/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build com.amazonaws.kinesisvideo.demoapp.DemoAppMain
   ```

1. [Kinesis Video Streams 콘솔](https://console.aws.amazon.com//kinesisvideo/home/)을 열고 스트림 **관리 페이지에서 스트림을** 선택합니다. 비디오가 [**Video Preview**] 창에서 재생됩니다.

# 예: RTSP 소스에서 스트리밍
<a name="examples-rtsp"></a>

에는 실시간 스트리밍 프로토콜(RTSP) 네트워크 카메라에 연결하는 [Docker](https://www.docker.com/) 컨테이너에 대한 정의가 [C\$1\$1](producer-sdk-cpp.md) 포함되어 있습니다. Docker를 사용하면 Kinesis Video Streams의 운영 환경이 표준화되어 애플리케이션 구축 및 사용이 간소화됩니다.

다음 절차에서는 RTSP 데모 애플리케이션을 설정하고 사용하는 방법을 보여 줍니다.

**Topics**
+ [자습서 비디오](#rtsp-video)
+ [사전 조건](#examples-rtsp-prerequisites)
+ [Docker 이미지를 구축합니다.](#examples-rtsp-build)
+ [RTSP 예제 애플리케이션 실행](#examples-rtsp-procedure)

## 자습서 비디오
<a name="rtsp-video"></a>

이 동영상은 AWS 클라우드 및 Amazon Kinesis Video Streams로 RTSP 피드를 전송하도록 Raspberry Pi를 설정하는 방법을 보여줍니다. 이는 end-to-end 데모입니다.

[![AWS Videos](http://img.youtube.com/vi/YoOYTCD_v3Q?si=ajdNXZpRhNnpAOKk/0.jpg)](http://www.youtube.com/watch?v=YoOYTCD_v3Q?si=ajdNXZpRhNnpAOKk)


이 동영상은 피드에서 이미지를 캡처하여 컴퓨터 비전과 Amazon Rekognition을 사용하여 이미지를 처리하고 알림을 전송하는 방법을 보여줍니다.




## 사전 조건
<a name="examples-rtsp-prerequisites"></a>

Kinesis Video Streams RTSP 예제 애플리케이션을 실행하려면 다음이 있어야 합니다.
+ **도커:** 도커 설치 및 사용에 대한 자세한 내용은 다음 링크를 참조하십시오.
  + [도커 다운로드 지침](https://docs.docker.com/desktop/)
  + [도커 시작하기](https://docs.docker.com/guides/getting-started/)
+ **RTSP 네트워크 카메라 소스:** 권장 카메라에 대한 자세한 내용은 [시스템 요구 사항](system-requirements.md) 단원을 참조하십시오.

## Docker 이미지를 구축합니다.
<a name="examples-rtsp-build"></a>

먼저 데모 애플리케이션이 실행할 Docker 이미지를 빌드합니다.

1. Amazon Kinesis Video Streams 데모 리포지토리를 복제합니다.

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-video-streams-demos.git
   ```

1. 를 Dockerfile이 포함된 디렉터리로 변경합니다. 이 경우 [docker-rtsp](https://github.com/aws-samples/amazon-kinesis-video-streams-demos/blob/master/producer-cpp/docker-rtsp/) 디렉터리입니다.

   ```
   cd amazon-kinesis-video-streams-demos/producer-cpp/docker-rtsp/
   ```

1. 다음 명령을 사용하여 Docker 이미지를 빌드합니다. 이 명령은 이미지를 생성하고 rtspdockertest로 태그를 지정합니다.

   ```
   docker build -t rtspdockertest .
   ```

1. 를 실행`docker images`하고 태그가 지정된 이미지 ID를 검색합니다`rtspdockertest`.

   예를 들어 아래 샘플 출력에서는 `IMAGE ID`입니다`54f0d65f69b2`.

   ```
   REPOSITORY        TAG       IMAGE ID        CREATED           PLATFORM       SIZE         BLOB SIZE
   rtspdockertest    latest    54f0d65f69b2    10 minutes ago    linux/arm64    653.1 MiB    292.4 MiB
   ```

   이는 이후 단계에서 필요합니다.

## RTSP 예제 애플리케이션 실행
<a name="examples-rtsp-procedure"></a>

Docker 컨테이너 내부 또는 외부에서 RTSP 예제 애플리케이션을 실행할 수 있습니다. 아래 해당 지침을 따릅니다.

**Topics**
+ [Docker 컨테이너 내](#examples-rtsp-within)
+ [Docker 컨테이너 외부](#examples-rtsp-outside)

### Docker 컨테이너 내
<a name="examples-rtsp-within"></a>

**RTSP 예제 애플리케이션 실행**

1. 다음 명령을 사용하여 Amazon Kinesis Video Streams Docker 컨테이너를 시작합니다.

   ```
   docker run -it YourImageId /bin/bash
   ```

1. 샘플 애플리케이션을 시작하려면 자격 AWS 증명, Amazon Kinesis 비디오 스트림의 이름 및 RTSP 네트워크 카메라의 URL을 제공합니다.
**중요**  
임시 자격 증명을 사용하는 경우 도 제공해야 합니다`AWS_SESSION_TOKEN`. 아래 두 번째 예제를 참조하세요.

   ```
   export AWS_ACCESS_KEY_ID=YourAccessKeyId
   export AWS_SECRET_ACCESS_KEY=YourSecretKeyId
   export AWS_DEFAULT_REGION=YourAWSRegion
   ./kvs_gstreamer_sample YourStreamName YourRtspUrl
   ```

   **임시 자격 증명:**

   ```
   export AWS_ACCESS_KEY_ID=YourAccessKeyId
   export AWS_SECRET_ACCESS_KEY=YourSecretKeyId
   export AWS_SESSION_TOKEN=YourSessionToken
   export AWS_DEFAULT_REGION=YourAWSRegion
   ./kvs_gstreamer_sample YourStreamName YourRtspUrl
   ```

1. 에 로그인 AWS Management Console 하고 [Kinesis Video Streams 콘솔](https://console.aws.amazon.com//kinesisvideo/home/)을 엽니다.

   스트림을 봅니다.

1. Docker 컨테이너를 종료하려면 터미널 창을 닫거나를 입력합니다`exit`.



### Docker 컨테이너 외부
<a name="examples-rtsp-outside"></a>

Docker 컨테이너 **외부**에서 다음 명령을 사용합니다.

```
docker run -it YourImageId /bin/bash -c "export AWS_ACCESS_KEY_ID=YourAccessKeyId; export AWS_SECRET_ACCESS_KEY=YourSecretKeyId; export AWS_SESSION_TOKEN=YourSessionToken; export AWS_DEFAULT_REGION=Your AWS Region; ./kvs_gstreamer_sample YourStreamName YourRtspUrl"
```

# 예: Kinesis Video Streams 조각 구문 분석 및 렌더링
<a name="examples-renderer"></a>

에는 Amazon Kinesis 비디오 스트림 조각의 구문 분석 및 렌더링`KinesisVideoRendererExample`을 보여주는 라는 데모 애플리케이션이 [파서 라이브러리를 사용하여 스트리밍](parser-library.md) 포함되어 있습니다. 이 예제에서는 [JCodec](http://jcodec.org/)을 사용하여 [예: Kinesis Video Streams 생산자 SDK GStreamer 플러그인 - kvssink](examples-gstreamer-plugin.md) 애플리케이션을 사용해 수집된 H.264 인코딩 프레임을 디코딩합니다. JCodec을 사용하여 프레임을 디코딩한 후에는 [JFrame](https://docs.oracle.com/javase/7/docs/api/javax/swing/JFrame.html)을 사용하여 표시된 이미지가 렌더링됩니다.

이 예에서는 다음 작업을 수행하는 방법을 보여줍니다.
+ `GetMedia` API를 사용하여 Kinesis 비디오 스트림에서 프레임을 검색하고 볼 스트림을 렌더링합니다.
+ Kinesis Video Streams 콘솔을 사용하는 대신 사용자 지정 애플리케이션에서 스트림의 비디오 콘텐츠를 봅니다.

또한이 예제의 클래스를 사용하여 표시 전에 디코딩이 필요하지 않은 JPEG 파일 스트림과 같이 H.264로 인코딩되지 않은 Kinesis 비디오 스트림 콘텐츠를 볼 수 있습니다.

다음 절차에서는 렌더러 데모 애플리케이션을 설정하고 사용하는 방법을 소개합니다.

## 사전 조건
<a name="examples-renderer-prerequisites"></a>

렌더러 예제 라이브러리를 검사하고 사용하려면 다음이 필요합니다.
+ Amazon Web Services(AWS) 계정. AWS 계정이 아직 없는 경우 [Kinesis Video Streams 시작하기](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/getting-started.html)를 참조하세요.
+ [Eclipse Java Neon](https://www.eclipse.org/downloads/packages/release/neon/3/eclipse-jee-neon-3) 또는 [JetBrains IntelliJ Idea](https://www.jetbrains.com/idea/download/) 같은 Java 통합 개발 환경(IDE).

## 렌더러 예제 실행
<a name="examples-renderer-procedure"></a>

1. 디렉터리를 생성한 다음 GitHub 리포지토리에서 예제 소스 코드를 복제합니다.

   ```
   git clone https://github.com/aws/amazon-kinesis-video-streams-parser-library
   ```

1. 사용 중인 Java IDE(예: [Eclipse](https://www.eclipse.org/) 또는 [IntelliJ IDEA](https://www.jetbrains.com/idea/))를 열고 다운로드한 Apache Maven 프로젝트를 가져옵니다.
   + **Eclipse:** [**File**], [**Import**], [**Maven**], [**Existing Maven Projects**]를 차례로 선택합니다. `kinesis-video-streams-parser-lib` 디렉터리로 이동합니다.
   + **IntelliJ Idea에서 ** [**Import**]를 선택합니다. 다운로드한 패키지의 루트에 있는 `pom.xml` 파일을 찾습니다.
**참고**  
IntelliJ가 종속성을 찾을 수 없는 경우 다음을 수행해야 할 수 있습니다.  
**빌드 정리:** **File(파일)**, **Settings(설정)**, **Build, Execution, Deployment(구축, 실행, 배포)**, **Compiler(컴파일러)**를 선택합니다. **재구축 시 출력 디렉터리 지우기**가 선택되어 있는지 확인한 다음 **빌드**, **빌드 프로젝트를** 선택합니다.
**프로젝트 다시 가져오기:** 프로젝트의 컨텍스트(오른쪽 클릭) 메뉴를 열고 **Maven**, **Reimport(다시 가져오기)**를 선택합니다.

    자세한 내용은 관련 IDE 문서를 참조하십시오.

1. Java IDE에서 `src/test/java/com.amazonaws.kinesisvideo.parser/examples/KinesisVideoRendererExampleTest`를 엽니다.

1. 파일에서 `@Ignore` 명령을 제거합니다.

1. 파라미터를 Kinesis 비디오 스트림`.stream`의 이름으로 업데이트합니다.

1. `KinesisVideoRendererExample` 테스트를 실행합니다.

## 작동 방식
<a name="examples-renderer-howitworks"></a>

**Topics**
+ [MKV 데이터 전송](#examples-renderer-howitworks-send)
+ [MKV 조각을 프레임으로 구문 분석](#examples-renderer-howitworks-parse)
+ [프레임 디코딩 및 표시](#examples-renderer-howitworks-display)

### MKV 데이터 전송
<a name="examples-renderer-howitworks-send"></a>

이 예제에서는를 사용하여 `rendering_example_video.mkv` 파일에서 샘플 MKV 데이터를 전송`PutMedia`하여 **render-example-stream**이라는 스트림으로 비디오 데이터를 전송합니다.

이 애플리케이션에서는 `PutMediaWorker`를 생성합니다.

```
PutMediaWorker putMediaWorker = PutMediaWorker.create(getRegion(),
    getCredentialsProvider(),
    getStreamName(),
    inputStream,
    streamOps.amazonKinesisVideo);
executorService.submit(putMediaWorker);
```

`PutMediaWorker` 클래스에 대한 자세한 내용은 [파서 라이브러리를 사용하여 스트리밍](parser-library.md) 설명서의 [PutMedia 호출](parser-library-write.md#parser-library-write-example-putmedia) 단원을 참조하십시오.

### MKV 조각을 프레임으로 구문 분석
<a name="examples-renderer-howitworks-parse"></a>

그런 다음 이 예에서는 `GetMediaWorker`를 사용하여 스트림에서 MKV 조각을 검색해 구문 분석합니다.

```
GetMediaWorker getMediaWorker = GetMediaWorker.create(getRegion(),
    getCredentialsProvider(),
    getStreamName(),
    new StartSelector().withStartSelectorType(StartSelectorType.EARLIEST),
    streamOps.amazonKinesisVideo,
    getMediaProcessingArgumentsLocal.getFrameVisitor());
executorService.submit(getMediaWorker);
```

`GetMediaWorker` 클래스에 대한 자세한 내용은 [파서 라이브러리를 사용하여 스트리밍](parser-library.md)설명서의 [GetMedia 호출](parser-library-write.md#parser-library-write-example-getmedia) 단원을 참조하십시오.

### 프레임 디코딩 및 표시
<a name="examples-renderer-howitworks-display"></a>

이 예에서는 [JFrame](https://docs.oracle.com/javase/7/docs/api/javax/swing/JFrame.html)을 사용하여 프레임을 디코딩하여 표시합니다.

다음 코드 예제는 `KinesisVideoFrameViewer` 클래스에서 가져온 것으로, `JFrame`을 확장합니다.

```
 public void setImage(BufferedImage bufferedImage) {
    image = bufferedImage;
    repaint();
}
```

이미지는 [java.awt.image.BufferedImage](https://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html)의 인스턴스로 표시됩니다. `BufferedImage` 작업 방법을 보여주는 예제는 [이미지 읽기/로드](https://docs.oracle.com/javase/tutorial/2d/images/loadimage.html)를 참조하십시오.