作者:Dean Colcott,发表于2022年12月21日,来源于 文章类型、最佳实践、专家 (400)、Kinesis Video Streams、媒体与娱乐、思想领导力 永久链接
在这个两部分的系列文章中,我将说明如何降低由 Amazon Kinesis Video Streams 管理的流媒体延迟,以及如何在各种网络条件下提供低于两秒的延迟和稳定的视频质量。接著,我会进行实际演示,显示使用 Amazon Kinesis Video Stream Web Viewer 可以实现 14 秒的延迟。
在这篇第 1 部分中,我将介绍流媒体的基本原理、KVS 的运作、常见设计模式以及 KVS 中流媒体延迟的主要影响因素。
在 第 2 部分中,我将说明如何配置 KVS、媒体生成器和媒体播放器以达到最佳延迟设置。最后,我将介绍 Amazon Kinesis Video Stream Web Viewer,并在 KVS 上进行多项实验,以验证在各种设置和配置下可以达到的延迟数据。
媒体通过 GStreamer KVSSink 插件、KVS Producer 库 或 KVS API 输入到 KVS 中,但在所有情况下,底层的进入媒体格式是 Matroska (MKV) 容器化的片段。在消费者端,实时媒体通常通过 HTTP Live Streaming (HLS) 以片段化的 MP4 形式呈现给网页和移动应用。这种常见的 KVS 设计模式中的生成者和消费者依赖于流媒体技术。本博客重点讨论如何使用这种常见的 KVS 设计模式减少流媒体的端到端延迟。
图 1 KVS 媒体的摄取及存储,并以 HLS 呈现给客户端应用。
通过 KVS 进行的流媒体的端到端延迟是视频编码/解码、片段延迟、网络延迟、KVS 缓冲和媒体播放器的片段缓冲的总和。为了量化这些因素,以下表格显示了对于使用不良选择的参数的 KVS 媒体流的指示性延迟值,结果总延迟约为 95 秒。
表 1 在不良设置下 KVS 流的指示性延迟值。
虽然这里的数字代表了一个典型情况,但它们清楚地显示,要改善延迟,我们必须更详尽地考虑视频片段和片段缓冲。
为了可靠而及时地传输互联网上的实时媒体,编码的视频帧被容器化成多种格式,例如 MPEG4 (MP4)、QuickTime Movie (MOV) 或 Matroska (MKV)。当每组帧被包装在媒体容器中时,它成为了一个自包含的可传输单位,被称为片段,这形成了我们所谓的流媒体。视频的录制、传输、缓冲和显示所需的时间就是最终用户所体验到的延迟。
图 2 H264/265 编码的帧以流媒体片段的形式传输。
H264 / H265 编码器通过仅传输不同帧之间改变的像素来实现高压缩比。每个片段必须以关键帧 (或 I帧) 开始,该帧包含所有数据 (像素) 并提供对后续预测帧 (P帧) 和双向帧 (B帧) 的参考。对于这个目的,理解这些帧类型共同描述了变化的图像,直到下个关键帧排定。
每个关键帧之间的帧数是由编码器设置的,称为关键帧间隔。在流媒体中,特别是在 KVS 中,通常会在每次到达关键帧时触发一个新片段,因此片段长度以秒为单位一般可以计算如下:
迅猛兔加速器破解版片段长度秒 = 关键帧间隔帧数/ 每秒帧数 (fps)。
图 3 H264/265 帧类型。
例如,如果媒体流的关键帧间隔为 30,帧率为 15 fps,则每两秒接收一个关键帧,这在 KVS 媒体生成器中一般会导致 2 秒的片段长度。这一点非常重要,因为片段长度与流媒体的延迟直接相关。
所有媒体播放器都会缓冲一定数量的片段,以避免在网络不稳定时影响视频质量。媒体播放器包括桌面播放器,如 QuickTime 和 VLC,应用程式库,如 reactplayer,用于自定义的网页和移动应用,以及各种网络浏览器中找到的默认媒体播放器。
媒体播放器应用库通常会程序化暴露片段缓冲设置,而桌面和基于浏览器的媒体播放器则使用预配置的设置来播放实时和按需视频。
片段缓冲直接在接收的媒体和消费者之间,并且如果不针对实时视频进行特别配置,则会导致多达 30 秒的延迟。媒体播放器的片段缓冲是导致流媒体延迟的主要因素,可以通过以下方式计算:
片段缓冲延迟秒 = 缓冲的片段数 x 片段长度秒。
图 4 媒体播放器缓冲导致的延迟。
因此,为了减少延迟;我们必须减少媒体播放器中缓冲的片段数。有趣的是,大多数媒体播放器的缓冲设置是基于片段数,而不是总缓冲时间,因此,减少片段长度对于降低流媒体的延迟也有类似效果。
HTTP Live Streaming (HLS) 是一种自适应比特率的流媒体协议,它通过 HLS 媒体播放列表 (m3u8) 文件向媒体播放器暴露媒体片段。这是一个明文清单文件,包含媒体配置标签和指向所需媒体片段的 URL 连结。以下是 HLS 媒体播放列表的一个摘录:

