媒体服务事件的 Azure 事件网格架构
警告
Azure 媒体服务将于 2024 年 6 月 30 日停用。 有关详细信息,请参阅 AMS 停用指南。
本文介绍媒体服务事件的架构和属性。
有关示例脚本和教程的列表,请参阅媒体服务事件源。
作业相关事件类型
媒体服务会发出如下所述的作业相关事件类型。 有两类作业相关事件 :“监视作业状态更改”和“监视作业输出状态更改”。
可通过订阅 JobStateChange 事件来注册所有事件。 或者,可以只订阅特定事件(例如,JobErrored、JobFinished 和 JobCanceled 等最终状态)。
监视作业状态更改
事件类型 | 说明 |
---|---|
Microsoft.Media.JobStateChange | 获取所有作业状态更改的事件。 |
Microsoft.Media.JobScheduled | 获取当作业转换为已计划状态时的事件。 |
Microsoft.Media.JobProcessing | 获取当作业转换为正在处理状态时的事件。 |
Microsoft.Media.JobCanceling | 获取当作业转换为正在取消状态时的事件。 |
Microsoft.Media.JobFinished | 获取当作业转换为已完成状态时的事件。 这是包含作业输出的最终状态。 |
Microsoft.Media.JobCanceled | 获取当作业转换为已取消状态时的事件。 这是包含作业输出的最终状态。 |
Microsoft.Media.JobErrored | 获取当作业转换为错误状态时的事件。 这是包含作业输出的最终状态。 |
请参阅后面的架构示例。
监视作业输出状态更改
一个作业可能包含多个作业输出(如果将转换配置为具有多个作业输出。)如果要跟踪单个作业输出的详细信息,请侦听作业输出更改事件。
每个 Job 的级别高于 JobOutput 的级别,因此作业输出事件会在相应的作业内触发。
JobFinished
、JobCanceled
、JobError
中的错误消息输出各个作业输出的聚合结果(当所有作业都完成时), 而作业输出事件会在每个任务完成时触发。 例如,如果你有一个编码输出,后跟一个视频分析输出,则在使用聚合数据触发最终 JobFinished 事件之前,你将得到两个作为作业输出事件触发的事件。
事件类型 | 说明 |
---|---|
Microsoft.Media.JobOutputStateChange | 获取所有作业输出状态更改的事件。 |
Microsoft.Media.JobOutputScheduled | 获取当作业输出转换为已计划状态时的事件。 |
Microsoft.Media.JobOutputProcessing | 获取当作业输出转换为正在处理状态时的事件。 |
Microsoft.Media.JobOutputCanceling | 获取当作业输出转换为正在取消状态时的事件。 |
Microsoft.Media.JobOutputFinished | 获取当作业输出转换为已完成状态时的事件。 |
Microsoft.Media.JobOutputCanceled | 获取当作业输出转换为已取消状态时的事件。 |
Microsoft.Media.JobOutputErrored | 获取当作业输出转换为错误状态时的事件。 |
请参阅后面的架构示例。
监视作业输出进度
事件类型 | 说明 |
---|---|
Microsoft.Media.JobOutputProgress | 此事件反映了作业处理进度,从 0% 到 100%。 如果进度值增加了 5% 或更多,或者自上次事件(检测信号)以来已超过 30 秒,则服务会尝试发送事件。 无法保证进度值从 0% 开始或达到 100%,也无法保证其随时间推移而以恒定速率增加。 不要使用此事件来确定处理已完成 – 应该改用状态更改事件。 |
请参阅后面的架构示例。
实时事件类型
媒体服务也会发出如下所述的实时事件类型。 实时事件有两种类别:流级事件和轨迹级事件。
流级事件
按流或连接引发流级事件。 每个事件具有一个用于标识连接或流的 StreamId
参数。 每个流或连接具有一个或多个不同类型的轨迹。 例如,来自编码器的一个连接可能具有一个音频轨迹和四个视频轨迹。 流事件类型包括:
事件类型 | 说明 |
---|---|
Microsoft.Media.LiveEventConnectionRejected | 编码器的连接尝试被拒绝。 |
Microsoft.Media.LiveEventEncoderConnected | 编码器与直播活动建立连接。 |
Microsoft.Media.LiveEventEncoderDisconnected | 编码器断开连接。 |
请参阅后面的架构示例。
轨迹级事件
按轨迹引发轨迹级事件。
注意
所有轨迹级事件都在连接实时编码器后引发。
轨迹级事件类型包括:
事件类型 | 说明 |
---|---|
Microsoft.Media.LiveEventIncomingDataChunkDropped | 媒体服务器删除了数据区块,因为该区块的抵达时间过迟,或者带有重叠的时间戳(新数据区块的时间戳小于前一数据区块的结束时间)。 |
Microsoft.Media.LiveEventIncomingStreamReceived | 媒体服务器收到流或连接中每个轨迹的第一个数据区块。 |
Microsoft.Media.LiveEventIncomingStreamsOutOfSync | 媒体服务器检测到音频和视频流不同步。用作警告,因为用户体验可能不受影响。 |
Microsoft.Media.LiveEventIncomingVideoStreamsOutOfSync | 媒体服务器检测到来自外部编码器的任意两个视频流不同步。用作警告,因为用户体验可能不受影响。 |
Microsoft.Media.LiveEventIngestHeartbeat | 当直播活动正在运行时,每隔 20 秒为每个轨迹发布。 提供引入运行状况摘要。 在编码器最初连接后,无论编码器是否仍然处于连接状态,检测信号事件都会继续按 20 秒 1 次的频率发出。 |
Microsoft.Media.LiveEventTrackDiscontinuityDetected | 媒体服务器检测到传入轨迹中存在不连续的情况。 |
请参阅后面的架构示例。
事件架构示例
JobStateChange
以下示例显示 JobStateChange 事件的架构:
[
{
"topic": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.Media/mediaservices/<account-name>",
"subject": "transforms/VideoAnalyzerTransform/jobs/<job-id>",
"eventType": "Microsoft.Media.JobStateChange",
"eventTime": "2018-04-20T21:26:13.8978772",
"id": "b9d38923-9210-4c2b-958f-0054467d4dd7",
"data": {
"previousState": "Processing",
"state": "Finished"
},
"dataVersion": "1.0",
"metadataVersion": "1"
}
]
数据对象具有以下属性:
属性 | 类型 | 说明 |
---|---|---|
previousState |
string | 事件发生前的作业状态。 |
state |
string | 此事件中通知的作业的新状态。 例如,“已计划:作业已准备就绪”或“已完成:作业已完成”。 |
作业状态可以是以下任何一个值:已排队、已计划、正在处理、已完成、错误、已取消、正在取消
注意
已排队仅出现在 previousState 属性中,不出现在 state 属性中 。
JobScheduled、JobProcessing、JobCanceling
对于每个非最终作业状态更改(例如 JobScheduled、JobProcessing、JobCanceling),示例架构类似于以下内容:
[{
"topic": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.Media/mediaservices/<account-name>",
"subject": "transforms/VideoAnalyzerTransform/jobs/<job-id>",
"eventType": "Microsoft.Media.JobProcessing",
"eventTime": "2018-10-12T16:12:18.0839935",
"id": "a0a6efc8-f647-4fc2-be73-861fa25ba2db",
"data": {
"previousState": "Scheduled",
"state": "Processing",
"correlationData": {
"testKey1": "testValue1",
"testKey2": "testValue2"
}
},
"dataVersion": "1.0",
"metadataVersion": "1"
}]
JobFinished、JobCanceled、JobErrored
对于每个最终作业状态更改(例如 JobFinished、JobCanceled、JobErrored),示例架构类似于以下内容:
[{
"topic": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.Media/mediaservices/<account-name>",
"subject": "transforms/VideoAnalyzerTransform/jobs/<job-id>",
"eventType": "Microsoft.Media.JobFinished",
"eventTime": "2018-10-12T16:25:56.4115495",
"id": "9e07e83a-dd6e-466b-a62f-27521b216f2a",
"data": {
"outputs": [
{
"@odata.type": "#Microsoft.Media.JobOutputAsset",
"assetName": "output-7640689F",
"error": null,
"label": "VideoAnalyzerPreset_0",
"progress": 100,
"state": "Finished"
}
],
"previousState": "Processing",
"state": "Finished",
"correlationData": {
"testKey1": "testValue1",
"testKey2": "testValue2"
}
},
"dataVersion": "1.0",
"metadataVersion": "1"
}]
数据对象具有以下属性:
属性 | 类型 | 说明 |
---|---|---|
outputs |
Array | 获取作业输出。 |
JobOutputStateChange
以下示例展示了 JobOutputStateChange 事件的架构:
[{
"topic": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.Media/mediaservices/<account-name>",
"subject": "transforms/VideoAnalyzerTransform/jobs/<job-id>",
"eventType": "Microsoft.Media.JobOutputStateChange",
"eventTime": "2018-10-12T16:25:56.0242854",
"id": "dde85f46-b459-4775-b5c7-befe8e32cf90",
"data": {
"previousState": "Processing",
"output": {
"@odata.type": "#Microsoft.Media.JobOutputAsset",
"assetName": "output-7640689F",
"error": null,
"label": "VideoAnalyzerPreset_0",
"progress": 100,
"state": "Finished"
},
"jobCorrelationData": {
"testKey1": "testValue1",
"testKey2": "testValue2"
}
},
"dataVersion": "1.0",
"metadataVersion": "1"
}]
JobOutputScheduled、JobOutputProcessing、JobOutputFinished、JobOutputCanceling、JobOutputCanceled、JobOutputErrored
对于每个 JobOutput 状态更改,示例架构类似于以下内容:
[{
"topic": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.Media/mediaservices/<account-name>",
"subject": "transforms/VideoAnalyzerTransform/jobs/<job-id>",
"eventType": "Microsoft.Media.JobOutputProcessing",
"eventTime": "2018-10-12T16:12:18.0061141",
"id": "f1fd5338-1b6c-4e31-83c9-cd7c88d2aedb",
"data": {
"previousState": "Scheduled",
"output": {
"@odata.type": "#Microsoft.Media.JobOutputAsset",
"assetName": "output-7640689F",
"error": null,
"label": "VideoAnalyzerPreset_0",
"progress": 0,
"state": "Processing"
},
"jobCorrelationData": {
"testKey1": "testValue1",
"testKey2": "testValue2"
}
},
"dataVersion": "1.0",
"metadataVersion": "1"
}]
JobOutputProgress
示例架构类似如下:
[{
"topic": "/subscriptions/<subscription-id>/resourceGroups/belohGroup/providers/Microsoft.Media/mediaservices/<account-name>",
"subject": "transforms/VideoAnalyzerTransform/jobs/job-5AB6DE32",
"eventType": "Microsoft.Media.JobOutputProgress",
"eventTime": "2018-12-10T18:20:12.1514867",
"id": "00000000-0000-0000-0000-000000000000",
"data": {
"jobCorrelationData": {
"TestKey1": "TestValue1",
"testKey2": "testValue2"
},
"label": "VideoAnalyzerPreset_0",
"progress": 86
},
"dataVersion": "1.0",
"metadataVersion": "1"
}]
LiveEventConnectionRejected
以下示例显示 LiveEventConnectionRejected 事件的架构:
[
{
"topic": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.Media/mediaServices/<account-name>",
"subject": "/LiveEvents/MyLiveEvent1",
"eventType": "Microsoft.Media.LiveEventConnectionRejected",
"eventTime": "2018-01-16T01:57:26.005121Z",
"id": "b303db59-d5c1-47eb-927a-3650875fded1",
"data": {
"streamId":"Mystream1",
"ingestUrl": "http://abc.ingest.isml",
"encoderIp": "118.238.251.xxx",
"encoderPort": 52859,
"resultCode": "MPE_INGEST_CODEC_NOT_SUPPORTED"
},
"dataVersion": "1.0",
"metadataVersion": "1"
}
]
数据对象具有以下属性:
属性 | 类型 | 说明 |
---|---|---|
streamId |
string | 流或连接的标识符。 编码器或客户负责在引入 URL 中添加此 ID。 |
ingestUrl |
string | 直播活动提供的引入 URL。 |
encoderIp |
string | 编码器的 IP。 |
encoderPort |
string | 此流的来源编码器的端口。 |
resultCode |
string | 拒绝连接的原因。 下表中列出了结果代码。 |
可在实时事件错误代码中找到错误结果代码。
LiveEventEncoderConnected
以下示例显示 LiveEventEncoderConnected 事件的架构:
[
{
"topic": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.Media/mediaservices/<account-name>",
"subject": "liveEvent/mle1",
"eventType": "Microsoft.Media.LiveEventEncoderConnected",
"eventTime": "2018-08-07T23:08:09.1710643",
"id": "<id>",
"data": {
"ingestUrl": "http://mle1-amsts03mediaacctgndos-ts031.channel.media.azure-test.net:80/ingest.isml",
"streamId": "15864-stream0",
"encoderIp": "131.107.147.xxx",
"encoderPort": "27485"
},
"dataVersion": "1.0",
"metadataVersion": "1"
}
]
数据对象具有以下属性:
属性 | 类型 | 说明 |
---|---|---|
streamId |
string | 流或连接的标识符。 编码器或客户负责在引入 URL 中提供此 ID。 |
ingestUrl |
string | 直播活动提供的引入 URL。 |
encoderIp |
string | 编码器的 IP。 |
encoderPort |
string | 此流的来源编码器的端口。 |
LiveEventEncoderDisconnected
以下示例显示 LiveEventEncoderDisconnected 事件的架构:
[
{
"topic": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.Media/mediaservices/<account-name>",
"subject": "liveEvent/mle1",
"eventType": "Microsoft.Media.LiveEventEncoderDisconnected",
"eventTime": "2018-08-07T23:08:09.1710872",
"id": "<id>",
"data": {
"ingestUrl": "http://mle1-amsts03mediaacctgndos-ts031.channel.media.azure-test.net:80/ingest.isml",
"streamId": "15864-stream0",
"encoderIp": "131.107.147.xxx",
"encoderPort": "27485",
"resultCode": "S_OK"
},
"dataVersion": "1.0",
"metadataVersion": "1"
}
]
数据对象具有以下属性:
属性 | 类型 | 说明 |
---|---|---|
streamId |
string | 流或连接的标识符。 编码器或客户负责在引入 URL 中添加此 ID。 |
ingestUrl |
string | 直播活动提供的引入 URL。 |
encoderIp |
string | 编码器的 IP。 |
encoderPort |
string | 此流的来源编码器的端口。 |
resultCode |
string | 编码器断开连接的原因。 可能是正常断开连接,或者是由于出错而断开连接。 下表中列出了结果代码。 |
可在实时事件错误代码中找到错误结果代码。
正常断开连接结果代码为:
结果代码 | 说明 |
---|---|
S_OK | 编码器已成功断开连接。 |
MPE_CLIENT_TERMINATED_SESSION | 编码器已断开连接 (RTMP)。 |
MPE_CLIENT_DISCONNECTED | 编码器已断开连接 (FMP4)。 |
MPI_REST_API_CHANNEL_RESET | 收到通道重置命令。 |
MPI_REST_API_CHANNEL_STOP | 收到通道停止命令。 |
MPI_REST_API_CHANNEL_STOP | 正在维护通道。 |
MPI_STREAM_HIT_EOF | 编码器已发送 EOF 流。 |
LiveEventIncomingDataChunkDropped
以下示例显示 LiveEventIncomingDataChunkDropped 事件的架构:
[
{
"topic": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.Media/mediaServices/<account-name>",
"subject": "/LiveEvents/MyLiveEvent1",
"eventType": "Microsoft.Media.LiveEventIncomingDataChunkDropped",
"eventTime": "2018-01-16T01:57:26.005121Z",
"id": "03da9c10-fde7-48e1-80d8-49936f2c3e7d",
"data": {
"trackType": "Video",
"trackName": "Video",
"bitrate": 300000,
"timestamp": "36656620000",
"timescale": "10000000",
"resultCode": "FragmentDrop_OverlapTimestamp"
},
"dataVersion": "1.0",
"metadataVersion": "1"
}
]
数据对象具有以下属性:
属性 | 类型 | 说明 |
---|---|---|
trackType |
string | 轨道类型(音频/视频)。 |
trackName |
string | 轨道名称。 |
bitrate |
integer | 轨道的比特率。 |
timestamp |
string | 已删除的数据区块的时间戳。 |
timescale |
string | 时间戳的时间刻度。 |
resultCode |
string | 删除数据区块的原因。 FragmentDrop_OverlapTimestamp 或 FragmentDrop_NonIncreasingTimestamp。 |
LiveEventIncomingStreamReceived
以下示例显示 LiveEventIncomingStreamReceived 事件的架构:
[
{
"topic": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.Media/mediaservices/<account-name>",
"subject": "liveEvent/mle1",
"eventType": "Microsoft.Media.LiveEventIncomingStreamReceived",
"eventTime": "2018-08-07T23:08:10.5069288Z",
"id": "7f939a08-320c-47e7-8250-43dcfc04ab4d",
"data": {
"ingestUrl": "http://mle1-amsts03mediaacctgndos-ts031.channel.media.azure-test.net:80/ingest.isml/Streams(15864-stream0)15864-stream0",
"trackType": "video",
"trackName": "video",
"bitrate": 2962000,
"encoderIp": "131.107.147.xxx",
"encoderPort": "27485",
"timestamp": "15336831655032322",
"duration": "20000000",
"timescale": "10000000"
},
"dataVersion": "1.0",
"metadataVersion": "1"
}
]
数据对象具有以下属性:
属性 | 类型 | 说明 |
---|---|---|
trackType |
string | 轨道类型(音频/视频)。 |
trackName |
string | 轨迹的名称(由编码器提供;对于 RTMP,由服务器以 TrackType_Bitrate 格式生成)。 |
bitrate |
integer | 轨道的比特率。 |
ingestUrl |
string | 直播活动提供的引入 URL。 |
encoderIp |
string | 编码器的 IP。 |
encoderPort |
string | 此流的来源编码器的端口。 |
timestamp |
string | 收到数据区块的第一个时间戳。 |
timescale |
string | 用于表示时间戳的时间刻度。 |
LiveEventIncomingStreamsOutOfSync
以下示例显示 LiveEventIncomingStreamsOutOfSync 事件的架构:
[
{
"topic": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.Media/mediaservices/<account-name>",
"subject": "liveEvent/mle1",
"eventType": "Microsoft.Media.LiveEventIncomingStreamsOutOfSync",
"eventTime": "2018-08-10T02:26:20.6269183Z",
"id": "b9d38923-9210-4c2b-958f-0054467d4dd7",
"data": {
"minLastTimestamp": "319996",
"typeOfStreamWithMinLastTimestamp": "Audio",
"maxLastTimestamp": "366000",
"typeOfStreamWithMaxLastTimestamp": "Video",
"timescaleOfMinLastTimestamp": "10000000",
"timescaleOfMaxLastTimestamp": "10000000"
},
"dataVersion": "1.0",
"metadataVersion": "1"
}
]
数据对象具有以下属性:
属性 | 类型 | 说明 |
---|---|---|
minLastTimestamp |
string | 所有轨迹(音频或视频)中最后一个时间戳的最小值。 |
typeOfTrackWithMinLastTimestamp |
string | 最后一个时间戳最小的轨迹的类型(音频或视频)。 |
maxLastTimestamp |
string | 所有轨迹(音频或视频)中所有时间戳的最大值。 |
typeOfTrackWithMaxLastTimestamp |
string | 最后一个时间戳最大的轨迹的类型(音频或视频)。 |
timescaleOfMinLastTimestamp |
string | 获取用于表示“MinLastTimestamp”的时间刻度。 |
timescaleOfMaxLastTimestamp |
string | 获取用于表示“MaxLastTimestamp”的时间刻度。 |
LiveEventIncomingVideoStreamsOutOfSync
以下示例显示 LiveEventIncomingVideoStreamsOutOfSync 事件的架构:
[
{
"topic": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.Media/mediaServices/<account-name>",
"subject": "/LiveEvents/LiveEvent1",
"eventType": "Microsoft.Media.LiveEventIncomingVideoStreamsOutOfSync",
"eventTime": "2018-01-16T01:57:26.005121Z",
"id": "6dd4d862-d442-40a0-b9f3-fc14bcf6d750",
"data": {
"firstTimestamp": "2162058216",
"firstDuration": "2000",
"secondTimestamp": "2162057216",
"secondDuration": "2000",
"timescale": "10000000"
},
"dataVersion": "1.0",
"metadataVersion": "1"
}
]
数据对象具有以下属性:
属性 | 类型 | 说明 |
---|---|---|
firstTimestamp |
string | 收到视频类型的某个轨迹/质量级别的时间戳。 |
firstDuration |
string | 具有第一个时间戳的数据区块的持续时间。 |
secondTimestamp |
string | 收到视频类型的其他某个轨迹/质量级别的时间戳。 |
secondDuration |
string | 具有第二个时间戳的数据区块的持续时间。 |
timescale |
string | 时间戳和持续时间的时间刻度。 |
LiveEventIngestHeartbeat
以下示例显示 LiveEventIngestHeartbeat 事件的架构:
[
{
"topic": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.Media/mediaservices/<account-name>",
"subject": "liveEvent/mle1",
"eventType": "Microsoft.Media.LiveEventIngestHeartbeat",
"eventTime": "2021-05-14T23:50:00.324",
"id": "7f450938-491f-41e1-b06f-c6cd3965d786",
"data": {
"trackType":"video",
"trackName":"video",
"bitrate":2500000,
"incomingBitrate":2462597,
"lastTimestamp":"106999",
"timescale":"1000",
"overlapCount":0,
"discontinuityCount":0,
"nonincreasingCount":0,
"unexpectedBitrate":false,
"state":"Running",
"healthy":true,
"lastFragmentArrivalTime":"2021-05-14T23:50:00.324",
"ingestDriftValue":"0",
"transcriptionState":"",
"transcriptionLanguage":""
},
"dataVersion": "1.0",
"metadataVersion": "1"
}
]
数据对象具有以下属性:
属性 | 类型 | 说明 |
---|---|---|
trackType |
string | 轨道类型(音频/视频)。 |
trackName |
string | 轨迹的名称(由编码器提供;对于 RTMP,由服务器以 TrackType_Bitrate 格式生成)。 |
bitrate |
integer | 轨道的比特率。 |
incomingBitrate |
integer | 基于来自编码器的数据区块计算出的比特率。 |
lastTimestamp |
string | 在过去 20 秒收到的轨迹的最新时间戳。 |
timescale |
string | 用于表示时间戳的时间刻度。 |
overlapCount |
integer | 在过去 20 秒数据区块数目包含重叠的时间戳。 |
discontinuityCount |
integer | 在过去 20 秒观察到的不连续性数目。 |
nonIncreasingCount |
integer | 在过去 20 秒收到的具有以往时间戳的数据区块数。 |
unexpectedBitrate |
bool | 在过去 20 秒,预期和实际比特率之差是否超过了允许的限制。 当且仅当 incomingBitrate >= 2* 比特率,或者 incomingBitrate <= 比特率/2,或者 IncomingBitrate = 0 时,此属性的值才为 true。 |
state |
string | 直播活动的状态。 |
healthy |
bool | 指示引入是否正常(基于计数和标志判断)。 如果 overlapCount = 0 并且 discontinuityCount = 0 并且 nonIncreasingCount = 0 并且 unexpectedBitrate = false,则 Healthy 为 true。 |
lastFragmentArrivalTime |
string | 片段到达引入终结点的最后一个时间戳 (UTC)。 示例日期格式为“2020-11-11 12:12:12:888999” |
ingestDriftValue |
string | 指示最后一分钟内传入音频或视频数据的延迟速度,单位为秒/分钟。 如果在最后一分钟内数据到达实时事件的速度比预期的慢,则该值大于零;如果数据没有延迟到达,则为零;如果没有收到音频或视频数据,则为“n/a”。 例如,如果有一个贡献编码器发送实时内容,并且由于处理问题或网络延迟而速度变慢,则它可能在一分钟内只能提供总共 58 秒的音频或视频。 这将报告为偏移 2 秒/分钟。 如果编码器能够跟上并且每分钟发送全部 60 秒或更多数据,则此值将报告为 0。 如果与编码器断开连接或不连续,该值可能仍显示为 0,因为它不考虑数据(仅限在时间戳中延迟的数据)中断。 |
transcriptionState |
string | 如果启用了实时听录,则音轨信号的值为“开”,否则将出现一个空字符串。 此状态仅适用于实时听录的“音频”轨道类型。 所有其他轨道的值都为空。 |
transcriptionLanguage |
string | 听录语言的语言代码(采用 BCP-47 格式)。 例如 de-de 表示德语(德国)。 对于视频轨道信号,或在关闭了实时听录时,该值为空。 |
LiveEventChannelArchiveHeartbeat
以下示例显示 LiveEventChannelArchiveHeartbeatEvent 事件的架构:
[
{
"topic": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.Media/mediaservices/<account-name>",
"subject": "liveEvent/mle1",
"eventType": "Microsoft.Media.LiveEventChannelArchiveHeartbeat",
"eventTime": "2021-05-14T23:50:00.324",
"id": "7f450938-491f-41e1-b06f-c6cd3965d786",
"data": {
"channelLatencyMs": "10",
"latencyResultCode": "S_OK"
},
"dataVersion": "1.0",
"metadataVersion": "1"
}
]
数据对象具有以下属性:
属性 | 类型 | 说明 |
---|---|---|
channelLatencyMs |
字符串 | 引入的视频在发布到 HLS/DASH 清单供玩家下载之前在实时事件管道中花费的时间(以毫秒 (ms) 为单位)。 |
latencyResultCode |
字符串 | channelLatencyMs 计算的结果代码。
S_OK 指示接收实时事件引入时没有出现任何问题。 其他结果代码指示会导致 channelLatencyMs 值为空的情况。
MPE_KEY_FRAME_INTERVAL_TOO_LARGE 错误代码指示引入的视频源具有较大的 GOP(关键帧距离),这会对通道延迟产生负面影响。
MPE_INGEST_DISCONTINUITY 错误代码指示在源流上检测到不连续性,这可能会增加通道的长延迟。 |
LiveEventTrackDiscontinuityDetected
以下示例显示 LiveEventTrackDiscontinuityDetected 事件的架构:
[
{
"topic": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.Media/mediaservices/<account-name>",
"subject": "liveEvent/mle1",
"eventType": "Microsoft.Media.LiveEventTrackDiscontinuityDetected",
"eventTime": "2018-08-07T23:18:06.1270405Z",
"id": "5f4c510d-5be7-4bef-baf0-64b828be9c9b",
"data": {
"trackName": "video",
"previousTimestamp": "15336837615032322",
"trackType": "video",
"bitrate": 2962000,
"newTimestamp": "15336837619774273",
"discontinuityGap": "575284",
"timescale": "10000000"
},
"dataVersion": "1.0",
"metadataVersion": "1"
}
]
数据对象具有以下属性:
属性 | 类型 | 说明 |
---|---|---|
trackType |
string | 轨道类型(音频/视频)。 |
trackName |
string | 轨迹的名称(由编码器提供;对于 RTMP,由服务器以 TrackType_Bitrate 格式生成)。 |
bitrate |
integer | 轨道的比特率。 |
previousTimestamp |
string | 前一个片段的时间戳。 |
newTimestamp |
string | 当前片段的时间戳。 |
discontinuityGap |
string | 上面两个时间戳之间的差距。 |
timescale |
string | 用于表示时间戳和非连续性差距的时间刻度。 |
自定义事件属性
事件具有以下顶级数据:
属性 | 类型 | 说明 |
---|---|---|
topic |
字符串 | 事件网格主题。 此属性包含媒体服务帐户的资源 ID。 |
subject |
string | 媒体服务帐户下媒体服务通道的资源路径。 连接主题和使用者可以获得作业的资源 ID。 |
eventType |
string | 此事件源的一个注册事件类型。 例如,“Microsoft.Media.JobStateChange”。 |
eventTime |
string | 基于提供程序 UTC 时间的事件生成时间。 |
id |
字符串 | 事件的唯一标识符。 |
data |
object | 媒体服务事件数据。 |
dataVersion |
string | 数据对象的架构版本。 发布者定义架构版本。 |
metadataVersion |
string | 事件元数据的架构版本。 事件网格定义顶级属性的架构。 事件网格提供此值。 |