本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
示例:使用 Kinesis Video Streams 发送数据 PutMedia API
此示例演示如何使用PutMediaAPI。它显示了如何发送已经是容器格式的数据 (MKV)。如果您的数据在发送前必须汇编成容器格式(例如,如果您要将摄像机视频数据组合成帧),请参阅上传到 Kinesis Video Streams。
注意
该PutMedia
操作仅在 C++ 和 Java 中可用SDKs。这是因为连接、数据流和确认采用全双工管理。其他语言不支持它。
下载并配置代码
按照以下步骤下载 Java 示例代码,将项目导入 Java 中IDE,配置库位置,然后配置代码以使用您的 AWS 凭据。
-
创建目录并从 GitHub存储库中克隆示例源代码。
PutMedia
示例是 Java 的一部分。git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-java
-
打开你正在使用IDE的 Java(例如 Eclipse 或 Intelli
J IDEA ),然后导入你下载的 Apache Maven 项目: -
在 Eclipse 中:依次选择 File (文件)、Import (导入)、Maven 和 Existing Maven Projects (现有的 Maven 项目),然后导航到下载的程序包的根目录。选择
pom.xml
文件。 -
在 IntelliJ Idea 中:选择 Import。导航到下载的程序包的根目录中的
pom.xml
文件。
有关更多信息,请参阅相关IDE文档。
-
-
更新项目,以便IDE可以找到您导入的库。
-
对于 IntelliJIDEA,请执行以下操作:
-
打开项目的 lib 目录的上下文菜单 (右键单击),选择 Add as library。
-
选择 “文件”,然后选择 “项目结构”。
-
在 Project Settings 下,选择 Modules。
-
在 Sources (源) 选项卡中,将 Language Level (语言级别) 设置为
7
或更大值。
-
-
对于 Eclipse,执行以下操作:
-
打开项目的上下文菜单 (右键单击),并依次选择 Properties、Java Build Path 和 Source。然后执行以下操作:
-
在 Source 选项卡中,双击 Native library location。
-
在 Native Library Folder Configuration 向导中,选择 Workspace。
-
在 Native Library Folder 选择项中,选择项目中的 lib 目录。
-
-
打开项目的上下文菜单 (右键单击),选择 Properties。然后执行以下操作:
-
在 Libraries 选项卡上,选择 Add Jars。
-
在JAR选择向导中,选择项目目录中的所有.jars。
lib
-
-
-
编写并检查代码
示PutMedia
API例 (PutMediaDemo
) 显示了以下编码模式:
此部分中的代码示例来自 PutMediaDemo
类。
创建 PutMediaClient
创建PutMediaClient
对象需要以下参数:
-
URI用于终
PutMedia
端节点。 -
InputStream
指向要流式传输的MKV文件。 -
流名称。此示例使用已在 使用 Java 制作器库 (
my-stream
) 中创建的流。要使用其他流,请更改以下参数:private static final String STREAM_NAME="my-stream";
注意
该
PutMedia
API示例未创建直播。你必须使用测试应用程序使用 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();
运行并验证代码
要运行该PutMedia
API示例,请执行以下操作:
-
在 Kinesis Video Streams 控制台
my-stream
中或使用 AWS CLI创建名为的直播。 -
将您的工作目录更改为 Java 生产者SDK目录:
cd /<YOUR_FOLDER_PATH_WHERE_SDK_IS_DOWNLOADED>/amazon-kinesis-video-streams-producer-sdk-java/
-
编译 Java SDK 和演示应用程序:
mvn package
-
在
/tmp
目录中创建临时文件名:jar_files=$(mktemp)
-
创建从本地存储库到文件的依赖项的类路径字符串:
mvn -Dmdep.outputFile=$jar_files dependency:build-classpath
-
将
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)
-
按如下所示从命令行运行演示,并提供您的 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
-
打开 Kinesis Video Stream
s 控制台,然后在 “管理直播” 页面上选择您的直播。该视频将在 Video Preview 窗格中播放。