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
- Certifique-se de que tem as autorizações e as funções de IAM corretas para ver e gerir registos.
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:
Navegue para o Explorador de registos:
Selecione o Google Cloud projeto adequado.
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
.
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 eventStateChange
sã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 |
|
Streams de áudio |
|
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 inputDisconnect
sã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" ... }