p } ?>

如何减少 Amazon Kinesis 视频流的延迟

27

减少 Amazon Kinesis 视频流延迟的方法 第二部分

作者:Dean Colcott,日期:2022年12月21日在这篇关于如何减少 Amazon Kinesis 视频流KVS管理媒体延迟的第二部分中,我将描述如何优化 KVS、媒体生产者和媒体播放器的配置,以达到最佳延迟设置。此外,我还将介绍 Amazon Kinesis 视频流 Web 观看器,并进行一系列实验,以验证在不同条件下可以实现的延迟值。

在 第一部分 中,我介绍了流媒体的基本概念、KVS 的操作、常见设计模式以及导致 KVS 管理流媒体延迟的主要因素。

关键要点

KVS 实时媒体延迟的减少方法

优化 KVS 提供的 HLS 播放列表设置以支持实时媒体。减小 KVS 媒体生产者设置的片段长度。在媒体播放器支持的情况下,程序化地减少媒体播放器的片段缓冲,调整播放速度略高于 x1如 x105 / x11,以保持与媒体实时边缘的同步。

有效配置 HLS 播放列表

确保在请求 KVS HLS 播放列表 URL 时,PlaybackMode 设置为 LIVE,并建议 MaxMediaPlaylistFragmentResults 至少设置为 3 以确保低延迟和稳健的媒体质量。设置片段长度应当依据网络条件适当调整。

减少 KVS 实时媒体的延迟

减少 KVS 中流媒体延迟的最有效方法如下:

优化 KVS 提供的 HLS 播放列表设置以支持实时媒体。降低 KVS 媒体生产者设置的片段长度。在媒体播放器支持的情况下:程序化地减少媒体播放器的片段缓冲。将播放速度略高于 x1例如 x105 / x11,以便始终跟上媒体的实时边缘。

调整缓冲和片段设置以实现低延迟通常会以视频质量和重新缓冲为代价,尤其是在网络不稳定时。因此,建议针对预期的网络条件全面测试所应用的设置。

方案细节稳健的实时视频质量和低延迟提供 5 10 个片段在 HLS 媒体播放列表中,使用 1 秒的片段长度。激进调整延迟提供 3 个片段在 HLS 媒体播放列表中,使用 05 秒的片段长度,程序化限制媒体播放器缓冲为 2 3 个片段,播放速度略高于 x1。

参考 制作人与播放器之间的延迟过高

优化 KVS HLS 播放列表设置以支持实时媒体

KVS 存档媒体 API 支持 GetHLSStreamingSessionURL 调用以请求 HLS 媒体播放列表并访问媒体片段。以下示例为简单的 Python 脚本,用于请求 KVS 的 GetHLSStreamingSessionURL API 返回所请求流和设置的 HLS 媒体播放列表的 URL。

pythonimport boto3

KVSSTREAMNAME = [输入 KVS 流名称]REGION = [输入 AWS 区域]

=====================================================

创建 AWS Kinesis Video 客户端

kvs = boto3client(kinesisvideo regionname=REGION)

=====================================================

获取该流的 KVS 端点

endpoint = kvsgetdataendpoint(APIName=GETHLSSTREAMINGSESSIONURLStreamName=KVSSTREAMNAME)[DataEndpoint]

print(fnKVS ENDPOINT {endpoint})

=====================================================

获取 KVS 存档媒体客户端

kvam = boto3client(kinesisvideoarchivedmedia endpointurl=endpoint regionname=REGION)

获取实时 HLS URL

hlsplaybackurl = kvamgethlsstreamingsessionurl(StreamName=KVSSTREAMNAMEPlaybackMode=LIVEMaxMediaPlaylistFragmentResults=3Expires=43200)[HLSStreamingSessionURL]

print(fnLIVE HLSSTREAMINGSESSIONURL {hlsplaybackurl}n)

此脚本的输出是 KVS 流 HLS 主播放列表m3u8 文件的 URL。可以直接在支持的浏览器如 Safari或桌面媒体播放器如 VLC中使用该链接播放 KVS 媒体流。HLS URL 是返回的,并附有 SessionToken,以提供对 KVS 媒体的时间限制访问,因此请注意如何管理此 URL。

在上述代码中,特别需要考虑两个参数:

PlaybackMode:设置为 LIVE 时,HLS 媒体播放列表会持续更新最新片段。这通常会在媒体播放器中显示实时通知,并在某些播放器中选择更适合低延迟媒体的预配置片段缓冲设置。MaxMediaPlaylistFragmentResults:返回 HLS 媒体播放列表中的最大片段数。限制此值也可以限制媒体播放器的片段缓冲并降低延迟。当 PlaybackMode 是 LIVE 时,返回最近的片段直到此值;而当 PlaybackMode 是 ONDEMAND 时,则返回可用的最旧片段,直至此最大值。

