使用平台日志

本页面介绍了如何将 Live Stream API 生成的平台日志用作 是 Cloud Logging 的一部分。Live Stream API 使用 Logging API 服务名称 livestream.googleapis.com,用于记录与频道相关的活动。

准备工作

启用平台日志记录

默认情况下,livestream.googleapis.com/channel_activities 平台会记录 Live Stream API 已停用。要激活这些日志,您需要指定一个 严重级别。

要激活日志,请将以下字段添加到 projects.locations.channels.createprojects.locations.channels.patch 方法:

   "logConfig": {
     "logSeverity": "SEVERITY_LEVEL"
   },
  

其中 SEVERITY_LEVEL 是以下值之一:

  • OFF
  • DEBUG
  • INFO
  • WARNING
  • ERROR

为渠道选择日志严重级别后,只有 会记录一个大于或等于所选严重级别的严重级别。 例如,如果严重级别为 WARNING,则仅限严重级别的日志 系统会记录 WARNINGERROR。如果严重级别为 INFO,系统会记录所有 系统会记录除 DEBUG 以外的严重级别。

如需详细了解日志严重级别,请参阅 LogSeverity

查看平台日志

如需查看平台日志,请按照以下说明操作:

控制台

如需在 Google Cloud 控制台中查看平台日志,请执行以下操作:

  1. 导航到日志浏览器:

    前往日志浏览器

  2. 选择相应的 Google Cloud 项目。

  3. 查询字段中,输入以下查询命令:

    resource.labels.channel_id=CHANNEL_ID
    resource.labels.location=LOCATION
    logName="projects/PROJECT_ID/logs/livestream.googleapis.com%2Fchannel_activities"
    

    其中:

    • CHANNEL_ID 是要调试或监控的频道的 ID。例如 my-channel

    • LOCATION 是要调试或监控的渠道的位置。例如 us-central1

    • PROJECT_ID 是包含要调试或监控的渠道的项目的 ID。例如 my-project

  4. 点击运行查询

如需详细了解日志浏览器,请参阅 日志浏览器概览使用日志浏览器

gcloud

gcloud 命令行工具提供了用于 Cloud Logging 的命令行界面。

如需查看项目的 channel_activities 日志,请运行以下命令:

gcloud logging read "logName:projects/PROJECT_ID/logs/livestream.googleapis.com%2Fchannel_activities" --project=PROJECT_ID

其中,PROJECT_ID 是您的 Google Cloud 项目的 ID。

如需详细了解如何将 gcloud 工具与 Cloud Logging 搭配使用,请参阅 gcloud logging

使用平台日志

本部分介绍如何使用和解读特定平台日志来实现以下目的: Live Stream API。

eventStateChange

当渠道事件的状态时,会生成 eventStateChange 日志 更改。如果某个 eventStateChange 日志的严重级别为 ERROR, 频道事件的新状态为 FAILED。否则, eventStateChange 日志为 INFO

以下是 eventStateChange 日志的示例:

{
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.video.livestream.logging.v1.ChannelActivity"
    eventStateChange: {
      eventId: "my-ad-break"
      newState: "SCHEDULED"
      previousState: "PENDING"
    }
    message: "State of event "my-ad-break" changed from "PENDING" to "SCHEDULED"."
  }
  ...
  severity: "INFO"
  ...
}

scte35CommandReceived

scte35CommandReceived 当输入流收到 SCTE35 命令。scte35CommandReceived 日志的严重级别为 INFO

以下是 scte35CommandReceived 日志的示例:

{
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.video.livestream.logging.v1.ChannelActivity"
    scte35CommandReceived: {
      spliceInfoSection: {
        ptsAdjustment: "123456789"
        spliceInsert: {
          availNum: 0
          availsExpected: 0
          breakDuration: null
          componentCount: 0
          components: [0]
          durationFlag: false
          out0fNetworkIndicator: true
          programSpliceFlag: true
          spliceEventCancelIndicator: false
          spliceEventId: 123456789
          spliceImmediateFlag: true
          spliceTime: null
          uniqueProgramId: 5
        }
      }
    }
    message: "Received inband SCTE35 command, eventID=123456789."
  }
  ...
  severity: "INFO"
  ...
}

streamingStateChange

当频道的流处理状态时,会生成 streamingStateChange 日志 更改。如果某个 streamingStateChange 日志的严重级别为 ERROR, 渠道的新状态为 STREAMING_ERROR。否则, streamingStateChange 日志为 INFO

以下是 streamingStateChange 日志的示例,其中 状态为 STREAMING_ERROR,新状态为 STREAMING

