תצוגה מקדימה של זרמי קלט כמעט בזמן אמת

בדף הזה מוסבר איך לצפות בתצוגה מקדימה של זרמי הקלט עם השהיה נמוכה מאוד, כדי לזהות בעיות או אירועים פוטנציאליים כמעט בזמן אמת. כך תוכלו לבצע פעולות מתקנות, כמו השהיית הסטרימינג, הוספת מודעות או הצגת מסכים, כדי לשמור על חוויית צפייה באיכות גבוהה עבור הצופים.

התוכן של התצוגה המקדימה זמין בפורמט הבא:

  • פורמט: MPEG-TS
  • סרטון:
    • רזולוציה: 640x480
    • קודק: H.264
    • קצב פריימים: 25 פריימים לשנייה (FPS)
  • אודיו
    • קודק: AAC
    • תדירות הדגימה: ‎48 kHz
    • פרוטוקול: HTTPS

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

בדף הזה מניחים שהשלמתם את השלבים בקטע לפני שמתחילים של המדריך להתחלה מהירה לשידור חי ב-HLS.

יצירת נקודת קצה לקלט

כדי ליצור נקודת קצה לקלט, משתמשים בשיטה projects.locations.inputs.create.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_NUMBER: מספר הפרויקט שלכם. הוא מופיע בשדה מספר הפרויקט בדף הגדרות IAM. Google Cloud
  • LOCATION: המיקום שבו רוצים ליצור את נקודת הקצה של הקלט. צריך להשתמש באחד מהאזורים הנתמכים
    הצגת מיקומים
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • INPUT_ID: מזהה שמוגדר על ידי המשתמש לנקודת הקצה החדשה של הקלט שצריך ליצור (שאליה שולחים את זרם הקלט). הערך הזה צריך לכלול בין 1 ל-63 תווים, להתחיל ולהסתיים ב-[a-z0-9], ויכול לכלול מקפים (-) בין התווים. לדוגמה, my-input.

תוכן בקשת JSON:

{
  "type": "RTMP_PUSH"
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

הפקודה הזו יוצרת פעולה ממושכת (LRO) שאפשר להשתמש בה כדי לעקוב אחרי התקדמות הבקשה. מידע נוסף זמין במאמר בנושא ניהול פעולות ממושכות .

קבלת פרטים של נקודת קצה של קלט

כדי לקבל את הפרטים של נקודת הקצה של הקלט, משתמשים בשיטה projects.locations.inputs.get.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_NUMBER: מספר הפרויקט שלכם. הוא מופיע בשדה מספר הפרויקט בדף הגדרות IAM. Google Cloud
  • LOCATION: המיקום של נקודת הקצה של הקלט. צריך להשתמש באחד מהאזורים הנתמכים.
    הצגת מיקומים
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • INPUT_ID: המזהה שמוגדר על ידי המשתמש לנקודת הקצה של הקלט

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID",
  "createTime": CREATE_TIME,
  "updateTime": UPDATE_TIME,
  "type": "RTMP_PUSH",
  "uri":  "INPUT_STREAM_URI", # For example, "rtmp://1.2.3.4/live/b8ebdd94-c8d9-4d88-a16e-b963c43a953b",
  "tier": "HD"
}

מוצאים את השדה uri ומעתיקים את הערך שמוחזר INPUT_STREAM_URI כדי להשתמש בו בהמשך בקטע שליחת זרם הקלט.

יצירת ערוץ

כדי ליצור ערוץ, משתמשים ב-method‏ projects.locations.channels.create. בדוגמאות הבאות נוצר ערוץ שמפיק שידור חי בפורמט HLS. השידור החי מורכב מגרסה אחת ברזולוציה גבוהה (1280x720).

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_NUMBER: מספר הפרויקט שלכם. הוא מופיע בשדה מספר הפרויקט בדף הגדרות IAM. Google Cloud
  • LOCATION: המיקום שבו רוצים ליצור את הערוץ. צריך להשתמש באחד האזורים הנתמכים
    הצגת מיקומים
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: מזהה מוגדר על ידי המשתמש של הערוץ שרוצים ליצור. הערך הזה צריך להיות באורך של 1-63 תווים, להתחיל ולהסתיים ב-[a-z0-9], ויכול להכיל מקפים (-) בין התווים
  • INPUT_ID: המזהה שמוגדר על ידי המשתמש לנקודת הקצה של הקלט
  • BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם כדי לאחסן את קובץ המניפסט ואת קובצי הפלחים של השידור החי

תוכן בקשת JSON:

