本页介绍了如何将媒体工作流与直播内容同步 在 Live Stream API 中。通过时间码功能,您可以 将时间码输入(作为带内数据提供)传递到播放清单中。然后,您可以将内部媒体工作流与直播内容同步。例如,您可以将独立生成的元数据注释与直播内容进行匹配,或将内部直播内容与 Live Stream API 输出保持一致。
时间码数据需要符合 SMPTE 12M 规范(请参阅 ST 12-2:2008)。对于 H264,时间码数据包含在图片计时补充增强中 信息 (SEI) 消息。对于 H265,时间代码数据包含在时间代码中 SEI 消息。
使用嵌入式时间码
如需使用嵌入在输入串流中的时间码,请将以下 timecodeConfig
添加到 Channel
资源:
"timecodeConfig": { "source": "EMBEDDED_TIMECODE" }
source
字段的默认值为 MEDIA_TIMESTAMP
。
默认情况下,系统会使用世界协调时间 (UTC) 时区来解释时间代码。要使用
不同的时区,请设置 timeZone
或 utcOffset
字段:
"timecodeConfig": { "source": "EMBEDDED_TIMECODE", "timeZone": {"id": "America/Los_Angeles"} // or "utcOffset": "-28800s" // -8 hours from UTC }
设置 timeZone
字段时会考虑夏令时。
如需了解详情,请参阅如何解读输入时间码。
在输出清单中添加时间码
您可以将 useTimecodeAsTimeline
字段设置为 true
,以包含每个输出清单的时间戳:
"manifests": [ { "key": "manifest_hls", "file_name": "manifest.m3u8", "type": "HLS", "muxStreams": ["mux_720p", "mux_540p"], "useTimecodeAsTimeline": true }, { "key": "manifest_dash", "file_name": "manifest.mpd", "type": "DASH", "muxStreams": ["mux_720p", "mux_540p"], "useTimecodeAsTimeline": true } ]
HLS 清单文件
对于 HLS 直播,系统会将时间戳作为媒体 M3U8 清单文件中每个片段的 #EXT-X-PROGRAM-DATE-TIME
标记发出,其格式类似于以下示例:
#EXTM3U
#EXT-X-VERSION:7
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-DISCONTINUITY-SEQUENCE:0
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:25.529Z
#EXTINF:1.265922
720p60_h264_ts-0000000000.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:26.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000001.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:28.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000002.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:30.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000003.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:32.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000004.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:34.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000005.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:36.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000006.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:38.795Z
#EXT-X-PROGRAM-DATE-TIME
包含按照 ISO8601 格式 YYYY-MM-DDThh:mm:ss[.mmm]TZD
生成的时间码数据,其中:
YYYY
表示年份(四位数)MM
表示月份(两位数)(例如,03 表示 3 月)DD
表示一个月中的两位数日期(01 到 31)T
是一个集字符,表示时间元素的开始日期hh
是小时的两位数(00 到 23,不包括 AM/PM)mm
是分钟的两位数(00 到 59)ss
是一秒的两位数(00 到 59)mmm
是毫秒数的三位数(000 到 999)TZD
是时区标识符 (Z, ±hh:mm)。Z 表示世界协调时间 (UTC),而 + 或 - 值表示与世界协调时间 (UTC) 相差的时差。
DASH 清单文件
对于 DASH 直播,MPD 清单文件中的 availabilityStartTime
属性会设置为初始时间码,并且类似于以下内容:
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" profiles="urn:mpeg:dash:profile:isoff-live:2011"
type="dynamic" minBufferTime="PT4S" mediaPresentationDuration="PT0H0M473.262S"
availabilityStartTime="2023-05-19T17:44:16.881Z">
availabilityStartTime
包含按照 ISO8601 格式 YYYY-MM-DDThh:mm:ss[.mmm]TZD
生成的时间码数据,其中:
YYYY
表示年份(四位数)MM
表示月份(两位数)(例如,03 表示 3 月)DD
表示一个月中的两位数日期(01 到 31)T
是一个集字符,表示时间元素的开始日期hh
是小时的两位数(00 到 23,不包括 AM/PM)mm
是分钟的两位数(00 到 59)ss
是一秒的两位数(00 到 59)mmm
是毫秒数的三位数(000 到 999)TZD
是时区标识符 (Z, ±hh:mm)。Z 表示世界协调时间 (UTC),而 + 或 - 值表示早于或晚于世界协调时间 (UTC) 的程度。
如何解析时间码数据
从第一个视频帧中解析嵌入的时间码。通过 之后逐帧推进。没有任何 重新同步输入和输出时间,直到输入流 已断开连接,然后重新连接。
由于视频的时间戳会被根据时间码生成的时间戳替换,因此频道事件必须遵循时间码时钟,才能在指定时间正确执行。
如果 生产流水线相同,或同时在主数据库和备用数据库上锁定 贡献编码器(请参阅 视频什么是输出锁定?)。
如何解读输入时间码
图片计时 SEI 消息中的时间码仅包含时间 (16:30:00;10
)。
要在输出清单中包含时间代码,日期和时间都需要,如
作为完整日期时间 (2021-12-06T16:30:00.333Z
) 或纪元时间
(1638837000333
).
将 SEI 时间码解释为日期时间格式时,Live Stream API
始终假定传入的输入流为实时或近乎实时。
Live Stream API 使用频道的 timecodeConfig
中指定的时区来解读 SEI 时间码,使其尽可能接近当前时间(但不晚于当前时间)。
例如,假设 Live Stream API 在 UTC 时间 2021-12-06T21:00:00Z
收到输入串流。下表显示了
SEI 时间码会转换为日期时间格式:
时区 ID | SEI 时间码 | 以当地时间解读 | 解释为世界协调时间 (UTC) |
---|---|---|---|
UTC |
16:30:00;10 |
2021-12-06T16:30:00.333+00:00 |
2021-12-06T16:30:00.333Z |
America/Los_Angeles |
16:30:00;10 |
2021-12-05T16:30:00.333-08:00 |
2021-12-06T00:30:00.333Z |
America/New_York |
16:30:00;10 |
2021-12-05T16:30:00.333-05:00 |
2021-12-05T21:30:00.333Z |
Asia/Bangkok |
16:30:00;10 |
2021-12-06T16:30:00.333+07:00 |
2021-12-06T09:30:00.333Z |
America/Los_Angeles |
03:30:00;10 |
2021-12-06T03:30:00.333-08:00 |
2021-12-06T11:30:00.333Z |
Asia/Bangkok |
03:30:00;10 |
2021-12-07T03:30:00.333+07:00 |
2021-12-06T20:30:00.333Z |
请注意,解读的时间绝不会晚于 2021-12-06T21:00:00Z
的当前世界协调时间 (UTC)。