הפצת שידורים חיים לנקודות קצה מרוחקות

בדף הזה מוסבר איך להפיץ את הפלט של השידור החי לנקודות קצה מרוחקות באמצעות פרוטוקול Secure Reliable Transport ‏ (SRT) או פרוטוקול Real-Time Messaging ‏ (RTMP). הפרוטוקולים SRT ו-RTMP משמשים במצב דחיפה כדי לשלוח את הסטרימינג לנקודות הקצה. פורמטי הקונטיינר הנתמכים הם MPEG-TS עבור SRT ו-FLV עבור RTMP.

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

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

בהתאם לפרוטוקול ההפצה שבחרתם, יוצרים נקודת קצה של SRT או RTMP אצל הספק שדרכו רוצים לקבל את הפלט במצב דחיפה. פורמט מזהה ה-URI של נקודת הקצה משתנה בהתאם לפרוטוקול:

  • ב-SRT: srt://SRT_SERVER_IP:SRT_SERVER_PORT?streamid=SRT_SERVER_STREAM_ID
  • ל-RTMP: rtmp://RTMP_SERVER_IP:RTMP_SERVER_PORT/RTMP_APP_NAME/RTMP_STREAM_KEY או רק rtmp://RTMP_SERVER_IP:RTMP_SERVER_PORT/RTMP_APP_NAME

‫SRT_SERVER_IP ו-RTMP_SERVER_IP יכולים להיות כתובת IP או שם דומיין.

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

כדי ליצור את נקודת הקצה של הקלט, משתמשים בשיטה 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 שדומה לזו:

{
  "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
}

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

בדיקת התוצאה

משתמשים בשיטה projects.locations.operations.get כדי לבדוק אם נוצרה נקודת הקצה של הקלט. אם התשובה מכילה "done: false", חוזרים על הפקודה עד שהתשובה מכילה "done: true". יצירת נקודת הקצה הראשונה של הקלט באזור עשויה להימשך עד 10 דקות.

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

  • ‫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
  • ‫OPERATION_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,
    "endTime": END_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.Input",
    "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.

כמה דברים שכדאי לשים לב אליהם בהגדרת הערוץ:

  • המערך distributionStreams מכיל את הגדרות הריבוב של הזרמים להפצות.
  • כל אובייקט DistributionStream חייב לכלול את השדות key, container ו-elementaryStreams.

    {
      "distributionStreams": [
        {
          "key": "ds1",
          "container": "ts", // to be used with an SRT distribution
          "elementaryStreams": [
            "es_video_720",
            "es_audio"
          ]
        },
        {
          "key": "ds2",
          "container": "flv", // to be used with an RTMP distribution
          "elementaryStreams": [
            "es_video_640",
            "es_audio"
          ]
        }
      ]
    }
    
  • המערך distributions מפרט את הגדרות ההפצה, כולל נקודות הקצה המרוחקות.

  • מגדירים את השדה distributionStream באובייקט Distribution לערך key של אובייקט DistributionStream.

  • כדי להגדיר הפצה של SRT, מגדירים את uri באובייקט SrtPushOutputEndpoint לנקודת קצה של SRT שיצרתם. להפצה ב-RTMP, מגדירים את uri באובייקט RtmpPushOutputEndpoint לנקודת קצה של RTMP שיצרתם.

    {
      "distributions": [
        {
          "key": "pd1",
          "distributionStream": "ds1", // defined in a distributionStreams[] object with an MPEG-TS container
          "srtPush": {
            "uri": "srt://SRT_SERVER_IP:SRT_SERVER_PORT?streamid=SRT_SERVER_STREAM_ID"
          }
        },
        {
          "key": "pd2",
          "distributionStream": "ds2", // defined in a distributionStreams[] object with an FLV container
          "rtmpPush": {
            "uri": "rtmp://RTMP_SERVER_IP:RTMP_SERVER_PORT/RTMP_APP_NAME/",
            "streamKey": "RTMP_STREAM_KEY"
          }
        }
      ]
    }
    
  • כדי להפיץ כתוביות שנוצרו על ידי AI וכתוביות מתורגמות, אפשר לעיין במדריך בנושא הגדרת כתוביות ותרגומים אוטומטיים.