{
  "inputAttachments": [
    {
      "key": "my-input",
      "input": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID"
    }
  ],
  "output": {
    "uri": "gs://BUCKET_NAME"
  },
  "elementaryStreams": [
    {
      "key": "es_video",
      "videoStream": {
        "h264": {
          "profile": "high",
          "widthPixels": 1280,
          "heightPixels": 720,
          "bitrateBps": 3000000,
          "frameRate": 30
        }
      }
    },
    {
      "key": "es_audio",
      "audioStream": {
        "codec": "aac",
        "channelCount": 2,
        "bitrateBps": 160000
      }
    }
  ],
  "muxStreams": [
    {
      "key": "mux_video_ts",
      "container": "ts",
      "elementaryStreams": ["es_video", "es_audio"],
      "segmentSettings": { "segmentDuration": "2s" }
    }
  ],
  "manifests": [
    {
      "key": "manifest_hls",
      "fileName": "main.m3u8",
      "type": "HLS",
      "muxStreams": [
        "mux_video_ts"
      ],
      "maxSegmentCount": 5
    }
  ]
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

הפקודה הזו יוצרת פעולה ממושכת (LRO) שאפשר להשתמש בה כדי לעקוב אחרי התקדמות הבקשה. מידע נוסף זמין במאמר בנושא ניהול פעולות ממושכות .

הפעלת הערוץ

כדי להתחיל ערוץ, משתמשים ב-method‏ projects.locations.channels.start.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_NUMBER: מספר הפרויקט שלכם. הוא מופיע בשדה מספר הפרויקט בדף הגדרות IAM. Google Cloud
  • LOCATION: המיקום שבו הערוץ נמצא. צריך להשתמש באחד מהאזורים הנתמכים.
    הצגת מיקומים
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: מזהה מוגדר על ידי המשתמש של הערוץ

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
    "verb": "start",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

הפקודה הזו יוצרת פעולה ממושכת (LRO) שאפשר להשתמש בה כדי לעקוב אחרי התקדמות הבקשה. מידע נוסף זמין במאמר בנושא ניהול פעולות ממושכות .

התקנת מקודד

כדי להשתמש ב-API, צריך מקודד שיצור זרמי קלט שה-API יעבד.

כדאי להתקין את ffmpeg כי בדף הזה מוסבר איך להשתמש ב-ffmpeg כדי ליצור זרמי קלט. אפשר להתקין אותו ב-Cloud Shell באמצעות הפקודה הבאה.

sudo apt install ffmpeg

שליחת זרם הקלט

פותחים חלון טרמינל חדש. מריצים את הפקודה הבאה, באמצעות INPUT_STREAM_URI מהקטע קבלת פרטים של נקודת קצה של קלט. הפקודה הזו יוצרת זרם בדיקה.

ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \
  -acodec aac -vcodec h264 -f flv INPUT_STREAM_URI

קבלת כתובת ה-URL של נקודת הקצה וטוקן ה-Bearer

כדי לקבל את כתובת ה-URL של נקודת הקצה של תוכן התצוגה המקדימה ואת אסימון ה-bearer שנדרש לאימות, משתמשים ב-method‏ projects.locations.inputs.preview.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_NUMBER: מספר הפרויקט שלכם. הוא מופיע בשדה מספר הפרויקט בדף הגדרות IAM. Google Cloud
  • LOCATION: המיקום של נקודת הקצה של הקלט. צריך להשתמש באחד מהאזורים הנתמכים.
    הצגת מיקומים
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • INPUT_ID: המזהה שמוגדר על ידי המשתמש לנקודת הקצה של הקלט

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "uri":  ENDPOINT_URL, # For example, "preview.k3fhpvei3vvf.us-central1.livestream.goog/inputs/my-preview-input",
  "bearerToken": "BEARER_TOKEN"
}

תשתמשו בערכים מהשדות uri ו-bearerToken בקטע הבא.

הצגת התוכן בתצוגה המקדימה

יש לכם את האפשרויות העיקריות הבאות להצגת תוכן התצוגה המקדימה:

  • mpegts.js, נגן סטרימינג ב-HTML5
  • FFplay, נגן מדיה בשורת הפקודה

mpegts.js

mpegts.js היא ספריה שזמינה ב-GitHub להפעלת סטרימינג של MPEG-TS בדפדפן אינטרנט.

מעתיקים את הערכים מהשדות bearerToken ו-uri שקיבלתם בשלב הקודם אל קוד ה-HTML הבא. יוצרים קובץ HTML מהקוד הבא ופותחים אותו בדפדפן.

<html>
  <head>
  <script src="https://xqq.im/mpegts.js/dist/mpegts.js"></script>
  <video id="video" autoplay controls muted></video>
  <script>
    function main() {
      if (!mpegts.getFeatureList().mseLivePlayback) {
        console.log("MSE live playback is not supported by the browswer!")
        return;
      }
      var videoElement = document.getElementById("video");
      player = mpegts.createPlayer(
        {
          type: "mse",
          isLive: true,
          <!-- Placeholder: Replace ENDPOINT_URL with the actual endpoint URL -->
          url: "ENDPOINT_URL",
        },
        {
          headers: {
            <!-- Placeholder: Replace BEARER_TOKEN with the actual bearer token -->
            Authorization: "BEARER_TOKEN",
          },
        }
      );
      player.attachMediaElement(videoElement);
      player.load();
      player.play();
    }
    main();
  </script>
  </body>
