示例:使用 Kinesis Video Streams 发送数据 PutMedia API - Amazon Kinesis Video Streams

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

示例:使用 Kinesis Video Streams 发送数据 PutMedia API

此示例演示如何使用PutMediaAPI。它显示了如何发送已经是容器格式的数据 (MKV)。如果您的数据在发送前必须汇编成容器格式(例如,如果您要将摄像机视频数据组合成帧),请参阅上传到 Kinesis Video Streams

注意

PutMedia操作仅在 C++ 和 Java 中可用SDKs。这是因为连接、数据流和确认采用全双工管理。其他语言不支持它。

下载并配置代码

按照以下步骤下载 Java 示例代码,将项目导入 Java 中IDE,配置库位置,然后配置代码以使用您的 AWS 凭据。

  1. 创建目录并从 GitHub存储库中克隆示例源代码。PutMedia 示例是 Java 的一部分。

    git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-java
  2. 打开你正在使用IDE的 Java(例如 Eclipse 或 Intelli J IDEA),然后导入你下载的 Apache Maven 项目:

    • 在 Eclipse 中:依次选择 File (文件)、Import (导入)、MavenExisting Maven Projects (现有的 Maven 项目),然后导航到下载的程序包的根目录。选择 pom.xml 文件。

    • 在 IntelliJ Idea 中:选择 Import。导航到下载的程序包的根目录中的 pom.xml 文件。

    有关更多信息,请参阅相关IDE文档。

  3. 更新项目,以便IDE可以找到您导入的库。

    • 对于 IntelliJIDEA,请执行以下操作:

      1. 打开项目的 lib 目录的上下文菜单 (右键单击),选择 Add as library

      2. 选择 “文件”,然后选择 “项目结构”。

      3. Project Settings 下,选择 Modules

      4. Sources (源) 选项卡中,将 Language Level (语言级别) 设置为 7 或更大值。

    • 对于 Eclipse,执行以下操作:

      1. 打开项目的上下文菜单 (右键单击),并依次选择 PropertiesJava Build PathSource。然后执行以下操作:

        1. Source 选项卡中,双击 Native library location

        2. Native Library Folder Configuration 向导中,选择 Workspace

        3. Native Library Folder 选择项中,选择项目中的 lib 目录。

      2. 打开项目的上下文菜单 (右键单击),选择 Properties。然后执行以下操作:

        1. Libraries 选项卡上,选择 Add Jars

        2. JAR选择向导中,选择项目目录中的所有.jars。lib

编写并检查代码

PutMediaAPI例 (PutMediaDemo) 显示了以下编码模式:

此部分中的代码示例来自 PutMediaDemo 类。

创建 PutMediaClient

创建PutMediaClient对象需要以下参数:

  • URI用于终PutMedia端节点。

  • InputStream指向要流式传输的MKV文件。

  • 流名称。此示例使用已在 使用 Java 制作器库 (my-stream) 中创建的流。要使用其他流,请更改以下参数:

    private static final String STREAM_NAME="my-stream";
    注意

    PutMediaAPI示例未创建直播。你必须使用测试应用程序使用 Java 制作器库、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();

对媒体进行流式处理并暂停线程

在创建客户端后,此示例使用 putMediaInBackground 开始异步流式处理。随后,主线程将暂停并显示 latch.await,直到 AckConsumer 返回,此时客户端已关闭。

/* start streaming video in a background thread */ client.putMediaInBackground(); /* wait for request/response to complete */ latch.await(); /* close the client */ client.close();

运行并验证代码

要运行该PutMediaAPI示例,请执行以下操作:

  1. 在 Kinesis Video Streams 控制台my-stream中或使用 AWS CLI创建名为的直播。

  2. 将您的工作目录更改为 Java 生产者SDK目录:

    cd /<YOUR_FOLDER_PATH_WHERE_SDK_IS_DOWNLOADED>/amazon-kinesis-video-streams-producer-sdk-java/
  3. 编译 Java SDK 和演示应用程序:

    mvn package
  4. /tmp 目录中创建临时文件名:

    jar_files=$(mktemp)
  5. 创建从本地存储库到文件的依赖项的类路径字符串:

    mvn -Dmdep.outputFile=$jar_files dependency:build-classpath
  6. 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)
  7. 按如下所示从命令行运行演示,并提供您的 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
  8. 打开 Kinesis Video Stream s 控制台,然后在 “管理直播” 页面上选择您的直播。该视频将在 Video Preview 窗格中播放。