

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 檢查程式碼
<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` 進行網路呼叫，需要可驗證的登入資料。您會傳入 執行個體`AWSCredentialsProvider`，該執行個體會從您在上一節修改`awsconfiguration.json`的檔案讀取 Amazon Cognito 登入資料。

## 建立 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();
```

