

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

# 예: 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**] 창에서 재생됩니다.