Video Creative Ingest API ช่วยให้ระบบโฆษณาของบุคคลที่สามส่งผ่านข้อมูลครีเอทีฟโฆษณาไปยังผลิตภัณฑ์ YouTube และ DAI ได้ กระบวนการนี้ช่วยให้มั่นใจได้ว่าเมื่อมีการตัดสินโฆษณาจากเซิร์ฟเวอร์โฆษณาที่ไม่ใช่ของ Google ครีเอทีฟโฆษณาที่แสดงจะพร้อมและพร้อมที่จะแสดงในสตรีมวิดีโอ YouTube หรือ DAI
ขั้นตอนการนำเข้าครีเอทีฟโฆษณาจากระบบโฆษณาของบุคคลที่สามอย่างสม่ำเสมอประกอบด้วย 2 ส่วนหลักๆ ส่วนแรกช่วยให้ระบบโฆษณาของบุคคลที่สามส่งครีเอทีฟโฆษณาไปยัง Google และตรวจสอบความคืบหน้าของครีเอทีฟโฆษณาขณะที่ส่งผ่านไปยังโครงสร้างพื้นฐานวิดีโอของ Google เมื่อนำเข้าครีเอทีฟโฆษณาเรียบร้อยแล้ว ระบบจะส่งตัวระบุกลับไปยังระบบโฆษณา
ขั้นตอนที่ 2 คือระบบโฆษณาจะนำตัวระบุเหล่านั้นไปรวมไว้ในเอกสาร VAST ที่อ้างอิงครีเอทีฟโฆษณาที่ส่งโดยใช้รหัสโฆษณา Universal (VAST 4.0 ขึ้นไป) หรือชิ้นงานครีเอทีฟโฆษณาประเภท "UniversalAdId" เมื่อพบเอกสาร VAST จากระบบโฆษณา ณ เวลาตัดสินใจใน DAI หรือ YouTube ระบบครีเอทีฟโฆษณาจะดึงข้อมูลระบุเหล่านั้นจาก VAST และดึงข้อมูลครีเอทีฟโฆษณาที่เหมาะสมจากโครงสร้างพื้นฐานวิดีโอของ Google เพื่อแทรกสำหรับการเล่น
ข้อกำหนดเกี่ยวกับสื่อ
สื่อครีเอทีฟโฆษณาที่ส่งไปยัง API ควรเป็นไปตามเกณฑ์ต่อไปนี้เพื่อให้ระบบประมวลผลได้สําเร็จ
ประเภทสื่อ
Google ยอมรับสื่อประเภทต่อไปนี้ ระบบอาจปฏิเสธสื่อประเภทอื่นๆ เมื่อส่งเข้ามา
video/mp4video/webmvideo/quicktimevideo/avivideo/mpegvideo/x-flvflv-application/octet-streamapplication/octet-streamvideo/3gppvideo/oggaudio/mp4audio/mpeg
พร็อพเพอร์ตี้สื่อ
สื่อที่ส่งต้องเป็นไปตามเกณฑ์ต่อไปนี้
- สื่อต้องมีแทร็กเสียงหรือวิดีโออย่างน้อย 1 แทร็ก
- สื่อต้องมีระยะเวลาที่เหมาะสม วิดีโอไม่มีความยาวเกินหลายนาที
- สื่อต้องมีเสียงหรือวิดีโอที่มีความยาวมากกว่า 1 วินาที
- หากสื่อมีเสียง สื่อนั้นต้องมีการกำหนดค่าช่องเสียงมาตรฐาน เช่น โมโน ส stereo หรือเสียงเซอร์ราวด์
ส่งครีเอทีฟโฆษณาเพื่อนำเข้า
- ระบบโฆษณาของบุคคลที่สามจะส่งคําขอ HTTP ไปยัง Video Creative Ingest API พร้อมรายการไฟล์สื่อที่เชื่อมโยงกับครีเอทีฟโฆษณา
- Video Creative Ingest API จะเลือกครีเอทีฟโฆษณาที่มีคุณภาพสูงสุดจากรายการที่ระบุและดาวน์โหลดจาก CDN
- Video Creative Ingest API จะส่งผ่านครีเอทีฟโฆษณาที่ดาวน์โหลดไปยังโครงสร้างพื้นฐานวิดีโอของ Google เพื่อให้ทั้งผลิตภัณฑ์ YouTube และ DAI ใช้งานได้
- ระบบจะส่งการแจ้งเตือน Pub/Sub กลับไปยังระบบโฆษณาของบุคคลที่สามพร้อมสถานะของครีเอทีฟโฆษณา การแจ้งเตือนจะระบุว่าอัปโหลดสำหรับทั้ง YouTube และ DAI สำเร็จหรือไม่ หากการโหลดครีเอทีฟโฆษณาไม่สําเร็จ การแจ้งเตือนจะระบุสาเหตุของความล้มเหลว
โปรดทำตามหลักเกณฑ์เหล่านี้เมื่อส่งครีเอทีฟโฆษณา
การตรวจสอบสิทธิ์
คุณต้องเข้าถึง API โดยใช้บัญชีบริการ Google Cloud คุณต้องให้ข้อมูลบัญชีแก่ Google เพื่อรับการให้สิทธิ์ที่เหมาะสม ณ เวลาผสานรวม
เมื่อคุณให้ข้อมูลบัญชีแก่ Google ผ่าน creativeingestion@google.com แล้ว ระบบจะให้สิทธิ์เข้าถึงปลายทาง API และหัวข้อ Cloud PubSub ที่ใช้เพื่อเผยแพร่การแจ้งเตือน
หากต้องการเริ่มกระบวนการตรวจสอบสิทธิ์ ให้ทำตามขั้นตอนต่อไปนี้
- สร้างบัญชี Google Cloud
- ตั้งค่าโปรเจ็กต์ด้วยบัญชีสําหรับส่งคําขอไปยัง DAI API
- ภายในโปรเจ็กต์ ให้ไปที่แท็บ IAM & Admin ทางด้านซ้าย แล้วสร้างบัญชีบริการใหม่ ระบบจะส่งคําขอโดยใช้บัญชีบริการดังกล่าว
เปิดใช้ PubSub API และสร้างหัวข้อการแจ้งเตือนพาร์ทเนอร์ที่ไม่ซ้ำกันหัวข้อเดียวซึ่ง API จะเผยแพร่การแจ้งเตือนการนำเข้าที่สำเร็จและไม่สำเร็จทั้งหมด
หากมีนโยบายองค์กรเกี่ยวกับการจำกัดโดเมน คุณต้องเพิ่มรหัสลูกค้า Google ลงในรายการลูกค้าที่อนุญาต โปรดติดต่อ
creativeingestion@google.comเพื่อขอรหัส เมื่อดำเนินการเสร็จแล้ว คุณจะเพิ่มผู้ใช้หลัก (บัญชีหุ่นยนต์ของเรา) จากรายการลูกค้าที่อนุญาต (รหัสลูกค้าของ API) ไปยังนโยบาย IAM (PubSub ของผู้เผยแพร่โฆษณา) ได้เพิ่ม
video-creative-library-discovery@system.gserviceaccount.comเป็นผู้เผยแพร่ PubSub ในหัวข้อระบุ
creativeingestion@google.comด้วยอีเมลบัญชีบริการและหัวข้อ PubSub เพื่อลงทะเบียนข้อมูลนี้กับ APIเปิดใช้ DAI API หลังจากที่เพิ่มบัญชีเป็นผู้ใช้บริการแล้ว
วิธีตั้งค่าข้อมูลเข้าสู่ระบบเพื่อเข้าถึง API
ดาวน์โหลดข้อมูลเข้าสู่ระบบจากบัญชีบริการ โดยคลิกบัญชีบริการในส่วนบัญชีบริการของแท็บ IAM และผู้ดูแลระบบ คลิกสร้างคีย์ แล้วจัดเก็บข้อมูลเข้าสู่ระบบ
ตรวจสอบสิทธิ์ API ของผู้เรียก ตั้งค่า
GOOGLE_APPLICATION_CREDENTIALSเป็นเส้นทางของไฟล์ JSON ดูตัวอย่างโค้ดสำหรับการตรวจสอบสิทธิ์ไคลเอ็นต์ gRPC ในภาษาทั่วไป
การส่งผ่านข้อมูลครีเอทีฟโฆษณา
ทุกครั้งที่ครีเอทีฟโฆษณาใหม่พร้อมใช้งานในระบบโฆษณาของพาร์ทเนอร์ ระบบของพาร์ทเนอร์ควรส่งครีเอทีฟโฆษณาไปยัง Creative Ingest API
เมื่อส่งครีเอทีฟโฆษณาใหม่ไปยัง Google เพื่อโหลดลงในโครงสร้างพื้นฐานวิดีโอ คุณควรระบุข้อมูลครีเอทีฟโฆษณาเดียวกันกับที่รวมอยู่ในเอกสาร VAST ที่ระบบโฆษณาสร้างขึ้น วิธีนี้ช่วยให้มั่นใจได้ว่าลักษณะการนำเข้าครีเอทีฟโฆษณาไปยัง Google อย่างสม่ำเสมอจะมีลักษณะการทํางานเหมือนกับการโหลดครีเอทีฟโฆษณาเมื่อค้นพบครั้งแรกในการตอบกลับโฆษณา
ครีเอทีฟโฆษณาที่ส่งแต่ละรายการจะสร้างการดำเนินการส่งผ่านข้อมูลแบบต่อเนื่องในเซิร์ฟเวอร์ ซึ่งสามารถค้นหาสถานะได้ เมื่อดำเนินการเสร็จสมบูรณ์แล้ว ระบบจะสร้างแหล่งข้อมูลครีเอทีฟโฆษณาภายในระบบ การตอบกลับการส่งครีเอทีฟโฆษณาจะมีรหัสของการดำเนินการที่เกิดจากคำขอ รหัสการดำเนินการที่ได้จะรวมอยู่ในการแจ้งเตือน Cloud PubSub ที่ส่งเมื่อการดำเนินการเสร็จสมบูรณ์เพื่อจับคู่กับครีเอทีฟโฆษณาต้นฉบับที่ส่ง นอกจากนี้ คุณยังใช้รหัสการดำเนินการเพื่อตรวจสอบความคืบหน้าของการดำเนินการได้ทุกเมื่อ
คำขอครีเอทีฟโฆษณา
ระบบจะส่งข้อมูลไปยัง API เป็น Protocol Buffers หรือออบเจ็กต์ JSON เราขอแนะนำให้ใช้ Protocol Buffers ที่ส่งโดยใช้ gRPC เนื่องจากจำเป็นต่อการใช้การแจ้งเตือน PubSub และการปรับรูปแบบ JSON มีความซับซ้อนมากขึ้นเนื่องจากช่อง google.protobuf.Any ในการตอบกลับ
การตอบกลับครีเอทีฟโฆษณา
หากดำเนินการสำเร็จ เซิร์ฟเวอร์จะแสดงการตอบกลับ Protocol Buffer หรือการตอบกลับ JSON ทั้งนี้ขึ้นอยู่กับประเภทคำขอ การตอบกลับจะมีชื่อการดำเนินการนำเข้าที่สร้างใหม่และรายละเอียดของการดำเนินการ
เมื่อส่งครั้งแรก เมตาดาต้าบางอย่างที่เชื่อมโยงกับการดำเนินการอาจว่างเปล่าและผลลัพธ์อาจไม่ปรากฏ เมื่อดำเนินการเสร็จแล้ว ระบบจะป้อนข้อมูลผลลัพธ์ด้วยทรัพยากรครีเอทีฟโฆษณา (หรือข้อผิดพลาด) และข้อมูลเมตาจะมีข้อมูลเกี่ยวกับสถานะการส่งผ่านข้อมูล
โปรดทราบว่าต้องแยกข้อมูลเมตาจากโปรโต Any ไปยังโปรโต CreateCreativeOperationMetadata และต้องแยกการตอบกลับ (หากมี) ไปยังโปรโต Creative
ไลบรารีของไคลเอ็นต์เพื่อเข้าถึง API
ทําตามขั้นตอนต่อไปนี้เพื่อผสานรวมกับ API
- ดาวน์โหลดรายการที่เกี่ยวข้องของ Protocol Buffer แล้วย้ายทั้งโฟลเดอร์
googleไปยังไดเรกทอรีsrcขั้นตอนนี้ข้ามได้หากใช้ Google Cloud App Engine - ใช้ปลั๊กอิน protoc เพื่อสร้างโค้ด gRPC จากไฟล์ proto และวางโค้ดที่สร้างขึ้นไว้ในไดเรกทอรีที่เกี่ยวข้อง
- สร้างไฟล์โปรโตคอลใหม่สำหรับโปรโตคอลที่แสดงในการแจ้งเตือน PubSub แล้วทำตามขั้นตอนก่อนหน้าซ้ำเพื่อสร้างโค้ดจากโปรโตคอล
ใช้ gRPC เพื่อส่งคําขอไปยัง API
- รับข้อมูลเข้าสู่ระบบเริ่มต้นที่มีขอบเขตต่อไปนี้
https://www.googleapis.com/auth/video-adshttps://www.googleapis.com/auth/pubsub- ส่งคำขอไปยัง Creative Ingest
- เชื่อมต่อกับ
dai.googleapis.com:443โดยใช้ข้อมูลเข้าสู่ระบบเริ่มต้น - สร้างสแต็บไคลเอ็นต์สำหรับบริการส่งผ่านข้อมูลครีเอทีฟโฆษณาโดยใช้โค้ดที่ gRPC สร้างขึ้นจากโปรโตคอล
- โทรหา
CreateCreativeโดยใช้สตับไคลเอ็นต์
(ไม่บังคับ) สร้างสแต็บสำหรับบริการการดำเนินการโดยใช้โค้ด gRPC ของการดำเนินการแบบต่อเนื่อง ซึ่งรวมอยู่ในไดเรกทอรี googleapis ที่ดาวน์โหลดในขั้นตอนที่ 2 ซึ่งสามารถใช้เพื่อดูสถานะของการดำเนินการหนึ่งๆ (
GetOperation)ตรวจสอบการแจ้งเตือนใน PubSub
ใช้คลังไลบรารีไคลเอ็นต์ PubSub หรือ gRPC เพื่อเชื่อมต่อกับบริการ PubSub และทำการสำรวจการแจ้งเตือน PubSub ที่เผยแพร่ไปยังหัวข้อที่ระบุ
Unmarshal ข้อความ PubSub เป็นโปรโตจากขั้นตอนที่ 4
เมื่อใดก็ตามที่มีการเรียกใช้
CreateCreative,GetOperationหรือมีการแจ้งเตือน PubSub ให้แปลงข้อมูลเมตาเป็นCreateCreativeOperationMetadataในdiscovery.protoจากโปรโตคอลgoogle.protobuf.Anyและแปลงการตอบกลับเป็นCreativeในdiscovery.proto
ตัวอย่างโค้ดไคลเอ็นต์ Go
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package main
import (
dai "google.golang.org/genproto/googleapis/ads/dai/v1"
psnotif "protos/dai"
"google.golang.org/genproto/googleapis/longrunning"
"cloud.google.com/go/pubsub"
"golang.org/x/net/context"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/credentials/oauth"
"github.com/golang/protobuf/proto"
anypb "github.com/golang/protobuf/ptypes/any"
)
var scopes = []string{"https://www.googleapis.com/auth/video-ads", "https://www.googleapis.com/auth/pubsub"}
const (
subID = "sub-id" // The ID for the subscription to the topic you provided us (projects/<project ID>/subscriptions/<subscription ID>)
project = "your-project-id" // Your Google Cloud Project ID
)
func main() {
ctx := context.Background()
crpc, err := oauth.NewApplicationDefault(ctx, scopes...)
if err != nil {
// TODO: Handle error
}
conn, err := grpc.Dial("dai.googleapis.com:443",
grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(nil, "")),
grpc.WithPerRPCCredentials(crpc))
if err != nil {
// TODO: Handle error
}
apiclient := dai.NewPartnerDiscoveryServiceClient(conn)
opclient := longrunning.NewOperationsClient(conn)
op, err := apiclient.CreateCreative(ctx, &dai.CreateCreativeRequest{
// TODO: Add Creative with metadata and media files.
})
if err != nil {
// TODO: Handle error
}
pubsubClient, err := pubsub.NewClient(ctx, project)
if err != nil {
// TODO: Handle error
}
sub := pubsubClient.Subscription(subID)
// TODO: Pull from Pub/Sub subscription to receive messages, and acknowledge them
var msg *pubsub.Message // Assume msg = a received Pub/Sub message
// Unmarshal the Pub/Sub message into the proto created in step 9a of guide
var n psnotif.CreateCreativeStatus
if err := proto.Unmarshal(msg.Data, &n); err != nil {
// TODO: Handle error
}
op = n.GetDetails()
md, err = anyToMetadata(op.GetMetadata())
if err != nil {
// TODO: Handle error
}
// TODO: Check if ingest was successful and get Google Video ID from md.GetGvRegistryId()
// TODO: Enable serving of creative using Google Video ID in VAST document
// Optionally check the status of an ingest request using the status endpoint
op, err = opclient.GetOperation(ctx, &longrunning.GetOperationRequest{Name: op.Name})
if err != nil {
// TODO: Handle error
}
}
// anyToMetadata converts the metadata Any field in an Operation message to
// CreateCreativeOperationMetadata.
func anyToMetadata(msg *anypb.Any) (*dai.CreateCreativeOperationMetadata, error) {
var md dai.CreateCreativeOperationMetadata
return &md, proto.Unmarshal(msg.Value, &md)
}
// anyToCreative converts the response Any field in an Operation message to
// Creative.
func anyToCreative(msg *anypb.Any) (*dai.Creative, error) {
var cr dai.Creative
return &cr, proto.Unmarshal(msg.Value, &cr)
}
การค้นหาครีเอทีฟโฆษณาระหว่างการเล่น
- คำขอของผู้ใช้ที่ต้องการดูเนื้อหาใน YouTube หรือ DAI
- YouTube / DAI ได้รับการตอบกลับ VAST จากระบบโฆษณาของบุคคลที่สามเพื่อแทรกโฆษณาลงในเนื้อหา
- ระบบจะแมปโฆษณาที่แสดงผลกับครีเอทีฟโฆษณาที่นำเข้าก่อนหน้านี้ ครีเอทีฟโฆษณาเหล่านั้นพร้อมสําหรับการเล่นแล้ว ระบบจะดึงข้อมูลครีเอทีฟโฆษณาจากโครงสร้างพื้นฐานวิดีโอของ Google และเล่นให้ผู้ใช้ดู
เอกสาร VAST ที่แก้ไขโดยพาร์ทเนอร์
เมื่อระบบโฆษณาแสดงการตอบกลับ VAST หลังจากที่โหลดครีเอทีฟโฆษณาลงในโครงสร้างพื้นฐานวิดีโอของ Google เรียบร้อยแล้ว เอกสารควรมีการอ้างอิงครีเอทีฟโฆษณาที่ประมวลผลแล้ว เอกสาร VAST ควรรวมไฟล์สื่อสำหรับครีเอทีฟโฆษณาหนึ่งๆ ต่อไป แต่ไม่มีการรับประกันว่าระบบจะใช้ไฟล์สื่อเหล่านี้
การอ้างอิงครีเอทีฟโฆษณาที่ประมวลผลแล้วในเอกสาร VAST ทําได้ 2 วิธี ได้แก่ การเพิ่มองค์ประกอบ UniversalAdId ใหม่ลงในเอกสาร VAST 4 ขึ้นไป หรือการเพิ่มส่วนขยายที่กําหนดเอง
รหัสโฆษณาสากล
gvRegistryID ที่ Video Creative Ingest API แสดงผลเป็นรหัสสากลที่แสดงต่อสาธารณะซึ่งใช้เพื่อระบุครีเอทีฟโฆษณาวิดีโอที่ไม่ซ้ำกันในทุกระบบโฆษณา คุณควรเพิ่มรหัสนี้ลงในเอกสาร VAST 4 ขึ้นไปของระบบโฆษณาเพื่อให้ YouTube หรือ DAI ใช้รหัสนี้เพื่อแมปกับครีเอทีฟโฆษณาที่ส่งมาครั้งแรกได้เมื่อได้รับเอกสาร VAST
ระบบโฆษณาควรเพิ่มองค์ประกอบ UniversalAdId ใหม่ลงในเอกสาร VAST 4 ขึ้นไปภายใต้โหนดครีเอทีฟโฆษณา คุณควรตั้งค่าแอตทริบิวต์ idRegistry เป็น "googlevideo" และค่าควรเป็นค่าที่ระบุไว้ในสถานะของการแจ้งเตือนครีเอทีฟโฆษณาที่ประมวลผลเรียบร้อยแล้ว
ต่อไปนี้คือตัวอย่างเอกสาร VAST 4 ที่มีการเพิ่มรหัสโฆษณา Universal ใหม่
<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="4.0">
<Ad id="318230556">
<InLine>
<AdSystem>DCM</AdSystem>
<AdTitle>In-Stream Video</AdTitle>
<Creatives>
<Creative id="79534759" AdID="" sequence="1">
<UniversalAdId idRegistry="googlevideo">dQw4w9WgXcQ</UniversalAdId>
<Linear>
<Duration>00:00:15</Duration>
<MediaFiles>
<Mezzanine>
<![CDATA[https://cdn.com/media.mp4]]>
</Mezzanine>
<MediaFile delivery="progressive" width="640" height="360" type="video/mp4" bitrate="313">
<![CDATA[https://cdn.com/low-res-media.mp4]]>
</MediaFile>
</MediaFiles>
</Linear>
</Creative>
</Creatives>
</InLine>
</Ad>
</VAST>
CreativeExtension
เนื่องจากองค์ประกอบรหัสโฆษณาแบบ Universal เพิ่งเปิดตัวใน VAST 4.0 ข้อมูลเดียวกันจึงต้องใช้ส่วนขยายที่กําหนดเองจึงจะแสดงในเอกสาร VAST ที่มีเวอร์ชันต่ำกว่า 4.0 ได้ ซึ่งทำได้โดยใช้องค์ประกอบ CreativeExtension ในส่วนองค์ประกอบครีเอทีฟโฆษณาของข้อกําหนด VAST
ส่วนขยายใหม่ที่เปิดตัวเป็นส่วนขยายทั่วไปที่เปิดใช้เพื่อให้ป้อนค่า Universal AD ID ใดก็ได้ ในกรณีนี้ รหัสโฆษณาสากลจะอยู่ในรีจิสทรี googlevideo และรหัสจะเป็นรหัส google video
<VAST version="3.0">
<Ad id="318230556">
<InLine>
<AdSystem>My Ad Server</AdSystem>
<AdTitle>Car Company</AdTitle>
<Creatives>
<Creative id="79534759" AdID="" sequence="1">
<Linear>...</Linear>
<CreativeExtensions>
<CreativeExtension type="UniversalAdId">
<UniversalAdId idRegistry="googlevideo">dQw4w9WgXcQ</UniversalAdId>
</CreativeExtension>
</CreativeExtensions>
</Creative>
</Creative>
</InLine>
</Ad>
</VAST>
นอกจากนี้ คุณยังใช้แนวทาง CreativeExtension ใน VAST 4 ขึ้นไปได้ในกรณีที่มีการป้อนข้อมูล UniversalAdId ด้วยรหัสสำหรับรีจิสทรี UniversalAdId อื่นแล้ว
<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="4.0">
<Ad id="318230556">
<InLine>
<AdSystem>DCM</AdSystem>
<AdTitle>In-Stream Video</AdTitle>
<Creatives>
<Creative id="79534759" AdID="" sequence="1">
<UniversalAdId idRegistry="other-registry">other-id</UniversalAdId>
<Linear>
<Duration>00:00:15</Duration>
<MediaFiles>
<Mezzanine>
<![CDATA[https://cdn.com/media.mp4]]>
</Mezzanine>
<MediaFile delivery="progressive" width="640" height="360" type="video/mp4" bitrate="313">
<![CDATA[https://cdn.com/low-res-media.mp4]]>
</MediaFile>
</MediaFiles>
</Linear>
<CreativeExtensions>
<CreativeExtension type="UniversalAdId">
<UniversalAdId idRegistry="googlevideo">dQw4w9WgXcQ</UniversalAdId>
</CreativeExtension>
</CreativeExtensions>
</Creative>
</Creatives>
</InLine>
</Ad>
</VAST>