getMP4MediaFragmentmp4FragmentNumber=91343852333181769835329731216345997453612345678ampSessionToken=ampTrackNumber=1ampSequenceNumber=1
getMP4MediaFragmentmp4FragmentNumber=91343852333181769840281491373487518686823456789ampSessionToken=ampTrackNumber=1ampSequenceNumber=1
getMP4MediaFragmentmp4FragmentNumber=91343852333181769845233251530629039917934567890ampSessionToken=ampTrackNumber=1ampSequenceNumber=1
#命令字段是配置标签。例如,#EXTXPLAYLISTTYPEEVENT 标签表示片段将在实时媒体生成器活动期间持续追加到清单中。当设置时,媒体播放器将不断轮询播放列表以获取更新的片段,直到收到 #EXTXENDLIST 标签HLS 结束事件。
getMP4MediaFragmentmp4 字段附加到基本 URL,以生成 KVS 中每个媒体片段的完整链接。
KVS 提供了一种请求 HLS 媒体播放列表的方式,该播放列表具有延迟优化配置,以支持低延迟媒体,即使用户在他们选择的设备 和 媒体播放器上消费视频。
在这篇有关如何降低由 Amazon Kinesis Video Streams 管理的媒体端到端延迟的系列文章的第一部分中,我讨论了流媒体的基本原理。你还了解了 KVS 的运作、常见设计模式以及 KVS 中流媒体延迟的主要影响因素。
在 第 2 部分中;我将介绍如何通过减少片段长度和媒体播放器缓冲大小来降低流媒体的延迟。你将学会在从 KVS API 请求 HLS URL 时选择最佳 HLS 播放列表设置以获得低延迟媒体。你还会了解到稳健的视频质量和延迟优化的媒体流的建议设置,以及如何通过 Amazon KVS 网页查看器进行测试。
Dean Colcott 是亚马逊网络服务AWS的高级物联网和机器人专家解决方案架构师,也是 Amazon Kinesis Video Streams 的主题专家。他在分布式应用、全堆开发、视频和媒体、视频分析、计算机视觉、工业物联网和企业数据平台等多个领域具有深入了解。Dean 的重点是在企业数据策略的背景下,协助将物联网、工业数据、视频和数据生成的物理资产中的相关性、价值和见解带入实际应用。
01-27
通过亚马逊 OpenSearch 服务将长期日志费用降低 4800 大数据博客
降低长期日志开销达4800 的亚马逊 OpenSearch 服务关键要点使用 Amazon OpenSearch Service 存储日志数据,能够显著降低存储成本。文章讨论了 OpenSearch ...
01-27
如何降低 Amazon Kinesis 视频流的延迟 第 1 部分 物联网官方博客
降低 Amazon Kinesis Video Streams 延迟的方法 第 1 部分作者:Dean Colcott,发表于2022年12月21日,来源于 文章类型、最佳实践、专家 (400)、Ki...
01-27
在您的生成式人工智能应用中使用网页搜索 API 和 Amazon Bedrock 代理集成动态网页内
在生成型 AI 应用中集成动态网页内容关键要点功能增强:通过将 Amazon Bedrock Agent 与网页搜索 API 集成,提升聊天机器人实时搜索和动态信息检索能力。简化操作:开发者可借助 A...
01-27
在 Amazon QuickSight 中使用跨表筛选器和控件 商业智能博客
在 Amazon QuickSight 中构建跨表筛选器和控件关键要点Amazon QuickSight 通过引入跨表筛选器和控件功能,简化了分析过程。新功能允许用户跨多个表创建、删除和编辑筛选器。控...