בדוגמאות הבאות נעשה שימוש רק באובייקט DistributionStream אחד ובאובייקט Distribution אחד.

REST

SRT

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

  • ‫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 שיצרתם כדי לאחסן את קובץ המניפסט ואת קובצי הפלחים של השידור החי
  • ‫SRT_SERVER_IP: כתובת ה-IP או שם הדומיין של נקודת הקצה המרוחקת
  • SRT_SERVER_PORT: מספר היציאה של נקודת הקצה המרוחקת
  • ‫SRT_SERVER_STREAM_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": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

RTMP

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

  • ‫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 שיצרתם כדי לאחסן את קובץ המניפסט ואת קובצי הפלחים של השידור החי
  • ‫RTMP_SERVER_IP: כתובת ה-IP או שם הדומיין של נקודת הקצה המרוחקת
  • RTMP_SERVER_PORT: מספר היציאה של נקודת הקצה המרוחקת
  • ‫RTMP_APP_NAME: קידומת הנתיב של שם הסטרים
  • ‫RTMP_STREAM_KEY: מפתח השידור של נקודת הקצה המרוחקת

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

אתם אמורים לקבל תגובת 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
}

אפשר לבדוק את התוצאה של הפעולה באמצעות מזהה הפעולה החדש.

קבלת הערוץ

אחרי שיוצרים את הערוץ, משתמשים בשיטה projects.locations.channels.get כדי לשלוח שאילתה לגבי מצב הערוץ.

REST

SRT

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

  • ‫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/channels/CHANNEL_ID",
  "createTime": CREATE_TIME,
  "updateTime": UPDATE_TIME,
  "inputAttachments": [
    {
      "key": "INPUT_ID",
      "input": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID"
    }
  ],
  "activeInput": "INPUT_ID",
  "output": {
    "uri": "gs://BUCKET_NAME"
  },
  "elementaryStreams": [
    {
      "videoStream": {
        "h264": {
          "widthPixels": 1280,
          "heightPixels": 720,
          "frameRate": 30,
          "bitrateBps": 3000000,
          "gopDuration": "2s",
          "vbvSizeBits": 3000000,
          "vbvFullnessBits": 2700000,
          "entropyCoder": "cabac",
          "profile": "high"
        }
      },
      "key": "es_video"
    },
    {
      "audioStream": {
        "codec": "aac",
        "bitrateBps": 160000,
        "channelCount": 2,
        "sampleRateHertz": 48000
      },
      "key": "es_audio"
    }
  ],
  "muxStreams": [
    {
      "key": "mux_video_ts",
      "container": "ts",
      "elementaryStreams": [
        "es_video",
        "es_audio"
      ],
      "segmentSettings": {
        "segmentDuration": "2s"
      }
    }
  ],
  "manifests": [
    {
      "fileName": "main.m3u8",
      "type": "HLS",
      "muxStreams": [
        "mux_video_ts"
      ],
      "maxSegmentCount": 5,
      "segmentKeepDuration": "60s",
      "key": "manifest_hls"
    }
  ],
  "streamingState": "STOPPED",
  "distributionStreams": [
    {
      "key": "ds1",
      "container": "ts",
      "elementaryStreams": [
        "es_video",
        "es_audio"
      ]
    }
  ],
  "distributions": [
    {
      "key": "pd1",
      "distributionStream": "ds1",
      "state": "NOT_READY",
      "srtPush": {
        "uri": "srt://SRT_SERVER_IP:SRT_SERVER_PORT?streamid=SRT_SERVER_STREAM_ID"
      }
    }
  ]
}

