Usar registos da plataforma

Esta página descreve como usar os registos da plataforma gerados pela API Live Stream como parte do Cloud Logging. A API Live Stream usa o nome do serviço da API Logging livestream.googleapis.com para registar a atividade relacionada com o canal.

Antes de começar

Ative o registo da plataforma

Por predefinição, os registos da plataforma livestream.googleapis.com/channel_activities para a API Live Stream estão desativados. Para ativar os registos, tem de especificar um nível de gravidade quando criar ou atualizar o recurso do canal.

Para ativar os registos, adicione o seguinte campo ao corpo JSON do pedido do método projects.locations.channels.create ou projects.locations.channels.patch:

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

em que SEVERITY_LEVEL é uma das seguintes opções:

  • OFF
  • DEBUG
  • INFO
  • WARNING
  • ERROR

Depois de escolher um nível de gravidade do registo para um canal, apenas os registos da plataforma com um nível de gravidade superior ou igual ao nível de gravidade escolhido são registados. Por exemplo, se o nível de gravidade for WARNING, apenas são registados os registos com o nível de gravidade WARNING e ERROR. Se o nível de gravidade for INFO, são registados registos de todos os níveis de gravidade, exceto DEBUG.

Para mais informações sobre os níveis de gravidade dos registos, consulte LogSeverity.

Veja os registos da plataforma

Para ver os registos da plataforma, siga as instruções abaixo:

Consola

Para ver os registos da plataforma na Google Cloud consola:

  1. Navegue para o Explorador de registos:

    Aceda ao Explorador de registos

  2. Selecione o Google Cloud projeto adequado.

  3. No campo Consulta, introduza o seguinte comando de consulta:

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

    where:

    • CHANNEL_ID é o ID do canal que quer depurar ou monitorizar. Por exemplo, my-channel.

    • LOCATION é a localização do canal que quer depurar ou monitorizar. Por exemplo, us-central1.

    • PROJECT_ID é o ID do projeto que contém o canal que quer depurar ou monitorizar. Por exemplo, my-project.

  4. Clique em Executar consulta.

Para mais informações sobre o Explorador de registos, consulte os artigos Vista geral do Explorador de registos e Usar o Explorador de registos.

gcloud

A ferramenta de linhas de comando gcloud fornece uma interface de linhas de comando para o Cloud Logging.

Para ver os registos channel_activities do seu projeto, execute o seguinte comando:

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

em que PROJECT_ID é o ID do seu projeto Google Cloud .

Para mais informações sobre a utilização da ferramenta gcloud com o Cloud Logging, consulte o artigo gcloud logging.

Use registos da plataforma

Esta secção descreve como usar e interpretar registos específicos da plataforma para a API Live Stream.

eventStateChange

Os registos eventStateChangesão gerados quando o estado de um evento do canal muda. O nível de gravidade de um registo eventStateChange é ERROR quando o novo estado do evento do canal é FAILED. Caso contrário, o nível de gravidade de um registo eventStateChange é INFO.

Segue-se um exemplo de um eventStateChange registo:

{
  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

Os registos scte35CommandReceived são gerados quando a stream de entrada recebe um comando SCTE35. O nível de gravidade de um registo scte35CommandReceived é INFO.

Apenas são processados os campos durationFlag, breakDuration, spliceTime e outOfNetworkIndicator. Quando spliceTime está em falta, o comando SCTE35 é executado imediatamente. Todos os outros campos são tratados como no-ops.

Segue-se um exemplo de um scte35CommandReceived registo:

{
  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
          outOfNetworkIndicator: true
          programSpliceFlag: true
          spliceEventCancelIndicator: false
          spliceEventId: 123456789
          spliceImmediateFlag: true
          spliceTime: null
          uniqueProgramId: 5
        }
      }
    }
    message: "Received inband SCTE35 command, eventID=123456789."
  }
  ...
  severity: "INFO"
  ...
}

streamingStateChange

Os registos streamingStateChange são gerados quando o estado de streaming de um canal muda. O nível de gravidade de um registo streamingStateChange é ERROR quando o novo estado do canal é STREAMING_ERROR. Caso contrário, o nível de gravidade de um registo streamingStateChange é INFO.

Segue-se um exemplo de um registo streamingStateChange em que o estado anterior é STREAMING_ERROR e o novo estado é 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"
  ...
}

Pode adicionar comandos adicionais no campo Consulta do Explorador de registos para restringir os registos apresentados.

Adicione o seguinte comando para apresentar todos os registos de streamingStateChange em que o novo estado é STREAMING:

jsonPayload.streamingStateChange.newState="STREAMING"

Adicione o seguinte comando para apresentar apenas registos streamingStateChange:

jsonPayload.streamingStateChange.newState:*

streamingError

Os registos streamingError são gerados quando um canal encontra um erro relacionado com o streaming. O nível de gravidade do registo de um registo streamingError é ERROR.

Segue-se um exemplo de um registo streamingError onde a API Live Stream teve a permissão negada para carregar ficheiros de saída para o contentor do Cloud Storage especificado:

{
  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"
  ...
}

Este erro também pode ocorrer se o contentor do Cloud Storage especificado não existir.

Se o streamingError.message apresentar a mensagem This is due to an internal error. If the error persists, please contact support team, copie o conteúdo do registo e envie-o à equipa de apoio técnico para resolução de problemas.

inputAccept

Os registos inputAccept são gerados quando uma stream de entrada é associada com êxito ao ponto final de entrada da API Live Stream. O nível de gravidade dos registos inputAccept é INFO.

O campo inputStreamProperty num registo inputAccept inclui as seguintes informações sobre as sub-streams de vídeo e áudio da stream de entrada:

Streams de vídeo
  • índice
  • codec
  • velocidade de frames
  • resolução
Streams de áudio
  • índice
  • número de canais
  • esquema do canal
  • informações do codec

Pode usar os registos inputAccept para validar o formato e o estado de aceitação do fluxo de entrada:

{
  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"
  ...
}

Adicione o seguinte comando no campo Consulta do Explorador de registos para apresentar apenas registos inputAccept para uma stream específica:

jsonPayload.inputAccept.streamId="STREAM_ID"

em que STREAM_ID é o identificador exclusivo de uma stream incluída no URI do ponto final de entrada.

inputError

Os registos inputError são gerados quando uma stream de entrada é rejeitada pela API Live Stream. O nível de gravidade de um registo inputError é ERROR.

Segue-se um exemplo de um registo inputError em que uma stream de entrada foi enviada para um canal que ainda não foi iniciado:

{
  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"
  ...
}

Segue-se um exemplo de um registo inputError em que foi enviado um fluxo de entrada duplicado para um canal que já está em streaming:

{
  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"
  ...
}

Adicione o seguinte comando no campo Consulta do Explorador de registos para apresentar apenas os registos inputError de uma stream específica:

jsonPayload.inputError.streamId="STREAM_ID"

em que STREAM_ID é o identificador exclusivo de uma stream incluída no URI do ponto final de entrada.

inputDisconnect

Os registos inputDisconnectsão gerados quando as streams de entrada são desligadas da API Live Stream. Pode usar os registos inputDisconnect para verificar se existem desconexões inesperadas da stream em direto. O nível de gravidade de um registo inputDisconnect é INFO.

Segue-se um exemplo de um inputDisconnect registo:

{
  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"
  ...
}