שימוש ביומני פלטפורמה

בדף הזה מוסבר איך להשתמש ביומני פלטפורמה שנוצרו על ידי Live Stream API כחלק מ-Cloud Logging. ‫Live Stream API משתמש בשם שירות Logging API‏ livestream.googleapis.com כדי לרשום ביומן פעילות שקשורה לערוץ.

לפני שמתחילים

הפעלת רישום ביומן של פלטפורמה

כברירת מחדל, היומנים של פלטפורמת livestream.googleapis.com/channel_activities עבור Live Stream API מושבתים. כדי להפעיל את היומנים, צריך לציין רמת חומרה כשיוצרים או מעדכנים את משאב הערוץ.

כדי להפעיל את היומנים, מוסיפים את השדה הבא לגוף הבקשה ב-JSON של השיטה projects.locations.channels.create או projects.locations.channels.patch:

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

כאשר SEVERITY_LEVEL הוא אחד מהבאים:

  • OFF
  • DEBUG
  • INFO
  • WARNING
  • ERROR

אחרי שבוחרים רמת חומרה של יומן לערוץ, רק יומני הפלטפורמה עם רמת חומרה שגבוהה מרמת החומרה שנבחרה או שווה לה נרשמים ביומן. לדוגמה, אם רמת החומרה היא WARNING, רק יומנים עם רמת חומרה WARNING ו-ERROR נרשמים ביומן. אם רמת החומרה היא INFO, מתבצע רישום ביומן של כל רמות החומרה מלבד DEBUG.

מידע נוסף על רמות חומרה של יומנים זמין במאמר בנושא LogSeverity.

צפייה ביומני הפלטפורמה

כדי לראות את יומני הפלטפורמה, פועלים לפי ההוראות הבאות:

המסוף

כדי לראות את יומני הפלטפורמה במסוף Google Cloud :

  1. מנווטים אל Logs Explorer:

    כניסה לדף Logs Explorer

  2. בוחרים את הפרויקט המתאים Google Cloud .

  3. בשדה Query, מזינים את פקודת השאילתה הבאה:

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

    where:

    • CHANNEL_ID הוא המזהה של הערוץ שרוצים לבצע בו ניפוי באגים או מעקב. לדוגמה, my-channel.

    • LOCATION הוא המיקום של הערוץ שרוצים לנפות בו באגים או לעקוב אחריו. לדוגמה, us-central1.

    • PROJECT_ID הוא המזהה של הפרויקט שמכיל את הערוץ שרוצים לנפות בו באגים או לעקוב אחריו. לדוגמה, my-project.

  4. לוחצים על Run query.

מידע נוסף על Logs Explorer זמין במאמרים סקירה כללית על Logs Explorer ושימוש ב-Logs Explorer.

gcloud

כלי שורת הפקודה של Google Cloud מספק ממשק שורת פקודה ל-Cloud Logging.

כדי לראות את יומני channel_activities של הפרויקט, מריצים את הפקודה הבאה:

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

כאשר PROJECT_ID הוא המזהה של הפרויקט Google Cloud .

למידע נוסף על השימוש בכלי 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.

רק 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 נוצרים כשמצב השידור של ערוץ משתנה. רמת החומרה של יומן 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"
  ...
}

כדי לצמצם את היומנים שמוצגים, אפשר להוסיף פקודות נוספות בשדה שאילתה ב-Logs Explorer.

מוסיפים את הפקודה הבאה כדי להציג את כל היומנים של streamingStateChange שבהם המצב החדש הוא STREAMING:

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.

השדה inputStreamProperty ביומן inputAccept כולל את הפרטים הבאים על זרמי המשנה של הווידאו והאודיו בזרם הקלט:

וידאו בסטרימינג
  • אינדקס
  • קודק
  • קצב פריימים
  • רזולוציה
שידורי אודיו
  • אינדקס
  • מספר הערוצים
  • פריסת הערוץ
  • פרטי הקודק

אפשר להשתמש ביומני 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 לסטרימינג ספציפי, מוסיפים את הפקודה הבאה בשדה Query ב-Logs Explorer:

jsonPayload.inputAccept.streamId="STREAM_ID"

כאשר STREAM_ID הוא המזהה הייחודי של מקור נתונים שנכלל בכתובת ה-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"
  ...
}

כדי להציג רק יומני inputError של סטרימינג ספציפי, מוסיפים את הפקודה הבאה בשדה Query של Logs Explorer:

jsonPayload.inputError.streamId="STREAM_ID"

כאשר STREAM_ID הוא המזהה הייחודי של מקור נתונים שנכלל בכתובת ה-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"
  ...
}