{
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.video.livestream.logging.v1.ChannelActivity"
    message: "streaming state of channel "CHANNEL_ID" changes from "STREAMING_ERROR" to "STREAMING""
    streamingStateChange: {
      newState: "STREAMING"
      previousState: "STREAMING_ERROR"
      ...
    type: "livestream.googleapis.com/Channel"
  }
  severity: "INFO"
  ...
}

您可以在日志浏览器查询字段中添加其他命令,以缩小显示的日志的范围。

添加以下命令以显示新状态为 STREAMING 的所有 streamingStateChange 日志:

jsonPayload.streamingStateChange.newState="STREAMING"

添加以下命令以仅显示 streamingStateChange 日志:

jsonPayload.streamingStateChange.newState:*

streamingError

当频道遇到与直播相关的事件时,会生成 streamingError 日志 错误。streamingError 日志的日志严重级别为 ERROR

下面是一个 streamingError 日志示例,其中 Live Stream API 是 拒绝将输出文件上传到指定 Cloud Storage 存储桶的权限:

{
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.video.livestream.logging.v1.ChannelActivity"
    message: "A live streaming encounters an error."
    streamingError: {
      error: {
        ...
        message: "Permission denied to access the Cloud Storage bucket "STORAGE_BUCKET_NAME""
  ...
  severity: "ERROR"
  ...
}

如果指定的 Cloud Storage 存储桶不存在,也可能会发生此错误。

如果 streamingError.message 显示消息 This is due to an internal error. If the error persists, please contact support team,请复制日志的 内容,并将其发送给支持团队进行问题排查。

inputAccept

成功连接输入流后会生成 inputAccept 日志 连接到 Live Stream API 输入端点。inputAccept 日志的严重级别 为 INFO

inputAccept 日志中的 inputStreamProperty 字段包含以下内容 有关输入流的视频子流和音频子流的信息:

视频串流
  • 索引
  • 编解码器
  • 帧速率
  • 分辨率
音频流
  • 索引
  • 频道数
  • 频道布局
  • 编解码器信息

您可以使用 inputAccept 日志来验证 输入流:

{
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.video.livestream.logging.v1.ChannelActivity"
    inputAccept: {
      inputAttachment: "input-primary"
      inputStreamProperty: {
        audioStreams: [
          0: {
            audioFormat: {
              channelCount: 2
              channelLayout: [
                0: "fl"
                1: "fr"
              ]
              codec: "aac"
            }
            index: 1
          }
        ]
        videoStreams: [
          0: {
            videoFormat: {
              codec: "h264"
              frameRate: 60
              heightPixels: 720
              widthPixels: 1280
      ...
      streamId: "STREAM_ID"
    }
    message: "Input stream "STREAM_ID" is accepted by channel "CHANNEL_ID" for input attachment "input-primary""
  }
  ...
  severity: "INFO"
  ...
}

在日志浏览器的查询字段中添加以下命令,以显示 特定数据流的 inputAccept 日志:

jsonPayload.inputAccept.streamId="STREAM_ID"

其中,STREAM_ID 是包含在 inputs 事件的流的唯一标识符 端点 URI

inputError

inputError 当输入流被 Live Stream API。inputError 日志的严重级别为 ERROR

以下是发送输入流的 inputError 日志示例 尚未开始的频道:

{
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.video.livestream.logging.v1.ChannelActivity"
    inputError: {
      error: {
        ...
        message: "The channel has not been started yet"
      }
      streamId: "STREAM_ID"
  ...
  severity: "ERROR"
  ...
}

以下是 inputError 日志的示例,其中存在重复的输入流 发送给已经在直播的频道:

{
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.video.livestream.logging.v1.ChannelActivity"
    inputError: {
      error: {
        code: 9
        message: "input stream "STREAM_ID" has been accepted. Please verify if another input stream has been streaming to the same endpoint."
      }
      streamId: "STREAM_ID"
  ...
  severity: "ERROR"
  ...
}

在日志浏览器 Query 字段中添加以下命令,以便仅显示 特定数据流的 inputError 日志:

jsonPayload.inputError.streamId="STREAM_ID"

其中,STREAM_ID 是包含在 inputs 事件的流的唯一标识符 端点 URI

inputDisconnect

输入流断开连接时生成 inputDisconnect 日志 从 Live Stream API 导入。您可以使用inputDisconnect日志 直播意外中断inputDisconnect 的严重级别 日志为 INFO

以下是 inputDisconnect 日志的示例:

{
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.video.livestream.logging.v1.ChannelActivity"
    inputDisconnect: {
      inputAttachment: "input-primary"
      streamId: "STREAM_ID"
    }
    message: "Input stream "STREAM_ID" is disconnected by channel "CHANNEL_ID" for input attachment "input-primary""
  ...
  severity: "INFO"
  ...
}