本頁說明如何使用 Live Stream API 產生的平台記錄,做為 Cloud Logging 的一部分。Live Stream API 會使用 Logging API 服務名稱 livestream.googleapis.com 記錄與頻道相關的活動。
事前準備
- 請確認您具備正確的 IAM 權限和角色,才能查看及管理記錄。
啟用平台記錄功能
根據預設,Live Stream API 的 livestream.googleapis.com/channel_activities平台記錄檔會停用。如要啟用記錄,您需要在建立或更新管道資源時指定嚴重程度。
如要啟用記錄,請在 projects.locations.channels.create 或 projects.locations.channels.patch 方法的要求 JSON 主體中新增下列欄位:
"logConfig": {
"logSeverity": "SEVERITY_LEVEL"
},
其中 SEVERITY_LEVEL 是下列其中一項:
OFFDEBUGINFOWARNINGERROR
為管道選擇記錄嚴重性等級後,系統只會記錄嚴重性等級高於或等於所選等級的平台記錄。舉例來說,如果嚴重性等級為 WARNING,則只會記錄嚴重性等級為 WARNING 和 ERROR 的記錄。如果嚴重性等級為 INFO,系統會記錄所有嚴重性等級的記錄,但 DEBUG 除外。
如要進一步瞭解記錄嚴重程度層級,請參閱「LogSeverity」。
查看平台記錄
如要查看平台記錄,請按照下列步驟操作:
控制台
如要在 Google Cloud 控制台中查看平台記錄:
前往 Logs Explorer:
選取適當的 Google Cloud 專案。
在「Query」(查詢) 欄位中,輸入下列查詢指令:
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。
點選「執行查詢」。
如要進一步瞭解 Logs Explorer,請參閱「Logs Explorer 總覽」和「使用 Logs Explorer」。
gcloud
gcloud 指令列工具提供 Cloud Logging 的指令列介面。
如要查看專案的channel_activities記錄,請執行下列指令:
gcloud logging read "logName:projects/PROJECT_ID/logs/livestream.googleapis.com%2Fchannel_activities" --project=PROJECT_ID
其中 PROJECT_ID 是專案 ID。 Google Cloud
如要進一步瞭解如何搭配使用 gcloud 工具與 Cloud Logging,請參閱 gcloud logging。
使用平台記錄檔
本節說明如何使用及解讀 Live Stream API 的特定平台記錄。
eventStateChange
當頻道事件的狀態變更時,系統會產生 eventStateChange 記錄。當管道事件的新狀態為 FAILED 時,eventStateChange 記錄的嚴重程度為 ERROR。否則,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
當輸入串流收到 SCTE35 指令時,系統會產生 scte35CommandReceived 記錄。scte35CommandReceived 記錄的嚴重性等級為 INFO。
系統只會處理 durationFlag、breakDuration、spliceTime 和 outOfNetworkIndicator。如果缺少 spliceTime,系統會立即執行 SCTE35 指令。其他所有欄位都會視為無作業。
以下是 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
當頻道的串流狀態變更時,系統會產生 streamingStateChange 記錄。當管道的新狀態為 STREAMING_ERROR 時,streamingStateChange 記錄的嚴重程度層級為 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"
...
}
您可以在 Logs Explorer 的「Query」(查詢) 欄位中新增其他指令,縮小顯示的記錄範圍。
新增下列指令,顯示新狀態為 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 bucket 不存在,也可能發生這個錯誤。
如果 streamingError.message 顯示 This is due to an internal
error. If the error persists, please contact support team 訊息,請複製記錄檔內容,然後傳送給支援團隊進行疑難排解。
inputAccept
輸入串流成功連線至 Live Stream API 輸入端點時,系統會產生 inputAccept 記錄。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"
...
}
在 Logs Explorer 的「Query」(查詢) 欄位中加入下列指令,即可只顯示特定串流的 inputAccept 日誌:
jsonPayload.inputAccept.streamId="STREAM_ID"
其中 STREAM_ID 是 輸入端點 URI 中所含串流的專屬 ID。
inputError
如果輸入串流遭到 Live Stream API 拒絕,就會產生 inputError 記錄。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"
...
}
在 Logs Explorer 的「Query」(查詢) 欄位中加入下列指令,只顯示特定串流的 inputError 日誌:
jsonPayload.inputError.streamId="STREAM_ID"
其中 STREAM_ID 是 輸入端點 URI 中所含串流的專屬 ID。
inputDisconnect
輸入串流與 Live Stream API 中斷連線時,系統會產生 inputDisconnect 記錄。您可以使用 inputDisconnect 記錄檢查是否發生非預期的直播中斷情形。記錄的嚴重性等級為 inputDisconnectINFO。
以下是 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"
...
}