RTMP

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

  • ‫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/channels/CHANNEL_ID",
  "createTime": CREATE_TIME,
  "updateTime": UPDATE_TIME,
  "inputAttachments": [
    {
      "key": "INPUT_ID",
      "input": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID"
    }
  ],
  "activeInput": "INPUT_ID",
  "output": {
    "uri": "gs://BUCKET_NAME"
  },
  "elementaryStreams": [
    {
      "videoStream": {
        "h264": {
          "widthPixels": 1280,
          "heightPixels": 720,
          "frameRate": 30,
          "bitrateBps": 3000000,
          "gopDuration": "2s",
          "vbvSizeBits": 3000000,
          "vbvFullnessBits": 2700000,
          "entropyCoder": "cabac",
          "profile": "high"
        }
      },
      "key": "es_video"
    },
    {
      "audioStream": {
        "codec": "aac",
        "bitrateBps": 160000,
        "channelCount": 2,
        "sampleRateHertz": 48000
      },
      "key": "es_audio"
    }
  ],
  "muxStreams": [
    {
      "key": "mux_video_ts",
      "container": "ts",
      "elementaryStreams": [
        "es_video",
        "es_audio"
      ],
      "segmentSettings": {
        "segmentDuration": "2s"
      }
    }
  ],
  "manifests": [
    {
      "fileName": "main.m3u8",
      "type": "HLS",
      "muxStreams": [
        "mux_video_ts"
      ],
      "maxSegmentCount": 5,
      "segmentKeepDuration": "60s",
      "key": "manifest_hls"
    }
  ],
  "streamingState": "STOPPED",
  "distributionStreams": [
    {
      "key": "ds1",
      "container": "flv",
      "elementaryStreams": [
        "es_video",
        "es_audio"
      ]
    }
  ],
  "distributions": [
    {
      "key": "pd1",
      "distributionStream": "ds1",
      "state": "NOT_READY",
      "rtmpPush": {
        "uri": "rtmp://RTMP_SERVER_IP:RTMP_SERVER_PORT/RTMP_APP_NAME",
        "streamKey": "RTMP_STREAM_KEY"
      }
    }
  ]
}

התגובה המלאה מכילה את השדות הבאים:

{
  ...
  "streamingState": "STOPPED",
  "distributions": [
    {
      ...
      "state": "NOT_READY"
      ...
    }
  ]
  ...
}

התגובה הזו מציינת את סטטוס הסטרימינג של הערוץ ואת הפצות הערוץ.

אם ההפצה נמצאת בNOT_READY מצב, אי אפשר להתחיל אותה. צריך להמתין עד שהסטטוס ישתנה ל-READY כדי שתוכלו להתחיל להפיץ את השידור.

יצירת ערוץ ההפצה הראשון עשויה להימשך עד 10 דקות. מצב ההפצה לא תלוי במצב הערוץ. אפשר להפעיל את הערוץ ולחכות שההפצה תהפוך לREADY ואז להפעיל את ההפצה.

עכשיו אפשר להתחיל את הערוץ.

הפעלת הערוץ

משתמשים ב-projects.locations.channels.start method כדי להתחיל את הערוץ. צריך להפעיל ערוץ כדי שיוכל לקבל זרמי קלט או ליצור זרם פלט.

הפעלת הערוץ הראשון באזור מסוים אורכת כ-10 דקות.

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

  • ‫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
}

כדי לבדוק אם הערוץ הופעל, מקבלים את פרטי הערוץ כמו שמתואר למעלה. התשובה צריכה לכלול את הפרטים הבאים:

{
  ...
  "streamingState": "AWAITING_INPUT"
  ...
}

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

פותחים חלון טרמינל חדש. מריצים את הפקודה הבאה, באמצעות 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

הערוץ משדר עכשיו, אבל ההפצות עדיין מושבתות.

הפעלת ההפצה

כדי להתחיל את ההפצה, היא צריכה להיות במצב READY. כדי להתחיל להפיץ את הפלט של השידור החי לכל נקודות הקצה המרוחקות, משתמשים בשיטה projects.locations.channels.startdistribution.

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

  • ‫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": "startdistribution",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

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

(אופציונלי) הפעלת קבוצה של הפצות

אתם יכולים להתחיל סדרה של הפצות במקום את כולן בבת אחת. כדי להתחיל, מוסיפים את המפתחות של ההפצות שרוצים להשתמש בהן לרשימת המערכים distributionKeys.

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

  • ‫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: מזהה מוגדר על ידי המשתמש של הערוץ
  • ‫DISTRIBUTION_KEYS: רשימה מופרדת בפסיקים של מפתחות מחרוזת (לדוגמה, "pd1")

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

אתם אמורים לקבל תגובת 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": "startdistribution",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

אפשר לבדוק את התוצאה של הפעולה באמצעות מזהה הפעולה החדש.