因此,为了在请求 KVS HLS 播放列表 URL 时减少延迟,请确保 PlaybackMode 设置为 LIVE,建议 MaxMediaPlaylistFragmentResults 至少设置为 3,以实现低延迟和稳健的媒体质量。

减少 KVS 媒体生产者设置的片段长度

媒体流的片段长度会影响延迟,因为它决定了生产者的初始缓冲和片段化时间,以及媒体播放器的缓冲时间。片段长度在 KVS 生产者中设置,并在 KVS 服务中保留。因此,由生产者创建的片段长度将由媒体播放器或消费者接收和缓冲。以下是如何使用简单的 GStreamer 媒体管道设置片段长度的示例。

加速器苹果版下载免费版使用 GStreamer KVS 插件:

以下 GStreamer 管道在 MacOS 设备上执行实时屏幕捕捉使用 avfvideosrc 插件,将原始视频编码为 H246 帧使用 vtench264hw 插件,并将编码流传递给 KvsSink 插件以将其导入 KVS。在示例中,来自相机的请求帧率和编码器的关键帧间隔均为 20 FPS,导致 1 秒的片段。

如何减少 Amazon Kinesis 视频流的延迟

bashgstlaunch10 avfvideosrc capturescreen=true ! videoconvert ! videoscale ! video/xrawwidth=1280height=720framerate=20/1 ! vtench264hw allowframereordering=FALSE realtime=TRUE maxkeyframeinterval=20 ! h264parse ! video/xh264streamformat=avcalignment=auprofile=baseline ! kvssink streamname=STREAMNAME awsregion=REGION accesskey=ACCESSKEY secretkey=SECRETKEY retentionperiod=RETENTIONHRS

要将片段减少到 05 秒,请通过调整 maxkeyframeinterval 的值将关键帧间隔设置为 10。在关键帧间隔为 10 和帧率为 20 fps 的情况下,这将在 kvssink 元素中触发 05 秒的片段。还可以在这个示例中将帧率提高到 40 fps,前提是相机支持,但这将对网络带宽和 KVS 媒体流消耗成本产生更大的影响。

使用 KVS 生产者库:

如果使用 KVS 生产者库,开发者需要通过可程序化的方式调整输入到 KVS 的关键帧间隔和帧率,以控制每个片段的帧数和片段长度。

程序化减少媒体播放器的片段缓冲

如果为 KVS 媒体开发自定义网页或移动应用程序,大多数流行的媒体播放器库支持程序化调节缓冲等设置。KVS 集成网页应用程序的一个示例是 Amazon Kinesis 视频流 Web 观看器,这是 AWS 提供的代码示例,您可以在自己的 AWS 账户中托管以测试和查看 KVS 媒体。

KVS 网页查看器演示应用:

KVS 网页查看器使用 reactplayer,调用 HLSjs 库播放基于 HLS 的媒体,例如来自 KVS 的媒体。KVS 网页查看器暴露了 hlsConfigsjs 文件中所有可程序化的设置。特别地,hlsConfigjs 参数 liveSyncDurationCount 和 liveMaxLatencyDurationCount 已减少至默认值以下,以优化低延迟。

使用该示例,您可以在您的环境中部署一个 KVS 消费者网页应用程序,并通过简单的配置文件来测试 HLS 和缓冲设置。

设置媒体播放速度略高于 x1

媒体播放器经常会落后于流媒体的实时边缘,从而增加视频延迟。这可能是由于媒体生产者与消费者之间的定时轻微不完美,或者在媒体重新缓冲或网络不稳定期间丢失了一些时间。由于这种效应具有累积性,因此影响与播放会话的长度成正比。因此,在监视时间较长或永久监视的媒体源如安全摄像头时,这一点尤为重要。

减少由于媒体播放器落后于实时边缘所引入的延迟的一种技术是将媒体播放速度设置略高于 x1例如: x105 / 11,具体取决于媒体播放器的支持。这将使媒体播放器处于“追赶”模式,不断尝试超越实时边缘。这使媒体播放器尽可能接近实时边缘,但在某些情况下可能导致媒体超出当前片段,从而使媒体播放器出现卡顿。因此,建议仅对需长时间运行或永久监视的媒体源使用该技术。

如前所述,KVS 网页查看器支持 x105 和 x11 播放速度,可以用作在您的环境中测试增快播放速度技术的一种手段。

