管理即時會議

每次開始播放直播時,您都可以使用 Video Stitcher API 建立即時工作階段,在廣告時段動態拼接廣告。回應包含播放網址和直播工作階段的設定。

本頁面說明如何建立及管理透過 Google Ad Manager 啟用的直播工作階段。如要進一步瞭解這類直播工作階段,請參閱「管理透過 Google Ad Manager 啟用的直播工作階段」。

事前準備

建立直播工作階段

如要建立直播工作階段,請使用 projects.locations.liveSessions.create 方法。

建立直播工作階段時,下列欄位為選填:

REST

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_NUMBER:位於「IAM 設定」頁面「專案編號」欄位的 Google Cloud 專案編號
  • LOCATION:建立工作階段的位置;請使用其中一個支援的區域
    顯示地區
    • us-central1
    • us-east1
    • us-west1
    • asia-east1
    • asia-south1
    • asia-southeast1
    • europe-west1
    • southamerica-east1
  • LIVE_CONFIG_ID:使用者定義的即時設定 ID

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

 {   "name": "projects/PROJECT_NUMBER/locations/LOCATION/liveSessions/SESSION_ID",   "playUri": "PLAY_URI",   "liveConfig": "projects/PROJECT_NUMBER/locations/LOCATION/liveConfigs/LIVE_CONFIG_ID", } 

C#

