

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 检查代码
<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>

您可以通过调用 `[KinesisVideoClient](https://github.com/aws-amplify/aws-sdk-android/blob/main/aws-android-sdk-kinesisvideo/src/main/java/com/amazonaws/kinesisvideo/client/KinesisVideoClient.java)` 操作来创建 `[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)` 对象。

```
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 安卓库提供了`[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)`该接口的实现`MediaSource`。此类从设备的某个摄像头读取数据。

下面的代码示例 (摘自 `[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();
```