验证 KVS 延迟值

在此部分中,我将测试所描述的 KVS HLS 设置、片段长度以及自定义 KVS 网页查看器与直接在 Safari 浏览器中观看 KVS 流之间的延迟值,以验证在这些特定条件下可实现的延迟值。

测试设置:

该测试使用上述描述的 GStreamer 管道将实时屏幕捕捉从 MacOS 设备导入 KVS。Mac 屏幕上显示带有毫秒精度的秒表,第二台显示器上也消费相同的 KVS 流以供比较。该测试在澳大利亚墨尔本进行,使用 AWS 悉尼区域,物理距离约 900 公里,因此往返约 1800 公里。

使用 KVS 推荐设置以获得稳健的视频质量:

HLS PlaybackMode:实时 HLS MaxMediaPlaylistFragmentResults:7 片段长度:1 秒

通过使用 KVS 网页查看器的延迟优化缓冲配置,应用 KVS 稳健视频质量的 HLS 设置和 1 秒片段长度后,测得延迟为 195 秒。

这项测试直接在 Safari 浏览器中消费 KVS HLS 播放列表 URL 的结果为 4072 秒。这种差异的原因在于,我们无法控制 Safari 浏览器缓冲的片段数量,而浏览器通常调整为优先考虑视频点播,媒体质量高于低延迟。

最后,使用 KVS 网页查看器再次运行此测试,但在 NVirginia 区域进行,从澳大利亚墨尔本往返超过 30000 公里20000 英里,这测得的延迟为 332 秒。这为距离对媒体延迟的影响提供了一个大致的评估。通过使用像 AWS 全球加速器 这样的服务,可以进一步减少这种延迟。

使用 KVS 延迟优化设置:

HLS PlaybackMode:实时 HLS MaxMediaPlaylistFragmentResults:5 片段长度:05 秒

通过将片段长度减少到 05 秒,我们能够实现 1412 秒 的端到端延迟。在这里,由于我们使用 KVS 网页查看器,程序化配置的缓冲片段数量,MaxMediaPlaylistFragmentResults 的值不会成为主要影响因素。

同样的测试但通过 Safari 浏览器直接消费 KVS 媒体的结果为 355 秒 的延迟。

结论

在本系列关于如何减少 Amazon Kinesis 视频流管理媒体端到端延迟的文章中,在 第一部分 中,您学习了流媒体的基本原理、KVS 的操作、常见设计模式以及最终流媒体延迟的主要影响因素。

在第二部分中,您了解到通过减少片段长度、媒体播放器缓冲大小以及如何在请求 KVS API 的 HLS URL 时选择最佳 HLS 播放列表设置来减少流媒体延迟的方法。

随后,您测试了针对稳健视频质量和延迟优化媒体流的推荐设置,使用 Amazon KVS 网页查看器进行比较。您还比较了 Amazon KVS 网页查看器与直接在 Safari 浏览器中观看相同媒体流的结果。这些结果还对比了地理上接近和遥远的 AWS 区域,以验证距离对媒体延迟的影响。

通过这项测试,我成功演示了如何在 KVS 管理的媒体上实现 195 秒的延迟,使用的设置在各种网络条件下提供稳健的视频质量,并在应用了延迟优化设置时实现 1412 秒的延迟。

关于作者

Dean Colcott 是 Amazon Web Services (AWS) 的资深物联网和机器人专家解决方案架构师,Kinesis 视频流的主题专家。他在分布式应用程序、全栈开发、视频和媒体、视频分析、计算机视觉、工业物联网和企业数据平台方面具有丰富的经验。Dean 的重点是在企业数据战略的背景下,从物联网、工业数据、视频和数据生成的物理资产中提炼相关性、价值和洞察。

AWS Global Accelerator 部署最佳实践关键要点用户期望无论应用在哪个平台上,都会提供稳定、高效的服务,而 AWS Global Accelerator 可帮助满足这一需求。配置 Global Accelerator 时,应避免连接碰撞,以确保网络延迟减少。本文提供了多种情况下避免连接碰撞的建议,以及不同的架构配置选项。用户在使用应用时,通常期望体验稳定、一致且高效的性能,无论应...

使用 Amazon Cognito 增加自定义认证流程中的威胁检测重点总结本文介绍如何使用 Amazon Cognito 为自定义认证流程添加威胁检测。随着新 Cognito 功能层次的推出,高级安全特性现在成为 Plus 层客户的默认特性。启用高级安全功能后,您可以利用密码无关认证强化安全防护,降低账户被攻陷的风险。2025年1月28日:以下博文强调了如何使用 Amazon Cognito 为自...