本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon IVS 流传输配置
开发人员使用 Amazon Interactive Video Service (IVS) 可轻松地向全球观众提供低延迟的视频。借助 Amazon IVS,主播只需生成视频流,然后将视频流发送到 Amazon IVS 即可。Amazon IVS 使用 Amazon IVS 播放器处理视频(提取和转码),传送给向观众并播放。
适用于实时流传输的解决方案有很多。无论您有一个工作室,配备了多台摄像头、视觉切换台、图形合成和各种混音设备,还是计划从智能手机上开始制作第一个视频流,都需要处理一些相同的概念和编码参数。
本文档介绍了如何配置视频编码器以流传输到 Amazon IVS。本文档的受众是希望在其应用程序中构建流传输功能的开发人员。
请注意,IVS 低延迟直播不支持纯音频输入。
先决条件
请按照 IVS 低延迟流式传输入门 中的步骤创建通道并设置流传输。在此过程中,会分配一个通道 ARN (Amazon Resource Name) 和流密钥,以及用于提取和播放流的 URL。您需要将流传输应用程序指向提取 URL。
阅读此文档之前,您应熟悉以下内容:
-
Amazon IVS 基础知识:阅读 What is IVS Low-Latency Streaming 和 IVS 低延迟流式传输入门
-
Amazon IVS API:了解 IVS Low-Latency Streaming API Reference。
降低延迟
Amazon IVS 低延迟流传输与大多数流传输应用程序兼容,只需对流传输应用程序配置进行少量更改。为了尽可能降低延迟,您必须使用 Amazon IVS 播放器;不支持第三方 HLS 视频播放器。请参阅 Amazon IVS 播放器开发工具包文档。
要为低延迟流传输准备流传输应用程序,请执行以下操作。(注意:并非所有这些选项都可用于每个流传输应用程序。)
-
在视频编码器上,设置
IDR/Keyframe
为 2 秒的间隔(或 1 秒,以获得更低的 end-to-end 延迟)。IDR/Keyframe
直接影响直播启动的时间和相关 EventBridge 事件(直播开始和录制开始)的延迟。如果IDR/Keyframe
为 2 秒,则流启动延迟将大约为 6-7 秒。如果IDR/Keyframe
为 1 秒,则流启动延迟将大约为 3-4 秒。仅在初始流启动延迟期之后,您的视频才可供观众观看,并自动录制到 Amazon S3。更短的关键帧间隔(1 秒)存在 QoS 权衡。这可能会导致 Amazon IVS 播放器的自适应比特率流式处理 (ABR) 更频繁地切换分辨率;分段大小越小,因此 ABR 检查越频繁。由于提高了分辨率切换和/或观众的网络无法足够快速地下载分段,缓冲可能会增加。决定使用 1 秒还是 2 秒关键帧间隔时,评估这些权衡。
避免将
IDR/Keyframe
设置为高于 5 秒的值。直播流启动延迟不仅会比使用 1 或 2 秒时长,而且 IVS 也无法保证为播放生成的每个片段都以 IDR/keyframe 开头。当观看者开始播放或更改渲染时,不以 IDR/keyframe 开头的片段可能会导致解码错误或视觉失真。 -
如果适用,请在 x264 配置中将编码器设置为零延迟调整。
-
确保缓冲区大小 (VBV) 不超过流的平均比特率 (kilobits-per-second)。
避免使用第三方流传输/转发服务
强烈建议不要使用第三方服务将内容重新流传输或转发到 Amazon IVS。这将导致额外的延迟。为了降低延迟,请直接流传输到 Amazon IVS。
编码器设置
流摄取:编解码器、RTMPS 和端口 443
编解码器:Amazon IVS 视频支持 H.264,音频支持 AAC (LC)。
Amazon IVS 支持流传输软件和硬件中最常用的安全提取协议 RTMPS(基于 TLS/SSL 连接的实时消息传输协议)。Amazon IVS 流传输和播放需要使用 TLS 1.2 或更高版本。
您的视频编码器必须通过与出站端口 443/TCP 关联的 RTMPS 协议连接到 Amazon IVS 提取。为确保这一点,请指定 IVS 摄取服务器,其中包含路径中的端口:
rtmps://<IVS-ingest-server>/<IVS-stream-key>
例如:
rtmps://a1b2c3d4e5f6.global-contribute.live-video.net:443/app/<IVS-stream-key>
也可以将 IVS 通道配置为允许不安全的 RTMP 提取,但我们建议使用 RTMPS,除非是在需要 RTMP 的特定且经过验证的使用场景。流式传输 RTMP 时,务必将协议设置为 rtmp://
并删除 :443
端口。例如:
rtmp://a1b2c3d4e5f6.global-contribute.live-video.net/app/<IVS-stream-key>
分辨率/比特率/FPS
直播的分辨率在很大程度上决定了其比特率和帧速率(frames-per-second或 FPS)。请使用以下建议准则。请注意,下面显示的分辨率是横向(水平 x 垂直),反转即为纵向。
可接受的质量 (SD) 480p (852x480) | 优质 (HD) 720p (1280x720) | 高品质(全高清)1080p (1920x1080) | |
---|---|---|---|
比特率 | 高达 1500 Kbps | 高达 4500 Kbps | 高达 8500 Kbps |
FPS | 30 | 30 或 60 | 30 或 60 |
关键帧间隔 | 2 秒 | 2 秒 | 2 秒 |
比特率、FPS 和分辨率都是相互关联的。最佳值取决于具体情况,并且可能很复杂,因此难以确定。最佳建议是从上述值开始试验(如需要)。目标是在流传输过程中视频组件清晰流畅地运行,并在可用带宽内保持良好的分辨率。提高帧率和/或分辨率可提高整体视频质量,但这必然受带宽的限制。
Amazon IVS 可支持高达 60 FPS 的帧率(包括欧洲 PAL 25 和 50 标准帧率)。只要带宽足够,帧率越高,质量越好。根据应用的不同,低帧率也可以接受;例如,安全摄像头。
通道类型
通道类型决定可接受的分辨率和比特率。如果您超过支持的输入分辨率或比特率,则直播流可能会立即断开连接。
有四种通道类型:STANDARD
、ADVANCED_SD
、ADVANCED_HD
,以及 BASIC
。创建通道时,默认类型为 STANDARD
。
根据通道类型,视频可能为已转码或已转码多路复用:
STANDARD
和ADVANCED
通道的视频已转码;从原始输入中生成多种品质,以根据观众的设备和网络情况自动为他们提供最佳体验。转码可在各种下载速度范围内实现更高的播放质量。-
BASIC
通道的视频已转码多路复用:Amazon IVS 将原始输入传送给查看器。
所有已转码通道都有已转码预设,用于确定生成哪些渲染。可以把它们想象成 ABR 阶梯。它们允许您在可用的下载带宽和视频质量之间进行权衡,以优化观看体验。
STANDARD
通道有一个默认的转码预设。-
ADVANCED
通道有两个可选的转码预设:受限的带宽传输对每个质量级别使用比
STANDARD
低的比特率。如果您的下载带宽较低和/或视频内容简单(例如,讲话者头部特写),则请使用它。较高的带宽传输对每个质量级别使用较高的比特率。如果您有较高的下载带宽和/或复杂的视频内容(例如闪光灯和快速场景切换),则请使用它。这是默认模式。
标准通道
STANDARD
通道已转码。生成的最高视频分辨率为全高清,1080p。这是默认通道类型。
转码预设:有一个默认的转码预设阶梯。
音频:对于 360p 及以下的渲染,音频会进行转码。对于其他渲染,将传递原始音频。
输入分辨率和最大比特率 | 阶梯详情 |
---|---|
在 8.5Mbps 下为 1080p 60 帧 |
|
在 8.5Mbps 下为 1080p 30 帧 |
|
在 8.5Mbps 下为低于 1080p 60 帧且大于 720p 60 帧 |
|
在 8.5Mbps 下为低于 1080p 30 帧且大于 720p 30 帧 |
|
在 8.5Mbps 下为 720p 60 帧 |
|
在 8.5Mbps 下为 720p 30 帧 |
|
在 8.5Mbps 下为小于 720p 30 帧/60 帧且大于或等于 480p 30 帧/60 帧 |
|
高级高清通道
ADVANCED-HD
通道已转码。制作的最高视频分辨率为高清,720p。
转码预设:有两个可选择的转码预设阶梯。
音频:对于 360p 及以下的渲染,音频会进行转码。对于其他渲染,将传递原始音频。
输入分辨率和最大比特率 | 阶梯详情 |
---|---|
在 8.5Mbps 下为 720p 60 帧至 1080p 60 帧 |
转码预设:更高的带宽传输(默认):
转码预设:带宽传输受限:
|
在 8.5Mbps 下为 720p 30 帧至 1080p 30 帧 |
转码预设:更高的带宽传输(默认):
转码预设:带宽传输受限:
|
在 8.5Mbps 下为低于 720p 30 帧/60 帧且大于 480p 30 帧/60 帧 |
转码预设:更高的带宽传输(默认):
转码预设:带宽传输受限:
|
在 8.5Mbps 下为 480p 30 帧/60 帧 |
转码预设:更高的带宽传输(默认):
转码预设:带宽传输受限:
|
高级标清通道
ADVANCED-SD
通道已转码。可用的渲染以输入质量为上限,没有向上转换。
转码预设:有两个可选择的转码预设阶梯。
音频:音频已转码。
输入分辨率和最大比特率 | 阶梯详情 |
---|---|
在 8.5Mbps 下为 480p 30 帧/60 帧至 1080p 30 帧/60 帧 |
转码预设:更高的带宽传输(默认):
转码预设:带宽传输受限:
|
基本通道
BASIC
通道已转码多路复用。生成了一份渲染。
转码预设:不适用
音频:音频已转码。
输入分辨率和最大比特率 | 阶梯详情 |
---|---|
大于 480p 30 帧/60 帧且小于或等于 1080p 30 帧/60 帧,带宽为 3.5Mbps |
源编码参数(无阶梯) |
在 1.5Mbps 下为 480p 30 帧/60 帧 |
源编码参数(无阶梯) |
视频设置
我们建议使用以下设置。这些设置适用于大多数 H.264 视频编码软件或硬件 API。
-
在视频编码器上,设置
IDR/Keyframe
为 2 秒的间隔(或 1 秒,以获得更低的 end-to-end 延迟)。 -
H.264 级别:主要
-
场景变化:关闭(首选)
-
色度子样本:YUV420P
-
CABAC:首选
-
ColorSpace: BT.709(为了最大限度地提高高清电视和电脑显示器的兼容性,建议使用)。Amazon IVS 视频转码支持 ColorSpace直通;高级用户可以使用其他 ColorSpace 视频和全方位视频。
音频设置
我们支持以下设置:
-
编解码器:AAC (LC)
-
比特率:96 Kbps 至 320 Kbps
-
采样率:44.1 Khz 或 48 Khz(最好与您的生产音频流相匹配)
-
通道:最大 2 个 – 立体声(支持 1:单声道或 2:立体声音频通道)
使用 CBR,而不是 VBR
始终使用 CBR(常量 BitRate),而不是 VBR(变量 BitRate)作为编码器的速率控制方法。CBR 更适合于固定带宽特性的网络,为客户端设备提供更可预测、更稳定的视频播放。使用恒定比特率,观众可轻松选择其连接随着时间的推移能够处理的质量级别。
根据场景的复杂程度,VBR 可能会导致比特率峰值,这可能会造成视频到达 Amazon IVS 之前帧丢弃和/或在客户端播放器中进行缓冲。
我们强烈建议只使用 CBR。如果您使用 VBR,流将更容易受到缓冲和播放不流畅的影响。
使用渐进式信号
使用渐进式信号流;在制作流程和/或编码中避免任何隔行视频。渐进式流信号可生成更好的播放质量,一次显示整个帧,可避免在显示隔行信号时产生的任何运动失真。
网络要求
须拥有稳定的互联网连接,保持足够的、持续的上传流。不稳定的互联网连接可能会导致观众的视频流卡顿和滞后。
使用有线连接。 WiFi 而且,由于 QoS/Packet-Queue 优先级不佳,LTE 连接可能参差不齐或受到干扰或延迟。尽可能使用硬连线的连接来传输视频流。
计划分配的带宽比所需的最小带宽多 50%。多出的带宽是为了补偿视频比特流编码时的比特率波动。
使用专用的互联网 VLAN 对计算机进行编码。编码器使用单独的网络,可防止潜在的破坏性影响,包括:流量污染、带宽瓶颈和不利的安全因素。
隐藏式字幕
IVS 支持隐藏式字幕。如果主播想要为观众提供字幕,必须通过视频编码器以接受的格式传输字幕数据,要么将其嵌入到视频流中,或者与视频流一起传输。
Amazon IVS 接受线路 21 CEA-708/EIA-608 格式的字幕(也称为 608 over 708)。您可以使用以下方法之一传输字幕:
-
CEA-708/EIA-608 嵌入到基础视频流中,如 ATSC A/72 (SEI user_data) 中所述。这种格式在电视广播编码器中很常见。
-
CEA-708/EIA-608 通过 RTMPS 脚本/amf0 标签传输。 onCaptionInfo 这种格式在互联网广播编码器和媒体服务器(如 Elemental Technologies 和 Wowza)中很常见。Amazon IVS 播放器软件开发工具包仅支持一种语言;不支持多轨道字幕播放。
注意:Amazon IVS 播放器软件开发工具包仅在 CC1 NTSC 字段 1 中支持字幕数据。不支持多轨道字幕回放。
通过 RTMPS 传输时,有效负载须包含一个具有两个元素对的 ECMA 数组:
-
名为
type
的字符串,包含字符708
。 -
名为
data
的字符串,其中包含以 base64 编码的 CEA-708/EIA-608 有效负载。
例如:
00000000 12 00 00 69 00 00 00 00 00 00 00 02 00 0d 6f 6e |...i..........on| 00000010 43 61 70 74 69 6f 6e 49 6e 66 6f 08 00 00 00 02 |CaptionInfo.....| 00000020 00 04 74 79 70 65 02 00 03 37 30 38 00 04 64 61 |..type...708..da| 00000030 74 61 02 00 3c 74 51 41 78 52 30 45 35 4e 41 4e |ta..<tQAxR0E5NAN| 00000040 4c 41 50 79 55 72 76 79 55 49 50 79 52 51 50 7a |LAPyUrvyUIPyRQPz| 00000050 49 35 66 7a 73 37 50 7a 76 4c 50 77 67 56 50 7a |I5fzs7PzvLPwgVPz| 00000060 33 36 66 7a 30 34 2f 78 6f 67 50 79 55 4c 2f 38 |36fz04/xogPyUL/8| 00000070 3d 00 00 09 00 00 00 74 |=......t|
如果使用 Elemental 视频编码器,请按如下方式进行设置:
-
将字幕嵌入设置为“capture 608 Field 1”。
-
在输出组中嵌入字幕onCaptionInfo作为 RTMPS 标签。
有关更多信息,请参阅博客文章添加隐藏式字幕到 Amazon IVS 实时流
使用 FFmpeg 的流
FFmpeg 是一个免费的开源项目,包括一个庞大的软件库,用于处理视频、音频以及其他多媒体文件和流。它可与许多操作系统和设备配合使用。
请参阅 FFmpeg 网站
安装后,为 FFmpeg 选择音频/视频输入源。您可以查找可用的内容,如下所示:
ffmpeg -list_devices true -f dshow -i dummy
.
有关更多信息,请单击此处
-
网络摄像头 – 要捕获 Logitech C920 网络摄像头的输出,请执行以下操作:
ffmpeg -f dshow -video_size 1920x1080 -framerate 30 -i video="HD Pro Webcam C920":audio="Microphone (HD Pro Webcam C920)" -c:v libx264 -b:v 6000K -maxrate 6000K -pix_fmt yuv420p -r 30 -s 1920x1080 -profile:v main -preset veryfast -g 120 -x264opts "nal-hrd=cbr:no-scenecut” -acodec aac -ab 160k -ar 44100 -f flv rtmps://<IVS-ingest-server>/<IVS-stream-key>
-
视频文件 – FFmpeg 适用于多种视频文件格式和捕捉卡。以下是基于 MP4 输入的流传输示例:
ffmpeg -re -i input.mp4 -c:v libx264 -b:v 6000K -maxrate 6000K -pix_fmt yuv420p -s 1920x1080 -profile:v main -preset veryfast -force_key_frames expr:gte(t,n_forced*2) -x264opts "nal-hrd=cbr:no-scenecut” -acodec aac -ab 160k -ar 44100 -f flv rtmps://<IVS-ingest-server>/app/<IVS-stream-key>
有关 <IVS-ingest-server>
和 <IVS-stream-key>
输入内容的更多信息,请参阅 IVS 低延迟流式传输入门 中有关设置实时流传输的信息。例如:
-
提取服务器:
rtmps://jds34ksdg3las.global-contribute.live-video.net/app/
-
流密钥:
sk_us-west-2_abcd1234efgh5678ijkl
使用 Amazon IVS 广播 SDK 的流
Amazon IVS 广播 SDK 适用于使用 Amazon IVS 构建 Android、iOS 或 Web 应用程序的开发人员。请参阅《Amazon IVS 用户指南》中的广播开发工具包文档,在此处了解如何开始。包含适用于 Android、iOS 和 Web 流式传输指南的子页面。您可以使用广播 SDK 自定义比特率、帧率和分辨率。
测试视频流
请务必验证您的视频流是否正常工作。
在 Amazon IVS 控制台