在試用這個範例之前,請先按照C#使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API C# API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

 using Google.Cloud.Video.Stitcher.V1;  public class CreateLiveSessionSample {     public LiveSession CreateLiveSession(         string projectId, string location, string liveConfigId)     {         // Create the client.         VideoStitcherServiceClient client = VideoStitcherServiceClient.Create();          CreateLiveSessionRequest request = new CreateLiveSessionRequest         {             Parent = $"projects/{projectId}/locations/{location}",             LiveSession = new LiveSession             {                 LiveConfig = LiveConfigName.FormatProjectLocationLiveConfig(projectId, location, liveConfigId)             }         };          // Call the API.         LiveSession session = client.CreateLiveSession(request);          // Return the result.         return session;     } } 

Go

在試用這個範例之前,請先按照Go使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Go API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

import ( 	"context" 	"fmt" 	"io"  	stitcher "cloud.google.com/go/video/stitcher/apiv1" 	"cloud.google.com/go/video/stitcher/apiv1/stitcherpb" )  // createLiveSession creates a livestream session in which to insert ads. // Live sessions are ephemeral resources that expire after a few minutes. func createLiveSession(w io.Writer, projectID, liveConfigID string) error { 	// projectID := "my-project-id" 	// liveConfigID := "my-live-config" 	location := "us-central1" 	ctx := context.Background() 	client, err := stitcher.NewVideoStitcherClient(ctx) 	if err != nil { 		return fmt.Errorf("stitcher.NewVideoStitcherClient: %w", err) 	} 	defer client.Close()  	req := &stitcherpb.CreateLiveSessionRequest{ 		Parent: fmt.Sprintf("projects/%s/locations/%s", projectID, location), 		LiveSession: &stitcherpb.LiveSession{ 			LiveConfig: fmt.Sprintf("projects/%s/locations/%s/liveConfigs/%s", projectID, location, liveConfigID), 		}, 	} 	// Creates the live session. 	response, err := client.CreateLiveSession(ctx, req) 	if err != nil { 		return fmt.Errorf("client.CreateLiveSession: %w", err) 	}  	fmt.Fprintf(w, "Live session: %v\n", response.GetName()) 	fmt.Fprintf(w, "Play URI: %v", response.GetPlayUri()) 	return nil } 

Java

在試用這個範例之前,請先按照Java使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Java API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

 import com.google.cloud.video.stitcher.v1.CreateLiveSessionRequest; import com.google.cloud.video.stitcher.v1.LiveConfigName; import com.google.cloud.video.stitcher.v1.LiveSession; import com.google.cloud.video.stitcher.v1.LocationName; import com.google.cloud.video.stitcher.v1.VideoStitcherServiceClient; import java.io.IOException;  public class CreateLiveSession {    public static void main(String[] args) throws Exception {     // TODO(developer): Replace these variables before running the sample.     String projectId = "my-project-id";     String location = "us-central1";     String liveConfigId = "my-live-config-id";      createLiveSession(projectId, location, liveConfigId);   }    // Creates a live session given the parameters in the supplied live config.   // For more information, see   // https://cloud.google.com/video-stitcher/docs/how-to/managing-live-sessions.   public static LiveSession createLiveSession(       String projectId, String location, String liveConfigId) throws IOException {     // Initialize client that will be used to send requests. This client only needs to be created     // once, and can be reused for multiple requests.     try (VideoStitcherServiceClient videoStitcherServiceClient =         VideoStitcherServiceClient.create()) {       CreateLiveSessionRequest createLiveSessionRequest =           CreateLiveSessionRequest.newBuilder()               .setParent(LocationName.of(projectId, location).toString())               .setLiveSession(                   LiveSession.newBuilder()                       .setLiveConfig(LiveConfigName.format(projectId, location, liveConfigId)))               .build();        LiveSession response = videoStitcherServiceClient.createLiveSession(createLiveSessionRequest);       System.out.println("Created live session: " + response.getName());       System.out.println("Play URI: " + response.getPlayUri());       return response;     }   } }

Node.js

在試用這個範例之前,請先按照Node.js使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Node.js API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

/**  * TODO(developer): Uncomment these variables before running the sample.  */ // projectId = 'my-project-id'; // location = 'us-central1'; // liveConfigId = 'my-live-config-id';  // Imports the Video Stitcher library const {VideoStitcherServiceClient} =   require('@google-cloud/video-stitcher').v1; // Instantiates a client const stitcherClient = new VideoStitcherServiceClient();  async function createLiveSession() {   // Construct request   const request = {     parent: stitcherClient.locationPath(projectId, location),     liveSession: {       liveConfig: stitcherClient.liveConfigPath(         projectId,         location,         liveConfigId       ),     },   };    const [session] = await stitcherClient.createLiveSession(request);   console.log(`Live session: ${session.name}`);   console.log(`Play URI: ${session.playUri}`); }  createLiveSession().catch(err => {   console.error(err.message);   process.exitCode = 1; });

PHP

在試用這個範例之前,請先按照PHP使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API PHP API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

use Google\Cloud\Video\Stitcher\V1\Client\VideoStitcherServiceClient; use Google\Cloud\Video\Stitcher\V1\CreateLiveSessionRequest; use Google\Cloud\Video\Stitcher\V1\LiveSession;  /**  * Creates a live session. Live sessions are ephemeral resources that expire  * after a few minutes.  *  * @param string $callingProjectId     The project ID to run the API call under  * @param string $location             The location of the session  * @param string $liveConfigId         The live config ID to use to create the  *                                     live session  */ function create_live_session(     string $callingProjectId,     string $location,     string $liveConfigId ): void {     // Instantiate a client.     $stitcherClient = new VideoStitcherServiceClient();      $parent = $stitcherClient->locationName($callingProjectId, $location);     $liveConfig = $stitcherClient->liveConfigName($callingProjectId, $location, $liveConfigId);     $liveSession = new LiveSession();     $liveSession->setLiveConfig($liveConfig);      // Run live session creation request     $request = (new CreateLiveSessionRequest())         ->setParent($parent)         ->setLiveSession($liveSession);     $response = $stitcherClient->createLiveSession($request);      // Print results     printf('Live session: %s' . PHP_EOL, $response->getName()); }

Python

在試用這個範例之前,請先按照Python使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Python API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

 import argparse  from google.cloud.video import stitcher_v1 from google.cloud.video.stitcher_v1.services.video_stitcher_service import (     VideoStitcherServiceClient, )   def create_live_session(     project_id: str, location: str, live_config_id: str ) -> stitcher_v1.types.LiveSession:     """Creates a live session. Live sessions are ephemeral resources that expire     after a few minutes.     Args:         project_id: The GCP project ID.         location: The location in which to create the session.         live_config_id: The user-defined live config ID.      Returns:         The live session resource.     """      client = VideoStitcherServiceClient()      parent = f"projects/{project_id}/locations/{location}"     live_config = (         f"projects/{project_id}/locations/{location}/liveConfigs/{live_config_id}"     )      live_session = stitcher_v1.types.LiveSession(live_config=live_config)      response = client.create_live_session(parent=parent, live_session=live_session)     print(f"Live session: {response.name}")     return response  

Ruby

在試用這個範例之前,請先按照Ruby使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Ruby API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

require "google/cloud/video/stitcher"  ## # Create a live stream session. Live sessions are ephemeral resources # that expire after a few minutes. # # @param project_id [String] Your Google Cloud project (e.g. `my-project`) # @param location [String] The location (e.g. `us-central1`) # @param live_config_id [String] Your live config name (e.g. `my-live-config`) # def create_live_session project_id:, location:, live_config_id:   # Create a Video Stitcher client.   client = Google::Cloud::Video::Stitcher.video_stitcher_service    # Build the resource name of the parent.   parent = client.location_path project: project_id, location: location    # Build the resource name of the live config.   live_config_name = client.live_config_path project: project_id,                                              location: location,                                              live_config: live_config_id    # Set the session fields.   new_live_session = {     live_config: live_config_name   }    response = client.create_live_session parent: parent,                                         live_session: new_live_session    # Print the live session name.   puts "Live session: #{response.name}" end

回應是即時工作階段物件playUri 是用戶端裝置用來播放這個直播工作階段的廣告縫合串流的網址。

Video Stitcher API 會為每個要求產生專屬工作階段 ID。如果過去 5 分鐘內未要求 playUri,工作階段就會過期。

廣告必須先經過編碼,才能縫合到直播工作階段。為廣告縫合影片建立工作階段時,Video Stitcher API 會判斷廣告是否已從先前的工作階段編碼。API 只會尋找與 Google Cloud 專案相關聯的會期所建立的編碼廣告。如要進一步瞭解這項程序,請參閱總覽

如果您要代表顧客裝置產生工作階段,可以使用 HTTP 標頭設定下列參數:

參數 HTTP 標頭
CLIENT_IP x-forwarded-for
REFERRER_URL referer
USER_AGENT user-agent

您可以在上述 curl 要求中加入下列標頭:

-H "x-forwarded-for: CLIENT_IP" \ -H "referer: REFERRER_URL" \ -H "user-agent: USER_AGENT" \

如果未提供 x-forwarded-for 標頭,Video Stitcher API 會在廣告中繼資料要求中使用用戶端 IP 位址。請注意,如果工作階段是代表顧客裝置產生,用戶端的 IP 位址可能與顧客裝置的 IP 位址不符。

廣告代碼巨集

廣告代碼可以包含巨集,因此每個工作階段可能會產生不同的廣告代碼。廣告代碼中的巨集會以方括號表示,如下例所示:

AD_TAG_URI&macro=[my-key]

adTagUri 定義於即時設定中。

如要替換廣告代碼巨集中的值,請在 adTagMacros 欄位中提供對應。舉例來說,如要將 [my-key] 巨集替換為 my-value 字串,您需要提供下列項目:

{   ...   "adTagMacros": {     "my-key": "my-value"   },   ... }

Video Stitcher API 要求廣告中繼資料時,會使用下列廣告代碼:

AD_TAG_URI&macro=my-value

取得工作階段

如要取得即時工作階段,請使用 projects.locations.liveSessions.get 方法。

REST

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_NUMBER:位於「IAM 設定」頁面「專案編號」欄位的 Google Cloud 專案編號
  • LOCATION:建立工作階段的位置;請使用其中一個支援的區域
    顯示地區
    • us-central1
    • us-east1
    • us-west1
    • asia-east1
    • asia-south1
    • asia-southeast1
    • europe-west1
    • southamerica-east1
  • SESSION_ID:即時會議的 ID

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

 {   "name": "projects/PROJECT_NUMBER/locations/LOCATION/liveSessions/SESSION_ID",   "playUri": "ad-stitched-live-stream-uri",   "liveConfig": "projects/PROJECT_NUMBER/locations/LOCATION/liveConfigs/LIVE_CONFIG_ID", } 

C#

在試用這個範例之前,請先按照C#使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API C# API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

 using Google.Cloud.Video.Stitcher.V1;  public class GetLiveSessionSample {     public LiveSession GetLiveSession(         string projectId, string location, string sessionId)     {         // Create the client.         VideoStitcherServiceClient client = VideoStitcherServiceClient.Create();          GetLiveSessionRequest request = new GetLiveSessionRequest         {             LiveSessionName = LiveSessionName.FromProjectLocationLiveSession(projectId, location, sessionId)         };          // Call the API.         LiveSession session = client.GetLiveSession(request);          // Return the result.         return session;     } } 

Go

在試用這個範例之前,請先按照Go使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Go API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

import ( 	"context" 	"fmt" 	"io"  	stitcher "cloud.google.com/go/video/stitcher/apiv1" 	"cloud.google.com/go/video/stitcher/apiv1/stitcherpb" )  // getLiveSession gets a livestream session by ID. func getLiveSession(w io.Writer, projectID, sessionID string) error { 	// projectID := "my-project-id" 	// sessionID := "123-456-789" 	location := "us-central1" 	ctx := context.Background() 	client, err := stitcher.NewVideoStitcherClient(ctx) 	if err != nil { 		return fmt.Errorf("stitcher.NewVideoStitcherClient: %w", err) 	} 	defer client.Close()  	req := &stitcherpb.GetLiveSessionRequest{ 		Name: fmt.Sprintf("projects/%s/locations/%s/liveSessions/%s", projectID, location, sessionID), 	} 	// Gets the session. 	response, err := client.GetLiveSession(ctx, req) 	if err != nil { 		return fmt.Errorf("client.GetLiveSession: %w", err) 	}  	fmt.Fprintf(w, "Live session: %+v", response) 	return nil } 

Java

在試用這個範例之前,請先按照Java使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Java API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

 import com.google.cloud.video.stitcher.v1.GetLiveSessionRequest; import com.google.cloud.video.stitcher.v1.LiveSession; import com.google.cloud.video.stitcher.v1.LiveSessionName; import com.google.cloud.video.stitcher.v1.VideoStitcherServiceClient; import java.io.IOException;  public class GetLiveSession {    public static void main(String[] args) throws Exception {     // TODO(developer): Replace these variables before running the sample.     String projectId = "my-project-id";     String location = "us-central1";     String sessionId = "my-session-id";      getLiveSession(projectId, location, sessionId);   }    // Gets a live session.   public static LiveSession getLiveSession(String projectId, String location, String sessionId)       throws IOException {     // Initialize client that will be used to send requests. This client only needs to be created     // once, and can be reused for multiple requests.     try (VideoStitcherServiceClient videoStitcherServiceClient =         VideoStitcherServiceClient.create()) {       GetLiveSessionRequest getLiveSessionRequest =           GetLiveSessionRequest.newBuilder()               .setName(LiveSessionName.of(projectId, location, sessionId).toString())               .build();        LiveSession response = videoStitcherServiceClient.getLiveSession(getLiveSessionRequest);       System.out.println("Live session: " + response.getName());       return response;     }   } }

Node.js

在試用這個範例之前,請先按照Node.js使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Node.js API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

/**  * TODO(developer): Uncomment these variables before running the sample.  */ // projectId = 'my-project-id'; // location = 'us-central1'; // sessionId = 'my-session-id';  // Imports the Video Stitcher library const {VideoStitcherServiceClient} =   require('@google-cloud/video-stitcher').v1; // Instantiates a client const stitcherClient = new VideoStitcherServiceClient();  async function getLiveSession() {   // Construct request   const request = {     name: stitcherClient.liveSessionPath(projectId, location, sessionId),   };   const [session] = await stitcherClient.getLiveSession(request);   console.log(`Live session: ${session.name}`); }  getLiveSession().catch(err => {   console.error(err.message);   process.exitCode = 1; });

PHP

在試用這個範例之前,請先按照PHP使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API PHP API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

use Google\Cloud\Video\Stitcher\V1\Client\VideoStitcherServiceClient; use Google\Cloud\Video\Stitcher\V1\GetLiveSessionRequest;  /**  * Gets a live session.  *  * @param string $callingProjectId     The project ID to run the API call under  * @param string $location             The location of the session  * @param string $sessionId            The ID of the session  */ function get_live_session(     string $callingProjectId,     string $location,     string $sessionId ): void {     // Instantiate a client.     $stitcherClient = new VideoStitcherServiceClient();      $formattedName = $stitcherClient->liveSessionName($callingProjectId, $location, $sessionId);     $request = (new GetLiveSessionRequest())         ->setName($formattedName);     $session = $stitcherClient->getLiveSession($request);      // Print results     printf('Live session: %s' . PHP_EOL, $session->getName()); }

Python

在試用這個範例之前,請先按照Python使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Python API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

 import argparse  from google.cloud.video import stitcher_v1 from google.cloud.video.stitcher_v1.services.video_stitcher_service import (     VideoStitcherServiceClient, )   def get_live_session(     project_id: str, location: str, session_id: str ) -> stitcher_v1.types.LiveSession:     """Gets a live session. Live sessions are ephemeral resources that expire     after a few minutes.     Args:         project_id: The GCP project ID.         location: The location of the session.         session_id: The ID of the live session.      Returns:         The live session resource.     """      client = VideoStitcherServiceClient()      name = client.live_session_path(project_id, location, session_id)     response = client.get_live_session(name=name)     print(f"Live session: {response.name}")     return response  

Ruby

在試用這個範例之前,請先按照Ruby使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Ruby API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

require "google/cloud/video/stitcher"  ## # Get a live session. Live sessions are ephemeral resources # that expire after a few minutes. # # @param project_id [String] Your Google Cloud project (e.g. `my-project`) # @param location [String] The location (e.g. `us-central1`) # @param session_id [String] The live session ID (e.g. `my-live-session-id`) # def get_live_session project_id:, location:, session_id:   # Create a Video Stitcher client.   client = Google::Cloud::Video::Stitcher.video_stitcher_service    # Build the resource name of the live session.   name = client.live_session_path project: project_id, location: location,                                   live_session: session_id    # Get the live session.   session = client.get_live_session name: name    # Print the live session name.   puts "Live session: #{session.name}" end

已插入廣告的播放清單範例

以下是廣告縫合前的來源直播播放清單範例:

#EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-VERSION:4 #EXT-X-MEDIA-SEQUENCE:5 #EXTINF:10.010 segment_00005.ts #EXTINF:10.010 segment_00006.ts #EXT-X-DATERANGE:ID="2415919105",START-DATE="2021-06-22T08:32:00Z",DURATION=60,SCTE35-OUT=0xF... #EXTINF:10.010 segment_00007.ts #EXTINF:10.010 segment_00008.ts #EXT-X-DATERANGE:ID="2415919105",START-DATE="2021-06-22T08:39:20Z",SCTE35-IN=0xF... #EXTINF:10.010 segment_00009.ts 

以下顯示廣告縫合後的來源直播播放清單範例:

#EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-VERSION:4 #EXT-X-MEDIA-SEQUENCE:5 #EXTINF:10.010 segment_00005.ts #EXTINF:10.010 segment_00006.ts #EXT-X-DISCONTINUITY #EXTINF:6.000 https://ads.us-west1.cdn.videostitcher.goog/ad-1/seg-1.ts #EXTINF:5.000 https://ads.us-west1.cdn.videostitcher.goog/ad-1/seg-2.ts #EXT-X-DISCONTINUITY #EXTINF:6.000 https://ads.us-west1.cdn.videostitcher.goog/ad-2/seg-1.ts #EXTINF:5.000 https://ads.us-west1.cdn.videostitcher.goog/ad-2/seg-2.ts #EXT-X-DISCONTINUITY #EXTINF:10.010 segment_00009.ts 

處理用戶端廣告追蹤

啟用用戶端廣告追蹤功能後,播放器會負責觸發廣告追蹤事件。Video Stitcher API 提供的廣告中繼資料包括廣告追蹤和隨播廣告資訊。Video Stitcher API 會從廣告代碼回應中剖析這項資訊。

從資訊清單取得 HTTP 即時串流廣告中繼資料 URI

在 HLS 轉譯資訊清單中,AdMetadataURI 會編碼為 #EXT-X-DATERANGE 標記的 X-VAST-META 屬性。#EXT-X-DATERANGE 代碼位於每個廣告的第一個縫合片段之前。

以下是 HLS 時間碼中繼資料標記的範例:

#EXT-X-DATERANGE:ID="id123",START-DATE=2014-03-05T11:15:00Z,DURATION=15,X-VAST-META="eyJBZE1ldGFkYXRhVXJpIjogImh0dHBzOi8vZXhhbXBsZS5jb20vdjFhbHBoYS9wcm9qZWN0cy8xMjMvbG9jYXRpb25zL3VzLWNlbnRyYWwxL2xpdmVTZXNzaW9ucy9hYmMzMjEvYWRNZXRhZGF0YS9pZDEyMyJ9" 

X-VAST-META 屬性的值是經過 base64 編碼的 JSON 字串。解碼後,您可以從 JSON 中擷取 AdMetadataURI

以下範例顯示解碼後的 X-VAST-META

{   "AdMetadataUri": "https://example.com/v1/projects/123/locations/us-central1/liveSessions/abc321/adMetadata/id123" } 

從資訊清單取得 DASH 廣告中繼資料 URI

在 DASH 資訊清單中,每個縫合的廣告時段都包含一個 VAST 廣告,且廣告中繼資料 URI 可從 EventStream 標記中擷取。AdMetadataURI 會編碼在 Event 元素的 messageData 屬性中。Event 是標記 EventStream 內的元素,且 schemeIdUriurn:videostitcher:admetadata:202008

以下是 DASH 事件串流代碼範例:

<EventStream schemeIdUri="urn:videostitcher:admetadata:202008" timescale="1000">   <Event duration="5000" messageData="eyJBZE1ldGFkYXRhVXJpIjogImh0dHBzOi8vZXhhbXBsZS5jb20vdjFhbHBoYS9wcm9qZWN0cy8xMjMvbG9jYXRpb25zL3VzLWNlbnRyYWwxL2xpdmVTZXNzaW9ucy9hYmMzMjEvYWRNZXRhZGF0YS9pZDEyMyJ9"></Event> </EventStream> 

使用 base64 將 messageData 解碼為 JSON。

以下範例顯示解碼後的 messageData

{   "AdMetadataUri": "https://example.com/v1/projects/123/locations/us-central1/liveSessions/abc321/adMetadata/id123" } 

擷取及處理廣告追蹤事件

取得 AdMetadataURI 後,您就可以擷取廣告中繼資料。

以下範例顯示廣告中繼資料:

{   "activityEvents": [     {       "type": "PAUSE",       "uri": "https://example.com/pause"     }   ],   "progressiveEvents": [     {       "timeOffset": "0s",       "events": [         {           "type": "IMPRESSION",           "uri": "https://example.com/impression"         },         {           "type": "START",           "uri": "https://example.com/start"         }       ]     },     {       "timeOffset": "2.500s",       "events": [         {           "type": "FIRST_QUARTILE",           "uri": "https://example.com/firstquartile"         }       ]     }   ],   "adDuration": "10s" } 

在上述範例中,用戶端應執行下列操作:

  • 在廣告影片開始時要求 https://example.com/start
  • 在廣告影片開始時要求 https://example.com/impression
  • 每當觀眾暫停廣告影片時,就發出 https://example.com/pause 請求
  • 要求廣告影片播放 2.5 秒https://example.com/firstQuartile

檢查即時工作階段

本節說明如何檢查直播工作階段,以及特定直播工作階段的廣告代碼詳細資料。詳情請參閱 REST 說明文件

Video Stitcher API 會將要求傳送至即時工作階段要求主體中廣告代碼指定的廣告供應商。這些要求的請求和回應中繼資料會儲存 14 天,您可以檢查即時工作階段來查看。

Video Stitcher API 會使用下列項目組成廣告代碼詳細資料:

  • 指定廣告插播中要求的廣告代碼網址 (或預設廣告代碼,如果未指定任何代碼)
  • 直播工作階段要求中設定的廣告代碼巨集
  • 其他使用者中繼資料

這項資訊連同回應的主體和中繼資料,可深入瞭解 Video Stitcher API 的行為。

列出廣告代碼詳細資料

如要列出直播工作階段的廣告代碼詳細資料,請使用 projects.locations.liveSessions.liveAdTagDetails.list 方法。

請參考先前建立的直播課程的回應 (部分欄位已省略):

{   "name": "projects/PROJECT_NUMBER/locations/LOCATION/liveSessions/SESSION_ID",   ... }

REST

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_NUMBER:位於「IAM 設定」頁面「專案編號」欄位的 Google Cloud 專案編號
  • LOCATION:工作階段的位置;請使用其中一個支援的區域
    顯示地區
    • us-central1
    • us-east1
    • us-west1
    • asia-east1
    • asia-south1
    • asia-southeast1
    • europe-west1
    • southamerica-east1
  • SESSION_ID:即時會議的 ID

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

 {   "liveAdTagDetails" : [     {       "name": "projects/PROJECT_NUMBER/locations/LOCATION/liveSessions/SESSION_ID/liveAdTagDetails/LIVE_AD_TAG_DETAILS_ID",       "adRequests": [         {           "uri": "REQUEST_URL",           "requestMetadata": "AD_TAG_REQUEST_METADATA",           "responseMetadata": "AD_TAG_RESPONSE_METADATA"         }       ]     }   ] } 

複製傳回的 LIVE_AD_TAG_DETAILS_ID。您需要這個 ID 才能取得單一廣告代碼的詳細資料。

C#

在試用這個範例之前,請先按照C#使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API C# API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

 using Google.Api.Gax; using Google.Cloud.Video.Stitcher.V1; using System;  public class ListLiveAdTagDetailsSample {     public PagedEnumerable<ListLiveAdTagDetailsResponse, LiveAdTagDetail> ListLiveAdTagDetails(         string projectId, string regionId, string sessionId)     {         // Create the client.         VideoStitcherServiceClient client = VideoStitcherServiceClient.Create();          ListLiveAdTagDetailsRequest request = new ListLiveAdTagDetailsRequest         {             ParentAsLiveSessionName = LiveSessionName.FromProjectLocationLiveSession(projectId, regionId, sessionId)         };          // Make the request.         PagedEnumerable<ListLiveAdTagDetailsResponse, LiveAdTagDetail> response = client.ListLiveAdTagDetails(request);         foreach (LiveAdTagDetail liveAdTagDetail in response)         {             Console.WriteLine($"{liveAdTagDetail.Name}");         }          // Return the result.         return response;     } } 

Go

在試用這個範例之前,請先按照Go使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Go API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

import ( 	"context" 	"fmt" 	"io"  	stitcher "cloud.google.com/go/video/stitcher/apiv1" 	stitcherstreampb "cloud.google.com/go/video/stitcher/apiv1/stitcherpb" 	"google.golang.org/api/iterator" )  // listLiveAdTagDetails lists the ad tag details for the specified live session. func listLiveAdTagDetails(w io.Writer, projectID, sessionID string) error { 	// projectID := "my-project-id" 	// sessionID := "my-session-id" 	location := "us-central1" 	ctx := context.Background() 	client, err := stitcher.NewVideoStitcherClient(ctx) 	if err != nil { 		return fmt.Errorf("stitcher.NewVideoStitcherClient: %w", err) 	} 	defer client.Close()  	req := &stitcherstreampb.ListLiveAdTagDetailsRequest{ 		Parent: fmt.Sprintf("projects/%s/locations/%s/liveSessions/%s", projectID, location, sessionID), 	}  	it := client.ListLiveAdTagDetails(ctx, req) 	fmt.Fprintln(w, "Live ad tag details:") 	for { 		response, err := it.Next() 		if err == iterator.Done { 			break 		} 		if err != nil { 			return fmt.Errorf("it.Next(): %w", err) 		} 		fmt.Fprintln(w, response.GetName()) 	} 	return nil } 

Java

在試用這個範例之前,請先按照Java使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Java API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

 import com.google.cloud.video.stitcher.v1.ListLiveAdTagDetailsRequest; import com.google.cloud.video.stitcher.v1.LiveAdTagDetail; import com.google.cloud.video.stitcher.v1.LiveSessionName; import com.google.cloud.video.stitcher.v1.VideoStitcherServiceClient; import com.google.cloud.video.stitcher.v1.VideoStitcherServiceClient.ListLiveAdTagDetailsPagedResponse; import java.io.IOException;  public class ListLiveAdTagDetails {    public static void main(String[] args) throws Exception {     // TODO(developer): Replace these variables before running the sample.     String projectId = "my-project-id";     String location = "us-central1";     String sessionId = "my-session-id";      listLiveAdTagDetails(projectId, location, sessionId);   }    // Lists the live ad tag details for a given live session.   public static ListLiveAdTagDetailsPagedResponse listLiveAdTagDetails(       String projectId, String location, String sessionId) throws IOException {     // Initialize client that will be used to send requests. This client only needs to be created     // once, and can be reused for multiple requests.     try (VideoStitcherServiceClient videoStitcherServiceClient =         VideoStitcherServiceClient.create()) {       ListLiveAdTagDetailsRequest listLiveAdTagDetailsRequest =           ListLiveAdTagDetailsRequest.newBuilder()               .setParent(LiveSessionName.of(projectId, location, sessionId).toString())               .build();        VideoStitcherServiceClient.ListLiveAdTagDetailsPagedResponse response =           videoStitcherServiceClient.listLiveAdTagDetails(listLiveAdTagDetailsRequest);        System.out.println("Live ad tag details:");       for (LiveAdTagDetail adTagDetail : response.iterateAll()) {         System.out.println(adTagDetail.toString());       }       return response;     }   } }

Node.js

在試用這個範例之前,請先按照Node.js使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Node.js API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

/**  * TODO(developer): Uncomment these variables before running the sample.  */ // projectId = 'my-project-id'; // location = 'us-central1'; // sessionId = 'my-session-id';  // Imports the Video Stitcher library const {VideoStitcherServiceClient} =   require('@google-cloud/video-stitcher').v1; // Instantiates a client const stitcherClient = new VideoStitcherServiceClient();  async function listLiveAdTagDetails() {   // Construct request   const request = {     parent: stitcherClient.liveSessionPath(projectId, location, sessionId),   };   const iterable = await stitcherClient.listLiveAdTagDetailsAsync(request);   console.log('Live ad tag details:');   for await (const response of iterable) {     console.log(response.name);   } }  listLiveAdTagDetails().catch(err => {   console.error(err.message);   process.exitCode = 1; });

PHP

在試用這個範例之前,請先按照PHP使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API PHP API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

use Google\Cloud\Video\Stitcher\V1\Client\VideoStitcherServiceClient; use Google\Cloud\Video\Stitcher\V1\ListLiveAdTagDetailsRequest;  /**  * Lists the ad tag details for the specified live session.  *  * @param string $callingProjectId     The project ID to run the API call under  * @param string $location             The location of the session  * @param string $sessionId            The ID of the session  */ function list_live_ad_tag_details(     string $callingProjectId,     string $location,     string $sessionId ): void {     // Instantiate a client.     $stitcherClient = new VideoStitcherServiceClient();      $formattedName = $stitcherClient->liveSessionName($callingProjectId, $location, $sessionId);     $request = (new ListLiveAdTagDetailsRequest())         ->setParent($formattedName);     $response = $stitcherClient->listLiveAdTagDetails($request);      // Print the ad tag details list.     $adTagDetails = $response->iterateAllElements();     print('Live ad tag details:' . PHP_EOL);     foreach ($adTagDetails as $adTagDetail) {         printf('%s' . PHP_EOL, $adTagDetail->getName());     } }

Python

在試用這個範例之前,請先按照Python使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Python API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

 import argparse  from google.cloud.video.stitcher_v1.services.video_stitcher_service import (     pagers,     VideoStitcherServiceClient, )   def list_live_ad_tag_details(     project_id: str, location: str, session_id: str ) -> pagers.ListLiveAdTagDetailsPager:     """Lists the ad tag details for the specified live session.     Args:         project_id: The GCP project ID.         location: The location of the session.         session_id: The ID of the live session.      Returns:         An iterable object containing live ad tag details resources.     """      client = VideoStitcherServiceClient()      parent = client.live_session_path(project_id, location, session_id)     page_result = client.list_live_ad_tag_details(parent=parent)     print("Live ad tag details:")     for response in page_result:         print(response)      return page_result  

Ruby

在試用這個範例之前,請先按照Ruby使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Ruby API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

require "google/cloud/video/stitcher"  ## # List the ad tag details for a live session # # @param project_id [String] Your Google Cloud project (e.g. `my-project`) # @param location [String] The location (e.g. `us-central1`) # @param session_id [String] The live session ID (e.g. `my-live-session-id`) # def list_live_ad_tag_details project_id:, location:, session_id:   # Create a Video Stitcher client.   client = Google::Cloud::Video::Stitcher.video_stitcher_service    # Build the resource name of the parent.   parent = client.live_session_path project: project_id, location: location,                                     live_session: session_id    # List all ad tag details for the live session.   response = client.list_live_ad_tag_details parent: parent    puts "Live ad tag details:"   # Print out all live ad tag details.   response.each do |live_ad_tag_detail|     puts live_ad_tag_detail.name   end end

取得廣告代碼詳細資料

如要在直播工作階段中取得單一廣告代碼的詳細資料,請使用 projects.locations.liveSessions.liveAdTagDetails.get 方法。

以下範例說明如何使用先前要求傳回的廣告代碼詳細資料名稱,查看直播工作階段的單一廣告代碼詳細資料:

REST

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_NUMBER:位於「IAM 設定」頁面「專案編號」欄位的 Google Cloud 專案編號
  • LOCATION:工作階段的位置;請使用其中一個支援的區域
    顯示地區
    • us-central1
    • us-east1
    • us-west1
    • asia-east1
    • asia-south1
    • asia-southeast1
    • europe-west1
    • southamerica-east1
  • SESSION_ID:即時會議的 ID
  • LIVE_AD_TAG_DETAILS_ID:即時廣告代碼詳細資料的 ID

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

 {   "name": "projects/PROJECT_NUMBER/locations/LOCATION/liveSessions/SESSION_ID/liveAdTagDetails/LIVE_AD_TAG_DETAILS_ID",   "adRequests": [     {       "uri": "REQUEST_URL",       "requestMetadata": "AD_TAG_REQUEST_METADATA",       "responseMetadata": "AD_TAG_RESPONSE_METADATA"     }   ] } 

C#

在試用這個範例之前,請先按照C#使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API C# API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

 using Google.Cloud.Video.Stitcher.V1;  public class GetLiveAdTagDetailSample {     public LiveAdTagDetail GetLiveAdTagDetail(         string projectId, string location, string sessionId, string adTagDetailId)     {         // Create the client.         VideoStitcherServiceClient client = VideoStitcherServiceClient.Create();          GetLiveAdTagDetailRequest request = new GetLiveAdTagDetailRequest         {             LiveAdTagDetailName = LiveAdTagDetailName.FromProjectLocationLiveSessionLiveAdTagDetail(projectId, location, sessionId, adTagDetailId)         };          // Call the API.         LiveAdTagDetail liveAdTagDetail = client.GetLiveAdTagDetail(request);          // Return the result.         return liveAdTagDetail;     } } 

Go

在試用這個範例之前,請先按照Go使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Go API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

import ( 	"context" 	"encoding/json" 	"fmt" 	"io"  	stitcher "cloud.google.com/go/video/stitcher/apiv1" 	stitcherstreampb "cloud.google.com/go/video/stitcher/apiv1/stitcherpb" )  // getLiveAdTagDetail gets the specified ad tag detail for a live session. func getLiveAdTagDetail(w io.Writer, projectID, sessionID, adTagDetailID string) error { 	// projectID := "my-project-id" 	// sessionID := "my-session-id" 	// adTagDetailID := "my-ad-tag-detail-id" 	location := "us-central1" 	ctx := context.Background() 	client, err := stitcher.NewVideoStitcherClient(ctx) 	if err != nil { 		return fmt.Errorf("stitcher.NewVideoStitcherClient: %w", err) 	} 	defer client.Close()  	req := &stitcherstreampb.GetLiveAdTagDetailRequest{ 		Name: fmt.Sprintf("projects/%s/locations/%s/liveSessions/%s/liveAdTagDetails/%s", projectID, location, sessionID, adTagDetailID), 	} 	// Gets the ad tag detail. 	response, err := client.GetLiveAdTagDetail(ctx, req) 	if err != nil { 		return fmt.Errorf("client.GetLiveAdTagDetail: %w", err) 	} 	b, err := json.MarshalIndent(response, "", " ") 	if err != nil { 		return fmt.Errorf("json.MarshalIndent: %w", err) 	} 	fmt.Fprintf(w, "Live ad tag detail:\n%v", string(b)) 	return nil } 

Java

在試用這個範例之前,請先按照Java使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Java API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

 import com.google.cloud.video.stitcher.v1.GetLiveAdTagDetailRequest; import com.google.cloud.video.stitcher.v1.LiveAdTagDetail; import com.google.cloud.video.stitcher.v1.LiveAdTagDetailName; import com.google.cloud.video.stitcher.v1.VideoStitcherServiceClient; import java.io.IOException;  public class GetLiveAdTagDetail {    public static void main(String[] args) throws Exception {     // TODO(developer): Replace these variables before running the sample.     String projectId = "my-project-id";     String location = "us-central1";     String sessionId = "my-session-id";     String adTagDetailId = "my-ad-tag-detail-id";      getLiveAdTagDetail(projectId, location, sessionId, adTagDetailId);   }    // Gets a live ad tag detail in a live session.   public static LiveAdTagDetail getLiveAdTagDetail(       String projectId, String location, String sessionId, String adTagDetailId)       throws IOException {     // Initialize client that will be used to send requests. This client only needs to be created     // once, and can be reused for multiple requests.     try (VideoStitcherServiceClient videoStitcherServiceClient =         VideoStitcherServiceClient.create()) {       GetLiveAdTagDetailRequest getLiveAdTagDetailRequest =           GetLiveAdTagDetailRequest.newBuilder()               .setName(                   LiveAdTagDetailName.of(projectId, location, sessionId, adTagDetailId).toString())               .build();        LiveAdTagDetail response =           videoStitcherServiceClient.getLiveAdTagDetail(getLiveAdTagDetailRequest);       System.out.println("Live ad tag detail: " + response.getName());       return response;     }   } }

Node.js

在試用這個範例之前,請先按照Node.js使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Node.js API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

/**  * TODO(developer): Uncomment these variables before running the sample.  */ // projectId = 'my-project-id'; // location = 'us-central1'; // sessionId = 'my-session-id'; // adTagDetailId = 'my-ad-tag-detail-id';  // Imports the Video Stitcher library const {VideoStitcherServiceClient} =   require('@google-cloud/video-stitcher').v1; // Instantiates a client const stitcherClient = new VideoStitcherServiceClient();  async function getLiveAdTagDetail() {   // Construct request   const request = {     name: stitcherClient.liveAdTagDetailPath(       projectId,       location,       sessionId,       adTagDetailId     ),   };   const [adTagDetail] = await stitcherClient.getLiveAdTagDetail(request);   console.log(`Live ad tag detail: ${adTagDetail.name}`); }  getLiveAdTagDetail().catch(err => {   console.error(err.message);   process.exitCode = 1; });

PHP

在試用這個範例之前,請先按照PHP使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API PHP API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

use Google\Cloud\Video\Stitcher\V1\Client\VideoStitcherServiceClient; use Google\Cloud\Video\Stitcher\V1\GetLiveAdTagDetailRequest;  /**  * Gets the specified ad tag detail for the live session.  *  * @param string $callingProjectId     The project ID to run the API call under  * @param string $location             The location of the session  * @param string $sessionId            The ID of the session  * @param string $adTagDetailId        The ID of the ad tag detail  */ function get_live_ad_tag_detail(     string $callingProjectId,     string $location,     string $sessionId,     string $adTagDetailId ): void {     // Instantiate a client.     $stitcherClient = new VideoStitcherServiceClient();      $formattedName = $stitcherClient->liveAdTagDetailName($callingProjectId, $location, $sessionId, $adTagDetailId);     $request = (new GetLiveAdTagDetailRequest())         ->setName($formattedName);     $adTagDetail = $stitcherClient->getLiveAdTagDetail($request);      // Print results     printf('Live ad tag detail: %s' . PHP_EOL, $adTagDetail->getName()); }

Python

在試用這個範例之前,請先按照Python使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Python API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

 import argparse  from google.cloud.video import stitcher_v1 from google.cloud.video.stitcher_v1.services.video_stitcher_service import (     VideoStitcherServiceClient, )   def get_live_ad_tag_detail(     project_id: str, location: str, session_id: str, ad_tag_detail_id: str ) -> stitcher_v1.types.LiveAdTagDetail:     """Gets the specified ad tag detail for a live session.     Args:         project_id: The GCP project ID.         location: The location of the session.         session_id: The ID of the live session.         ad_tag_detail_id: The ID of the ad tag details.      Returns:         The live ad tag detail resource.     """      client = VideoStitcherServiceClient()      name = client.live_ad_tag_detail_path(         project_id, location, session_id, ad_tag_detail_id     )     response = client.get_live_ad_tag_detail(name=name)     print(f"Live ad tag detail: {response.name}")     return response  

Ruby

在試用這個範例之前,請先按照Ruby使用用戶端程式庫的 Video Stitcher API 快速入門中的設定說明操作。 詳情請參閱 Video Stitcher API Ruby API 參考說明文件

如要向 Video Stitcher API 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

require "google/cloud/video/stitcher"  ## # Get the specified ad tag detail for a live session # # @param project_id [String] Your Google Cloud project (e.g. `my-project`) # @param location [String] The location (e.g. `us-central1`) # @param session_id [String] The live session ID (e.g. `my-live-session-id`) # @param ad_tag_detail_id [String] The ad tag detail ID (e.g. `my-ad-tag-id`) # def get_live_ad_tag_detail project_id:, location:, session_id:,                            ad_tag_detail_id:   # Create a Video Stitcher client.   client = Google::Cloud::Video::Stitcher.video_stitcher_service    # Build the resource name of the live ad tag detail.   name = client.live_ad_tag_detail_path project: project_id, location: location,                                         live_session: session_id,                                         live_ad_tag_detail: ad_tag_detail_id    # Get the live ad tag detail.   ad_tag_detail = client.get_live_ad_tag_detail name: name    # Print the live ad tag detail name.   puts "Live ad tag detail: #{ad_tag_detail.name}" end