Cette page explique comment utiliser les journaux de plate-forme générés par l'API Live Stream as
part of Cloud Logging. L'API Live Stream utilise le nom de service de l'API Logging
livestream.googleapis.com pour consigner l'activité liée aux canaux.
Avant de commencer
- Assurez-vous de disposer des autorisations et des rôles IAM appropriés pour afficher et gérer les journaux.
Activer la journalisation de la plate-forme
Par défaut, les journaux de plate-forme livestream.googleapis.com/channel_activities de l'API Live Stream sont désactivés. Pour les activer, vous devez spécifier un niveau de gravité lorsque vous créez ou mettez à jour la ressource de canal.
Pour activer les journaux, ajoutez le champ suivant au corps JSON de la requête de la
projects.locations.channels.create ou de la
projects.locations.channels.patch méthode :
"logConfig": {
"logSeverity": "SEVERITY_LEVEL"
},
où SEVERITY_LEVEL est l'un des éléments suivants :
OFFDEBUGINFOWARNINGERROR
Une fois que vous avez choisi un niveau de gravité pour les journaux d'un canal, seuls les journaux de plate-forme dont le niveau de gravité est supérieur ou égal à celui choisi sont consignés.
Par exemple, si le niveau de gravité est WARNING, seuls les journaux dont le niveau de gravité est WARNING et ERROR sont consignés. Si le niveau de gravité est INFO, les journaux de tous les niveaux de gravité, à l'exception de DEBUG, sont consignés.
Pour en savoir plus sur les niveaux de gravité des journaux, consultez LogSeverity.
Afficher les journaux de plate-forme
Pour afficher les journaux de plate-forme, procédez comme suit :
Console
Pour afficher les journaux de plate-forme dans la Google Cloud console :
Accédez à l'explorateur de journaux :
Sélectionnez leprojetapproprié. Google Cloud
Dans le champ Requête, saisissez la commande de requête suivante :
resource.labels.channel_id=CHANNEL_ID resource.labels.location=LOCATION logName="projects/PROJECT_ID/logs/livestream.googleapis.com%2Fchannel_activities"
où :
CHANNEL_IDcorrespond à l'ID du canal que vous souhaitez déboguer ou surveiller. Exemple :my-channel.LOCATIONcorrespond à l'emplacement du canal que vous souhaitez déboguer ou surveiller. Exemple :us-central1.PROJECT_IDcorrespond à l'ID du projet contenant le canal que vous souhaitez déboguer ou surveiller. Exemple :my-project.
Cliquez sur Exécuter la requête.
Pour en savoir plus sur l'explorateur de journaux, consultez Présentation de l'explorateur de journaux et Utiliser l'explorateur de journaux.
gcloud
L'outil de ligne de commande gcloud fournit une interface de ligne de commande à Cloud Logging.
Pour afficher les journaux channel_activities de votre projet, exécutez la commande suivante :
gcloud logging read "logName:projects/PROJECT_ID/logs/livestream.googleapis.com%2Fchannel_activities" --project=PROJECT_ID
où PROJECT_ID correspond à l'ID de votre Google Cloud projet.
Pour en savoir plus sur l'utilisation de l'outil gcloud avec Cloud Logging, consultez
gcloud logging.
Utiliser les journaux de plate-forme
Cette section explique comment utiliser et interpréter des journaux de plate-forme spécifiques pour l'API Live Stream.
eventStateChange
Les journaux eventStateChange sont générés lorsque l'état d'un événement de canal change. Le niveau de gravité d'un journal eventStateChange est ERROR lorsque le nouvel état de l'événement de canal est FAILED. Sinon, le niveau de gravité d'un journal eventStateChange est INFO.
Voici un exemple de journal 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
Les journaux scte35CommandReceived sont générés lorsque le flux d'entrée reçoit une commande SCTE35. Le niveau de gravité d'un journal scte35CommandReceived est INFO.
Seuls durationFlag, breakDuration, spliceTime et outOfNetworkIndicator sont traités. Lorsque spliceTime est manquant, la commande SCTE35 est exécutée immédiatement. Tous les autres champs sont traités comme des no-ops.
Voici un exemple de journal 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
outOfNetworkIndicator: true
programSpliceFlag: true
spliceEventCancelIndicator: false
spliceEventId: 123456789
spliceImmediateFlag: true
spliceTime: null
uniqueProgramId: 5
}
}
}
message: "Received inband SCTE35 command, eventID=123456789."
}
...
severity: "INFO"
...
}
streamingStateChange
Les journaux streamingStateChange sont générés lorsque l'état de diffusion d'un canal change. Le niveau de gravité d'un journal streamingStateChange est ERROR lorsque le
nouvel état du canal est STREAMING_ERROR. Sinon, le niveau de gravité d'un journal streamingStateChange est INFO.
Voici un exemple de journal streamingStateChange où l'état précédent
est STREAMING_ERROR et le nouvel état est 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"
...
}
Vous pouvez ajouter des commandes supplémentaires dans le champ Requête de l'explorateur de journaux pour limiter les journaux affichés.
Ajoutez la commande suivante pour afficher tous les journaux streamingStateChange où le nouvel état est STREAMING :
jsonPayload.streamingStateChange.newState="STREAMING"
Ajoutez la commande suivante pour n'afficher que les journaux streamingStateChange :
jsonPayload.streamingStateChange.newState:*
streamingError
Les journaux streamingError sont générés lorsqu'un canal rencontre une erreur liée à la diffusion. Le niveau de gravité d'un journal streamingError est ERROR.
Voici un exemple de journal streamingError où l'API Live Stream n'a pas été autorisée à importer des fichiers de sortie dans le bucket Cloud Storage spécifié :
{
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"
...
}
Cette erreur peut également se produire si le bucket Cloud Storage spécifié n'existe pas.
inputAccept
Les journaux inputAccept sont générés lorsqu'un flux d'entrée est correctement connecté au point de terminaison d'entrée de l'API Live Stream. Le niveau de gravité des journaux inputAccept est INFO.
Le champ inputStreamProperty d'un journal inputAccept inclut les informations suivantes sur les sous-flux vidéo et audio du flux d'entrée :
| Flux vidéo |
|
| Flux audio |
|
Vous pouvez utiliser les journaux inputAccept pour vérifier le format et l'état d'acceptation du flux d'entrée :
{
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"
...
}
Ajoutez la commande suivante dans le champ Requête de l'explorateur de journaux pour n'afficher que les journaux inputAccept d'un flux spécifique :
jsonPayload.inputAccept.streamId="STREAM_ID"
où STREAM_ID correspond à l'identifiant unique d'un flux inclus dans l'URI du point de terminaison d'entrée .
inputError
Les journaux inputError sont générés lorsqu'un flux d'entrée est rejeté par l'API Live Stream. Le niveau de gravité d'un journal inputError est ERROR.
Voici un exemple de journal inputError où un flux d'entrée a été envoyé à un canal qui n'a pas encore démarré :
{
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"
...
}
Voici un exemple de journal inputError où un flux d'entrée en double a été envoyé à un canal déjà en 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"
...
}
Ajoutez la commande suivante dans le champ Requête de l'explorateur de journaux pour n'afficher que les journaux inputError d'un flux spécifique :
jsonPayload.inputError.streamId="STREAM_ID"
où STREAM_ID correspond à l'identifiant unique d'un flux inclus dans l'URI du point de terminaison d'entrée .
inputDisconnect
Les journaux inputDisconnect sont générés lorsque les flux d'entrée sont déconnectés de l'API Live Stream. Vous pouvez utiliser les journaux inputDisconnect pour vérifier les déconnexions inattendues des flux en direct. Le niveau de gravité d'un journal inputDisconnect est INFO.
Voici un exemple de journal 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"
...
}