本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
播放 Kinesis 视频流中的媒体
打开 Kinesis Video Streams 控制台
将在控制台中显示从 Raspberry Pi 发送的视频流。
注意
视频可能需要几秒钟才能出现在控制台中。
直播开始播放后,你可以在主机中尝试以下功能:
-
在 Video preview (视频预览) 部分中,使用导航控件后退和快进流。
-
在直播信息部分,查看流媒体的编解码器、分辨率和比特率。特意将树莓派的分辨率和比特率值设置得较低,以最大限度地减少本教程的带宽使用量。
要查看为您的直播创建的亚马逊 CloudWatch 指标,请在中选择 “查看直播指标” CloudWatch 。
-
在 Data retention period (数据保留期) 下面,可以看到视频流保留 1 天。您可以编辑该值并将其设置为 No data retention (不保留数据),或者设置 1 天到几年之间的值。
-
在 “Server-side 加密” 下,请注意,您的数据是使用 AWS Key Management Service (AWS KMS) 维护的密钥进行静态加密的。
播放问题
以下是一些经常遇到的播放问题以及如何解决这些问题。
没有媒体,但日志中有 PERSISTED Ack
如果你在日志中看到 PERSISTED Acks,则表示 Kinesis Video Streams 已成功摄取并存储了上传的媒体。kvssink从 Kinesis Video Streams 收到的 Ack 看起来像这样。在 JSON 中,查看"EventType"密钥的值。
{"EventType":"RECEIVED","FragmentTimecode":252200,"FragmentNumber":"12345678901234567890123456724587702494771079511"} {"EventType":"BUFFERING","FragmentTimecode":252467,"FragmentNumber":"12345678901234567890123456781729223736853277017"} {"EventType":"RECEIVED","FragmentTimecode":252467,"FragmentNumber":"12345678901234567890123456781729223736853277017"} {"EventType":"BUFFERING","FragmentTimecode":253000,"FragmentNumber":"12345678901234567890123456738870744847093249408"} {"EventType":"PERSISTED","FragmentTimecode":252200,"FragmentNumber":"12345678901234567890123456724587702494771079511"} {"EventType":"PERSISTED","FragmentTimecode":252467,"FragmentNumber":"1234567890123456789012345671729223736853277017"}
解决方法:
在 Kinesis Video Streams 控制台中等待一两分钟,然后使用双向右箭头。如果未出现任何媒体,请验证您的直播是否已发送到正确的区域,并检查直播名称的拼写情况。你可以在日志中找到这些信息。
为 kvssink 提供一个区域有关 kvssink 如何确定要使用哪个区域的更多信息,请参见。
媒体需要很长时间才能加载 AWS 管理控制台
由于网络带宽差或设备受限,媒体在控制台中的加载速度可能很慢,但也可能与视频编码和分段有关。
视频编码基础知识:
-
H.264 H.265 编码器使用关键帧 (I-Frames) 和预测帧 () 来实现高效压缩。P-Frames
-
Key-frames 包含完整的图像数据,而 P-frames 仅包含对先前帧的更改。
-
“关键帧间隔” 决定了关键帧在视频流中出现的频率。
直播中的碎片化:
-
在 Kinesis 视频流中,新的片段从每个关键帧开始。有关更多信息,请参阅 Kinesis 视频流数据模型。
-
片段长度(以秒为单位)可以估算为:关键帧间隔 ÷ 帧速率
示例:
对于关键帧间隔为 30 且帧速率为 15 fps 的直播:
片段长度 = 30 ÷ 15 = 2 秒
由于较长的关键帧间隔,较长的片段会增加流媒体的延迟。
解决方法:
要缩短加载时间,可以考虑缩短关键帧间隔。这将创建更短的片段,减少延迟,但也会增加视频文件的大小。
对于 x264enc GStreamer 元素,您可以通过以下属性显式设置关键帧间隔:key-int-max
x264enc bframes=0 key-int-max=60
查看日志输出时,请注意上传客户端从 Kinesis Video Streams 收到 ACK 的频率。生成的关键帧越多,返回的 ACK 越多。
媒体失真或有瑕疵
要解决此问题,请确保所有电缆都紧密连接。查看摄像头模块libcamera-hello(或传统 raspistill Pi 摄像机)的输出。
在 GStreamer 管道中,kvssink替换为autovideosink或matroskamux和。filesink例如:
... x264enc tune=zerolatency speed-preset=ultrafast bframes=0 key-int-max=60 byte-stream=true ! h264parse ! matroskamux ! filesink location=output.mkv
查看使用时打开的媒体播放器的输出文件filesink或媒体播放器autovideosink,以查看是否也存在工件。
还要查看以下管道的输出:
gst-launch-1.0 autovideosrc ! videoconvert ! autovideosink
向管道中添加元素(例如 dewarp
查看相机支持的输出编解码器并根据需要调整元素。
例如,如果您的 USB 摄像头仅支持 JPEG 输出,则在将媒体编码为使用之前,您需要 H.264 使用jpegparsex264enc和jpegdec元素转换媒体。在GStreamer论坛上搜索具有类似流水线 and/or网络摄像头设置的其他用户的帮助。