</html>

אמור להיות מוצג דפוס בדיקה עם זמן אחזור קצר יותר מזה של השידור החי המשויך. בנגן הזה אפשר להפעיל רק את טראק האודיו הראשון בשידור.

סרטון עם דפוס בדיקה

FFplay

‫FFplay הוא נגן מדיה רב-תכליתי של שורת פקודה שמשתמש בספריות FFmpeg. אפשר למצוא הורדות של FFplay בדף הורדת FFmpeg.

פותחים חלון טרמינל חדש. מעתיקים את הערכים מהשדות bearerToken ו-uri שקיבלתם בשלב הקודם לפקודה הבאה ומריצים אותה.

ffplay -headers "Authorization: Bearer BEARER_TOKEN" \
  -fflags nobuffer -flags low_delay -probesize 32 -analyzeduration 0 \
  ENDPOINT_URL

אמור להיות מוצג דפוס בדיקה עם זמן אחזור קצר יותר מזה של השידור החי המשויך. ‫ffplay תומך במעבר בין טראקים של אודיו בלחיצה על המקש A.

סרטון עם דפוס בדיקה

הסרת המשאבים

כדי לא לצבור חיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה:

הפסקת הערוץ

כדי להפסיק את הערוץ, משתמשים בשיטה projects.locations.channels.stop. כדי למחוק ערוץ, צריך קודם להפסיק אותו.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_NUMBER: מספר הפרויקט שלכם. הוא מופיע בשדה מספר הפרויקט בדף הגדרות IAM. Google Cloud
  • LOCATION: המיקום שבו הערוץ נמצא. צריך להשתמש באחד מהאזורים הנתמכים.
    הצגת מיקומים
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: מזהה מוגדר על ידי המשתמש של הערוץ

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
    "verb": "stop",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

הפקודה הזו יוצרת פעולה ממושכת (LRO) שאפשר להשתמש בה כדי לעקוב אחרי התקדמות הבקשה. מידע נוסף זמין במאמר בנושא ניהול פעולות ממושכות .

הפסקת זרם הקלט

אם השתמשתם ב-ffmpeg כדי לשלוח את זרם הקלט, החיבור ינותק אוטומטית אחרי שתפסיקו את הערוץ.

מחיקת הערוץ

משתמשים ב-method ‏projects.locations.channels.delete כדי למחוק את הערוץ. כדי למחוק את נקודת הקצה של הקלט שמשמשת את הערוץ, צריך קודם למחוק את הערוץ.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_NUMBER: מספר הפרויקט שלכם. הוא מופיע בשדה מספר הפרויקט בדף הגדרות IAM. Google Cloud
  • LOCATION: המיקום שבו הערוץ נמצא. צריך להשתמש באחד מהאזורים הנתמכים.
    הצגת מיקומים
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • CHANNEL_ID: מזהה מוגדר על ידי המשתמש של הערוץ

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
    "verb": "delete",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

הפקודה הזו יוצרת פעולה ממושכת (LRO) שאפשר להשתמש בה כדי לעקוב אחרי התקדמות הבקשה. מידע נוסף זמין במאמר בנושא ניהול פעולות ממושכות .

מחיקת נקודת הקצה של הקלט

כדי למחוק את נקודת הקצה של הקלט, משתמשים בשיטה projects.locations.inputs.delete.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_NUMBER: מספר הפרויקט שלכם. הוא מופיע בשדה מספר הפרויקט בדף הגדרות IAM. Google Cloud
  • LOCATION: המיקום של נקודת הקצה של הקלט. צריך להשתמש באחד מהאזורים הנתמכים.
    הצגת מיקומים
    • us-central1
    • us-east1
    • us-east4
    • us-west1
    • us-west2
    • northamerica-northeast1
    • southamerica-east1
    • asia-east1
    • asia-east2
    • asia-south1
    • asia-northeast1
    • asia-southeast1
    • australia-southeast1
    • europe-north1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
  • INPUT_ID: המזהה שמוגדר על ידי המשתמש לנקודת הקצה של הקלט

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID",
    "verb": "delete",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

הפקודה הזו יוצרת פעולה ממושכת (LRO) שאפשר להשתמש בה כדי לעקוב אחרי התקדמות הבקשה. מידע נוסף זמין במאמר בנושא ניהול פעולות ממושכות .

מחיקת הקטגוריה של Cloud Storage

  1. פותחים את הדף Cloud Storage Browser במסוף Google Cloud .

    כניסה לדף Cloud Storage Browser

  2. מסמנים את התיבה ליד הקטגוריה שיצרתם.

  3. לוחצים על Delete.

  4. בתיבת הדו-שיח שמופיעה, לוחצים על מחיקה כדי למחוק את הקטגוריה ואת התוכן שלה.