

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

# Android 생산자 라이브러리 사용
<a name="producer-sdk-android"></a>

Amazon Kinesis Video Streams 제공 Android 생산자 라이브러리를 사용하여 최소한의 구성으로 애플리케이션 코드를 작성하여 Android 디바이스에서 Kinesis 비디오 스트림으로 미디어 데이터를 전송할 수 있습니다.

애플리케이션이 Kinesis 비디오 스트림으로 데이터 스트리밍을 시작할 수 있도록 다음 단계를 수행하여 코드를 Kinesis Video Streams와 통합합니다.

1. `KinesisVideoClient` 객체의 인스턴스를 생성합니다.

1. 미디어 원본 정보를 제공하여 `MediaSource` 객체를 생성합니다. 예를 들어 카메라 미디어 원본을 생성할 때 카메라를 식별하고 카메라가 사용하는 인코딩을 지정하는 등 정보를 제공합니다.

   스트리밍을 시작하고자 할 때 사용자 지정 미디어 원본을 생성해야 합니다.

## 절차: Android 생산자 SDK 사용
<a name="producer-sdk-android-using"></a>

이 절차에서는 Android 애플리케이션에서 Kinesis Video Streams Android 생산자 클라이언트를 사용하여 Kinesis 비디오 스트림으로 데이터를 전송하는 방법을 보여줍니다.

이 절차에는 다음 단계가 포함됩니다.
+ [사전 조건](producersdk-android-prerequisites.md)
+ [Android 생산자 라이브러리 코드 다운로드 및 구성](producersdk-android-downloadcode.md)
+ [코드 검사](producersdk-android-writecode.md)
+ [코드 실행 및 확인](producersdk-android-reviewcode.md)

# 사전 조건
<a name="producersdk-android-prerequisites"></a>