אימות שההפצות פועלות

כדי לוודא שההפצות התחילו, מקבלים את פרטי הערוץ כמו שעשיתם קודם. התשובה צריכה לכלול את הפרטים הבאים:

{
  "distributions": [
    {
      ...
      "state": "DISTRIBUTING"
      ...
    },
    ...
  ]
}

בשרת המרוחק SRT או RTMP, מוודאים שנקודת הקצה שיצרתם מקבלת נתונים.

הפסקת ההפצות

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

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

  • ‫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": "stopdistribution",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

אפשר לבדוק את התוצאה של הפעולה באמצעות מזהה הפעולה החדש.

(אופציונלי) הפסקת הפצה של קבוצת הפצות

אתם יכולים להפסיק קבוצה של הפצות ולא את כולן בבת אחת. מוסיפים את המפתחות של ההפצות שרוצים להפסיק לרשימת המערכים distributionKeys.

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

  • ‫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: מזהה מוגדר על ידי המשתמש של הערוץ
  • ‫DISTRIBUTION_KEYS: רשימה מופרדת בפסיקים של מפתחות מחרוזת (לדוגמה, "pd1")

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

אתם אמורים לקבל תגובת 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": "stopdistribution",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

אפשר לבדוק את התוצאה של הפעולה באמצעות מזהה הפעולה החדש.

תמיכה בהצפנה של SRT

אם משתמשים בפרוטוקול SRT כדי להפיץ את הפלט של השידור החי לנקודת הקצה המרוחקת, Live Stream API מגן על התוכן של השידור החי באמצעות הצפנת AES.

יצירת ביטוי הסיסמה והכנת שרת ה-SRT המרוחק

לפני שמתחילים, יוצרים סיסמת SRT שעומדת בדרישות של שרת SRT מרוחק. בדרך כלל, ביטוי הסיסמה הוא מחרוזת של 10-79 תווים.

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

הוספת ביטוי הגישה ל-Secret Manager

‫Live Stream API לא מקבל או מנהל את ביטוי הגישה ישירות. צריך לשתף את ביטוי הסיסמה עם Live Stream API דרך Google Secret Manager.

צריך להשלים את כל השלבים האלה לפני שמגדירים את הערוץ:

  1. יוצרים סוד באמצעות Secret Manager.
  2. מגדירים הרשאות לניהול זהויות והרשאות גישה (IAM) בסוד, כדי ש-Live Stream API יוכל לגשת לתוכן הסוד. כדי לעשות את זה, צריך לתת את התפקיד secretmanager.secretAccessor לחשבון השירות service-PROJECT_NUMBER@gcp-sa-livestream.iam.gserviceaccount.com (זה דומה לאופן שבו לחשבון השירות יש גישה לקטגוריות של Cloud Storage).
  3. מוצאים את שם המשאב של גרסת הסוד שיצרתם (לדוגמה, projects/PROJECT_NUMBER/secrets/SECRET_ID/versions/VERSION_ID). השם הזה נדרש כדי להגדיר את הערוץ.

הגדרת הערוץ

גרסת הסוד של ביטוי הסיסמה מצוינת בתוך התג SrtPushOutputEndpoint:

{
  "distributions": [
    {
      "key": "pd1",
      "distributionStream": "ds1", // defined in a distributionStreams[] object with an MPEG-TS container
      "srtPush": {
        "uri": "srt://{SRT_SERVER_IP}:{SRT_SERVER_PORT}?streamid={SRT_SERVER_STREAM_ID}",
        "passphrase_secret_version": "projects/PROJECT_NUMBER/secrets/key1/versions/1"
      }
    }
  ]
}

הסרת המשאבים

כדי לא לצבור חיובים בחשבון 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
}

אפשר לבדוק את התוצאה של הפעולה באמצעות מזהה הפעולה החדש.

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

אם השתמשתם ב-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
}

אפשר לבדוק את התוצאה של הפעולה באמצעות מזהה הפעולה החדש.

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

כדי למחוק את נקודת הקצה של הקלט, משתמשים בשיטה 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
}

אפשר לבדוק את התוצאה של הפעולה באמצעות מזהה הפעולה החדש.

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

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

    כניסה לדף Cloud Storage Browser

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

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

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