애플리케이션 코드 검사, 편집, 실행에는 [Android Studio](https://developer.android.com/studio/index.html)를 권장합니다. 안정적인 최신 버전을 사용하는 것이 좋습니다.

샘플 코드에서 Amazon Cognito 자격 증명을 제공합니다.

**Topics**
+ [사용자 풀 설정](#set-up-user-pool)
+ [자격 증명 풀 설정](#set-up-identity-pool)

## 사용자 풀 설정
<a name="set-up-user-pool"></a>

**사용자 풀을 설정하려면**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)에 로그인하고 리전이 올바른지 확인합니다.

1. 왼쪽 탐색 창에서 **사용자 풀을** 선택합니다.

1. **사용자 풀** 섹션에서 **사용자 풀 생성을** 선택합니다.

1. 다음 섹션을 완료합니다.

   1. **1단계: 로그인 환경 구성** - **Cognito 사용자 풀 로그인 옵션** 섹션에서 적절한 옵션을 선택합니다.

      **다음**을 선택합니다.

   1. **2단계: 보안 요구 사항 구성** - 적절한 옵션을 선택합니다.

      **다음**을 선택합니다.

   1. **3단계: 가입 환경 구성** - 적절한 옵션을 선택합니다.

      **다음**을 선택합니다.

   1. **4단계: 메시지 전송 구성** - 적절한 옵션을 선택합니다.

      **IAM 역할 선택** 필드에서 기존 역할을 선택하거나 새 역할을 생성합니다.

      **다음**을 선택합니다.

   1. **5단계: 앱 통합 **- 적절한 옵션을 선택합니다.

      **초기 앱 클라이언트** 필드에서 **기밀 클라이언트**를 선택합니다.

      **다음**을 선택합니다.

   1. **6단계: 검토 및 생성** - 이전 섹션의 선택 사항을 검토한 다음 **사용자 풀 생성을** 선택합니다.

1. **사용자 풀** 페이지에서 방금 생성한 풀을 선택합니다.

   **사용자 풀 ID**를 복사하고 나중에 사용할 수 있도록 기록해 둡니다. `awsconfiguration.json` 파일에서이 값은 입니다`CognitoUserPool.Default.PoolId`.

1. **앱 통합** 탭을 선택하고 페이지 하단으로 이동합니다.

1. **앱 클라이언트 목록** 섹션에서 방금 생성한 **앱 클라이언트 이름을** 선택합니다.

   **클라이언트 ID**를 복사하고 나중에 사용할 수 있도록 기록해 둡니다. `awsconfiguration.json` 파일에서이 값은 입니다`CognitoUserPool.Default.AppClientId`.

1. **클라이언트** 보안 암호를 표시하고 나중에 사용할 수 있도록 기록해 둡니다. `awsconfiguration.json` 파일에서 입니다`CognitoUserPool.Default.AppClientSecret`.

## 자격 증명 풀 설정
<a name="set-up-identity-pool"></a>

**자격 증명 풀을 설정하려면**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)에 로그인하고 리전이 올바른지 확인합니다.

1. 왼쪽 탐색 창에서 **자격 증명 풀을** 선택합니다.

1. **자격 증명 풀 생성**을 선택합니다.

1. 자격 증명 풀을 구성합니다.

   1. **1단계: 자격 증명 풀 신뢰 구성** - 다음 섹션을 완료합니다.
      + **사용자 액세스** - **인증된 액세스** 선택
      + **인증된 자격 증명 소스** - **Amazon Cognito 사용자 풀** 선택

      **다음**을 선택합니다.

   1. **2단계: 권한 구성** - **인증된 역할** 섹션에서 다음 필드를 작성합니다.
      + **IAM 역할** - **새 IAM 역할 생성을** 선택합니다.
      + **IAM 역할 이름** - 이름을 입력하고 이후 단계를 위해 기록해 둡니다.

      **다음**을 선택합니다.

   1. **3단계: 자격 증명 공급자 연결** - **사용자 풀 세부 정보** 섹션에서 다음 필드를 작성합니다.
      + **사용자 풀 ID** - 이전에 생성한 사용자 풀을 선택합니다.
      + **앱 클라이언트 ID** - 이전에 생성한 앱 클라이언트 ID를 선택합니다.

      **다음**을 선택합니다.

   1. **4단계: 속성 구성** - **자격 증명 풀 이름 필드에 이름을** 입력합니다.

      **다음**을 선택합니다.

   1. **5단계: 검토 및 생성** - 각 섹션의 선택 사항을 검토한 다음 자격 **증명 풀 생성을** 선택합니다.

1. **자격 증명 풀** 페이지에서 새 자격 증명 풀을 선택합니다.

   자격 **증명 풀 ID**를 복사하고 나중에 사용할 수 있도록 기록해 둡니다. `awsconfiguration.json` 파일에서이 값은 입니다`CredentialsProvider.CognitoIdentity.Default.PoolId`.

1. IAM 역할에 대한 권한을 업데이트합니다.

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

   1. 왼쪽 탐색 창에서 **역할을** 선택합니다.

   1. 위에서 생성한 역할을 찾아 선택합니다.
**참고**  
필요한 경우 검색 창을 사용합니다.

   1. 연결된 권한 정책을 선택합니다.

      **편집**을 선택합니다.

   1. **JSON** 탭을 선택하고 정책을 다음으로 바꿉니다.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "cognito-identity:*",
                      "kinesisvideo:*"
                  ],
                  "Resource": [
                      "*"
                  ]
              }
          ]
      }
      ```

------

      **다음**을 선택합니다.

   1. 아직 선택하지 않은 경우 **이 새 버전을 기본값으로 설정** 옆의 상자를 선택합니다.

      **변경 사항 저장**을 선택합니다.

# Android 생산자 라이브러리 코드 다운로드 및 구성
<a name="producersdk-android-downloadcode"></a>

Android 생산자 라이브러리 절차의이 섹션에서는 Android 예제 코드를 다운로드하고 Android Studio에서 프로젝트를 엽니다.

이 예제에 대한 사전 조건 및 기타 세부 정보는 [Android 생산자 라이브러리 사용을 참조하세요](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-sdk-android.html).



1. 디렉터리를 생성한 다음 GitHub 리포지토리 AWS Mobile SDK for Android 에서를 복제합니다.

   ```
   git clone https://github.com/awslabs/aws-sdk-android-samples
   ```

1. [Android Studio](https://developer.android.com/studio/index.html)를 엽니다.

1. 열리는 화면에서 [**Open an existing Android Studio project**]를 선택합니다.

1. `aws-sdk-android-samples/AmazonKinesisVideoDemoApp` 디렉터리로 이동하여 [**OK**]를 선택합니다.

1. `AmazonKinesisVideoDemoApp/src/main/res/raw/awsconfiguration.json` 파일을 엽니다.

   `CredentialsProvider` 노드에서 [사전 조건](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-sdk-android.html#producersdk-android-prerequisites) 섹션의 자격 증명 풀 **설정 절차에서 자격 증명 풀** ID를 제공하고 AWS 리전 (예: **us-west-2**)를 제공합니다.

   `CognitoUserPool` 노드에서 [사전 조건](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-sdk-android.html#producersdk-android-prerequisites) 섹션의 **사용자 풀 설정 절차에서 앱 클라이언트 보안 암호, 앱 클라이언트 ID 및 풀** ID를 제공하고 AWS 리전 (예: **us-west-2**)를 제공합니다.

1. `awsconfiguration.json` 파일은 다음과 비슷합니다.

   ```
   {
     "Version": "1.0",
     "CredentialsProvider": {
       "CognitoIdentity": {
         "Default": {
           "PoolId": "us-west-2:01234567-89ab-cdef-0123-456789abcdef",
           "Region": "us-west-2"
         }
       }
     },
     "IdentityManager": {
       "Default": {}
     },
     "CognitoUserPool": {
       "Default": {
         "AppClientSecret": "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmno",
         "AppClientId": "0123456789abcdefghijklmnop",
         "PoolId": "us-west-2_qRsTuVwXy",
         "Region": "us-west-2"
       }
     }
   }
   ```

1. 리전`AmazonKinesisVideoDemoApp/src/main/java/com/amazonaws/kinesisvideo/demoapp/KinesisVideoDemoApp.java`으로를 업데이트합니다(다음 샘플에서는 **US\$1WEST\$12**로 설정됨).

   ```
   public class KinesisVideoDemoApp extends Application {
       public static final String TAG = KinesisVideoDemoApp.class.getSimpleName();
       public static Regions KINESIS_VIDEO_REGION = Regions.US_WEST_2;
   ```

    AWS 리전 상수에 대한 자세한 내용은 [리전을 참조하세요](https://aws-amplify.github.io/aws-sdk-android/docs/reference/com/amazonaws/regions/Regions.html).

# 코드 검사
<a name="producersdk-android-writecode"></a>

[Android 생산자 라이브러리 절차의](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-sdk-android.html)이 섹션에서는 예제 코드를 검토합니다.

Android 테스트 애플리케이션(`AmazonKinesisVideoDemoApp`)은 다음과 같은 코딩 패턴을 보입니다.
+ `KinesisVideoClient`의 인스턴스를 만듭니다.
+ `MediaSource`의 인스턴스를 만듭니다.
+ 스트리밍을 시작합니다. 를 시작`MediaSource`하면 클라이언트로 데이터 전송이 시작됩니다.

다음 단원들에서 세부 정보가 제공됩니다.



## KinesisVideoClient의 인스턴스 생성
<a name="producersdk-android-review-code-create-client"></a>

`[createKinesisVideoClient](https://github.com/aws-amplify/aws-sdk-android/blob/main/aws-android-sdk-kinesisvideo/src/main/java/com/amazonaws/mobileconnectors/kinesisvideo/client/KinesisVideoAndroidClientFactory.java)` 작업을 호출하여 `[KinesisVideoClient](https://github.com/aws-amplify/aws-sdk-android/blob/main/aws-android-sdk-kinesisvideo/src/main/java/com/amazonaws/kinesisvideo/client/KinesisVideoClient.java)` 객체를 생성합니다.

```
mKinesisVideoClient = KinesisVideoAndroidClientFactory.createKinesisVideoClient(
                    getActivity(),
                    KinesisVideoDemoApp.KINESIS_VIDEO_REGION,
                    KinesisVideoDemoApp.getCredentialsProvider());
```

`KinesisVideoClient`가 네트워크 호출을 하려면 인증을 위한 자격 증명이 필요합니다. 이전 섹션에서 수정한 `awsconfiguration.json` 파일에서 Amazon Cognito 자격 증명을 읽`AWSCredentialsProvider`는의 인스턴스를 전달합니다.

## MediaSource 인스턴스 생성
<a name="producersdk-android-review-code-create-mediasource"></a>

Kinesis 비디오 스트림으로 바이트를 전송하려면 데이터를 생성해야 합니다. Amazon Kinesis Video Streams는 데이터 소스를 나타내는 `[MediaSource](https://github.com/aws-amplify/aws-sdk-android/blob/main/aws-android-sdk-kinesisvideo/src/main/java/com/amazonaws/kinesisvideo/internal/client/mediasource/MediaSource.java)` 인터페이스를 제공합니다.

예를 들어 Kinesis Video Streams Android 라이브러리는 `MediaSource` 인터페이스 `[AndroidCameraMediaSource](https://github.com/aws-amplify/aws-sdk-android/blob/main/aws-android-sdk-kinesisvideo/src/main/java/com/amazonaws/mobileconnectors/kinesisvideo/mediasource/android/AndroidCameraMediaSource.java)` 구현을 제공합니다. 이 클래스는 디바이스의 카메라 중 하나에서 데이터를 읽습니다.

다음 코드 예제(`[fragment/StreamConfigurationFragment.java](https://github.com/awslabs/aws-sdk-android-samples/blob/main/AmazonKinesisVideoDemoApp/src/main/java/com/amazonaws/kinesisvideo/demoapp/fragment/StreamConfigurationFragment.java)` 파일의 예제)에서 미디어 원본의 구성이 생성됩니다.

```
private AndroidCameraMediaSourceConfiguration getCurrentConfiguration() {
return new AndroidCameraMediaSourceConfiguration(
        AndroidCameraMediaSourceConfiguration.builder()
                .withCameraId(mCamerasDropdown.getSelectedItem().getCameraId())
                .withEncodingMimeType(mMimeTypeDropdown.getSelectedItem().getMimeType())
                .withHorizontalResolution(mResolutionDropdown.getSelectedItem().getWidth())
                .withVerticalResolution(mResolutionDropdown.getSelectedItem().getHeight())
                .withCameraFacing(mCamerasDropdown.getSelectedItem().getCameraFacing())
                .withIsEncoderHardwareAccelerated(
                        mCamerasDropdown.getSelectedItem().isEndcoderHardwareAccelerated())
                .withFrameRate(FRAMERATE_20)
                .withRetentionPeriodInHours(RETENTION_PERIOD_48_HOURS)
                .withEncodingBitRate(BITRATE_384_KBPS)
                .withCameraOrientation(-mCamerasDropdown.getSelectedItem().getCameraOrientation())
                .withNalAdaptationFlags(StreamInfo.NalAdaptationFlags.NAL_ADAPTATION_ANNEXB_CPD_AND_FRAME_NALS)
                .withIsAbsoluteTimecode(false));
}
```

다음 코드 예제(`[fragment/StreamingFragment.java](https://github.com/awslabs/aws-sdk-android-samples/blob/main/AmazonKinesisVideoDemoApp/src/main/java/com/amazonaws/kinesisvideo/demoapp/fragment/StreamingFragment.java)` 파일의 예제)에서 미디어 원본이 생성됩니다.

```
mCameraMediaSource = (AndroidCameraMediaSource) mKinesisVideoClient
    .createMediaSource(mStreamName, mConfiguration);
```

## 미디어 소스 시작
<a name="producersdk-android-review-code-start-mediasource"></a>

미디어 원본이 데이터 생성 및 클라이언트로의 전송을 시작할 수 있도록 미디어 원본을 시작합니다. 다음 코드 예제는 `[fragment/StreamingFragment.java](https://github.com/awslabs/aws-sdk-android-samples/blob/main/AmazonKinesisVideoDemoApp/src/main/java/com/amazonaws/kinesisvideo/demoapp/fragment/StreamingFragment.java)` 파일의 예제입니다.

```
mCameraMediaSource.start();
```



# 코드 실행 및 확인
<a name="producersdk-android-reviewcode"></a>

Android [생산자 라이브러리에 대한 Android](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-sdk-android.html) 예제 애플리케이션을 실행하려면 다음을 수행합니다.

1. Android 디바이스에 연결합니다.

1. [**Run**], [**Run...**], [**Edit configurations...**]를 차례로 선택합니다.

1. 더하기 아이콘(**\$1**), **Android 앱을** 선택합니다. **이름** 필드에 **AmazonKinesisVideoDemoApp**을 입력합니다. [**Module**] 풀다운에서 [**AmazonKinesisVideoDemoApp**]을 선택합니다. **확인**을 선택합니다.

1. [**Run**]과 [**Run**]을 차례로 선택합니다.

1. [**Select a Deployment Target**] 화면에서 연결된 디바이스를 선택하고 [**OK**]를 선택합니다.

1. 디바이스의 [**AWSKinesisVideoDemoApp**] 애플리케이션에서 [**Create new account**]를 선택합니다.

1. [**USERNAME**], [**Password**], [**Given name**], [**Email address**] 및 [**Phone number**]의 값을 입력한 다음 [**Sign up**]을 선택합니다.
**참고**  
이러한 값의 제약 조건은 다음과 같습니다.  
**Password:** 대문자, 소문자, 숫자, 특수 문자를 포함해야 합니다. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)의 사용자 풀 페이지에서 이러한 제약 조건을 변경할 수 있습니다.
**Email address:** 확인 코드를 수신할 수 있는 유효한 주소여야 합니다.
**Phone number:** **\$1*<Country code>**<Number>*** 형식이어야 합니다(예: **\$112065551212**).

1. 이메일로 받은 코드를 입력하고 **확인을** 선택합니다. **확인**을 선택합니다.

1. 다음 페이지에서 기본값을 유지하고 **스트림**을 선택합니다.

1. 에 로그인 AWS Management Console 하고 미국 서부(오레곤) 리전에서 [Kinesis Video Streams 콘솔](https://console.aws.amazon.com//kinesisvideo/home/)을 엽니다.

   [**Manage Streams**] 페이지에서 [**demo-stream**]을 선택합니다.

1. 내장 플레이어에서 스트리밍 비디오가 재생됩니다. 프레임이 쌓여 비디오가 재생될 때까지 잠깐 기다려야 할 수 있습니다(일반적인 대역폭과 프로세서 상태에서 최대 10초).
**참고**  
디바이스의 화면이 회전하면 (예: 세로에서 가로로) 애플리케이션이 비디오 스트리밍을 중지합니다.

코드 예제는 스트림을 생성합니다. 코드에 있는 `MediaSource`가 시작되면 카메라에서 `KinesisVideoClient`로 프레임을 전송하기 시작합니다. 그런 다음 클라이언트는 **데모 스트림**이라는 Kinesis 비디오 스트림으로 데이터를 전송합니다.