Video Creative Ingest API

वीडियो क्रिएटिव डालने वाले एपीआई की मदद से, तीसरे पक्ष के विज्ञापन सिस्टम, YouTube और डीआई (डायरेक्ट ऐक्सेस इन्वेंट्री) प्रॉडक्ट में क्रिएटिव डाल सकते हैं. इस प्रोसेस से यह पक्का होता है कि जब किसी ऐसे विज्ञापन सर्वर से विज्ञापन दिखाने का फ़ैसला लिया जाता है जो Google का नहीं है, तो दिखाए गए क्रिएटिव, YouTube या डीएआई वीडियो स्ट्रीम में दिखाए जाने के लिए तैयार और उपलब्ध होते हैं.

तीसरे पक्ष के विज्ञापन सिस्टम से क्रिएटिव को पहले से डालने की प्रोसेस में दो मुख्य चरण होते हैं. पहले चरण में, तीसरे पक्ष के विज्ञापन सिस्टम को Google को क्रिएटिव उपलब्ध कराने की अनुमति मिलती है. साथ ही, Google के वीडियो इन्फ़्रास्ट्रक्चर में क्रिएटिव डालने के दौरान, उनकी प्रोग्रेस पर नज़र रखने की सुविधा भी मिलती है. क्रिएटिव डालने के बाद, आइडेंटिफ़ायर को विज्ञापन सिस्टम में वापस भेज दिया जाता है.

दूसरे चरण में, विज्ञापन सिस्टम उन आइडेंटिफ़ायर को लेता है और उन्हें सबमिट किए गए क्रिएटिव का रेफ़रंस देने वाले वीएएसटी दस्तावेज़ों में शामिल करता है. इसके लिए, Universal Ad ID (VAST 4.0+) या "UniversalAdId" टाइप के क्रिएटिव एक्सटेंशन का इस्तेमाल किया जाता है. जब डीएआई या YouTube में फ़ैसला लेने के समय, विज्ञापन सिस्टम से कोई VAST दस्तावेज़ मिलता है, तो क्रिएटिव सिस्टम VAST से उन आइडेंटिफ़ायर को निकालता है और Google वीडियो इन्फ़्रास्ट्रक्चर से सही क्रिएटिव फ़ेच करता है, ताकि उसे चलाया जा सके.

मीडिया से जुड़ी ज़रूरी शर्तें

एपीआई को सबमिट किए गए क्रिएटिव मीडिया को इन शर्तों को पूरा करना चाहिए, ताकि यह पक्का किया जा सके कि सिस्टम इसे सही तरीके से प्रोसेस कर सके.

मीडिया टाइप

Google, इन मीडिया टाइप को स्वीकार करता है. सबमिट करने पर, किसी भी अन्य तरह के मीडिया को अस्वीकार किया जा सकता है.

  • video/mp4
  • video/webm
  • video/quicktime
  • video/avi
  • video/mpeg
  • video/x-flv
  • flv-application/octet-stream
  • application/octet-stream
  • video/3gpp
  • video/ogg
  • audio/mp4
  • audio/mpeg

मीडिया प्रॉपर्टी

सबमिट किए गए मीडिया को इन शर्तों को पूरा करना होगा:

  • मीडिया में कम से कम एक ऑडियो या वीडियो ट्रैक होना चाहिए.
  • मीडिया की अवधि सही होनी चाहिए. कुछ मिनट से ज़्यादा का न हो.
  • मीडिया में ऑडियो या वीडियो की अवधि एक सेकंड से ज़्यादा होनी चाहिए.
  • अगर मीडिया में ऑडियो है, तो उसमें स्टैंडर्ड ऑडियो चैनल कॉन्फ़िगरेशन होना चाहिए. जैसे, मोनो, स्टीरियो या सराउंड साउंड.

डेटा डालने के लिए क्रिएटिव सबमिट करना

डेटा डालने की प्रोसेस का फ़्लो डायग्राम

  1. तीसरे पक्ष का विज्ञापन सिस्टम, वीडियो क्रिएटिव इंजेस्ट एपीआई को क्रिएटिव से जुड़ी मीडिया फ़ाइलों की सूची के साथ एचटीटीपी अनुरोध भेजता है.
  2. वीडियो क्रिएटिव इंजेस्ट एपीआई, दी गई सूची में से सबसे अच्छी क्वालिटी का क्रिएटिव चुनता है और उसे सीडीएन से डाउनलोड करता है.
  3. वीडियो क्रिएटिव इंजेस्ट एपीआई, डाउनलोड किए गए क्रिएटिव को Google वीडियो इन्फ़्रास्ट्रक्चर में डालता है. इससे, यह YouTube और डीआई (डिजिटल ऐडवांसमेंट) प्रॉडक्ट, दोनों के लिए उपलब्ध हो जाता है.
  4. क्रिएटिव की स्थिति के साथ, तीसरे पक्ष के विज्ञापन सिस्टम को Pub/Sub सूचना भेजी जाती है. सूचना से पता चलेगा कि YouTube और डीआई, दोनों के लिए ट्रैक अपलोड हो गया है या नहीं. अगर क्रिएटिव लोड नहीं हो पाता है, तो सूचना में इसकी वजह बताई जाएगी.

क्रिएटिव सबमिट करते समय इन दिशा-निर्देशों का पालन करें.

पुष्टि करना

आपको Google Cloud सेवा खाते का इस्तेमाल करके, एपीआई को ऐक्सेस करना होगा. इंटिग्रेशन के समय, Google को खाते की जानकारी देनी होगी, ताकि उसे अनुमति मिल सके.

creativeingestion@google.com के ज़रिए Google को खाते की जानकारी देने के बाद, एपीआई एंडपॉइंट और सूचनाएं पब्लिश करने के लिए इस्तेमाल किए जाने वाले Cloud PubSub विषयों का ऐक्सेस दिया जाएगा.

पुष्टि की प्रक्रिया शुरू करने के लिए, यह तरीका अपनाएं:

  1. Google Cloud खाता बनाएं.
  2. DAI API को अनुरोध भेजने के लिए, खाते के साथ एक प्रोजेक्ट सेट अप करें.
  3. प्रोजेक्ट में, बाईं ओर मौजूद IAM और एडमिन टैब पर जाएं और नया सेवा खाता बनाएं. अनुरोध, सेवा खाते का इस्तेमाल करके भेजे जाते हैं.
  4. PubSub API चालू करें और एक यूनीक पार्टनर सूचना टॉपिक बनाएं. इस टॉपिक पर, एपीआई डेटा डालने की सफलता और विफलता की सभी सूचनाएं पब्लिश करता है.

    अगर आपने डोमेन पर पाबंदी लगाने के लिए बनी संगठन की नीति बनाई है, तो आपको अनुमति वाले ग्राहकों की सूची में Google ग्राहक आईडी जोड़ना होगा. आईडी पाने के लिए, creativeingestion@google.com से संपर्क करें. ऐसा करने के बाद, अनुमति वाली ग्राहक सूचियों (एपीआई का ग्राहक आईडी) से प्रिंसिपल (हमारा रोबोट खाता) को IAM नीतियों (PubSub पब्लिशर) में जोड़ा जा सकता है.

    विषय में video-creative-library-discovery@system.gserviceaccount.com को Pub/Sub पब्लिशर के तौर पर जोड़ें.

  5. एपीआई के साथ इस जानकारी को रजिस्टर करने के लिए, सेवा खाते के ईमेल पते और PubSub विषय के साथ creativeingestion@google.com डालें.

  6. खाते को सेवा उपभोक्ता के तौर पर जोड़ने के बाद, DAI API को चालू करें.

  7. एपीआई को ऐक्सेस करने के लिए अपने क्रेडेंशियल सेट करने के लिए:

    • सेवा खाते से क्रेडेंशियल डाउनलोड करना: आईएएम और एडमिन टैब के सेवा खाते सेक्शन में, सेवा खाते पर क्लिक करें. इसके बाद, कुंजी बनाएं पर क्लिक करके क्रेडेंशियल सेव करें.

    • अपने एपीआई कॉलर की पुष्टि करें. GOOGLE_APPLICATION_CREDENTIALS को JSON फ़ाइल के पाथ पर सेट करें. सामान्य भाषाओं में gRPC क्लाइंट की पुष्टि करने के लिए, कोड के उदाहरण देखें.

क्रिएटिव डालना

जब भी पार्टनर के विज्ञापन सिस्टम में कोई नया क्रिएटिव उपलब्ध होता है, तो पार्टनर के सिस्टम को क्रिएटिव को Creative Ingest API में सबमिट करना चाहिए.

जब वीडियो इन्फ़्रास्ट्रक्चर में लोड करने के लिए, Google को नए क्रिएटिव सबमिट किए जाते हैं, तो विज्ञापन सिस्टम से जनरेट किए गए VAST दस्तावेज़ में शामिल वही क्रिएटिव डेटा दिया जाना चाहिए. इससे यह पक्का होता है कि Google में क्रिएटिव को पहले से डालने का व्यवहार, विज्ञापन के जवाब में पहली बार क्रिएटिव मिलने पर क्रिएटिव लोड करने के व्यवहार जैसा ही हो.

सबमिट किए गए हर क्रिएटिव से, सर्वर पर लंबे समय तक चलने वाला डेटा डालने का ऑपरेशन शुरू होता है. इस ऑपरेशन के स्टेटस के बारे में क्वेरी की जा सकती है. प्रोसेस पूरी होने के बाद, सिस्टम में क्रिएटिव रिसॉर्स बन जाता है. क्रिएटिव सबमिट करने के जवाब में, अनुरोध के नतीजे में हुई कार्रवाई का आईडी होता है. ऑपरेशन के बाद मिलने वाले आईडी को Cloud PubSub की सूचनाओं में शामिल किया जाता है. ये सूचनाएं, ऑपरेशन पूरा होने के बाद सबमिट किए गए ओरिजनल क्रिएटिव को मैप करने के लिए भेजी जाती हैं. ऑपरेशन आईडी का इस्तेमाल, किसी भी समय ऑपरेशन की प्रोग्रेस देखने के लिए भी किया जा सकता है.

क्रिएटिव के अनुरोध

डेटा को एपीआई में प्रोटोकॉल बफ़र या JSON ऑब्जेक्ट के तौर पर भेजा जाता है. gRPC का इस्तेमाल करके भेजे गए प्रोटोकॉल बफ़र का सुझाव दिया जाता है, क्योंकि ये PubSub सूचनाओं को इस्तेमाल करने के लिए ज़रूरी हैं. साथ ही, रिस्पॉन्स में google.protobuf.Any फ़ील्ड की वजह से, JSON को अनमार्शल करने में और भी समस्याएं आती हैं.

क्रिएटिव रिस्पॉन्स

अनुरोध पूरा होने पर, सर्वर अनुरोध के टाइप के आधार पर, प्रोटोकॉल बफ़र रिस्पॉन्स या JSON रिस्पॉन्स दिखाता है. जवाब में, डेटा डालने के लिए नए बनाए गए ऑपरेशन का नाम और ऑपरेशन की जानकारी शामिल होती है.

शुरुआती सबमिट करने पर, हो सकता है कि कार्रवाई से जुड़ा कुछ मेटाडेटा खाली हो और नतीजा मौजूद न हो. प्रोसेस पूरी होने के बाद, नतीजे में क्रिएटिव रिसॉर्स (या गड़बड़ी) दिखती है. साथ ही, मेटाडेटा में डेटा डालने की स्थिति की जानकारी होती है.

ध्यान दें कि मेटाडेटा को Any प्रोटो से CreateCreativeOperationMetadata प्रोटो में अनमार्शल किया जाना चाहिए. साथ ही, अगर जवाब मौजूद है, तो उसे Creative प्रोटो में अनमार्शल किया जाना चाहिए.

एपीआई को ऐक्सेस करने के लिए क्लाइंट लाइब्रेरी

एपीआई के साथ इंटिग्रेट करने के लिए, यह तरीका अपनाएं:

  1. प्रोटोकॉल बफ़र डिपेंडेंसी डाउनलोड करें और पूरे google फ़ोल्डर को अपनी src डायरेक्ट्री में ले जाएं. Google Cloud App Engine का इस्तेमाल करने पर, इसे छोड़ा जा सकता है.
  2. proto फ़ाइल से gRPC कोड जनरेट करने के लिए, protoc प्लग इन का इस्तेमाल करें. साथ ही, जनरेट किए गए कोड को सही डायरेक्ट्री में डालें.
  3. PubSub सूचना में दिखाए गए प्रोटो के लिए, एक नई प्रोटो फ़ाइल बनाएं. इसके बाद, प्रोटो से कोड जनरेट करने के लिए, पिछले चरण को दोहराएं.
  4. एपीआई से अनुरोध करने के लिए, gRPC का इस्तेमाल करें:

    1. इन स्कोप के साथ डिफ़ॉल्ट क्रेडेंशियल पाएं:

    https://www.googleapis.com/auth/video-ads,

    https://www.googleapis.com/auth/pubsub

    1. क्रिएटिव डालने की सुविधा को अनुरोध भेजें.
    • डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल करके, dai.googleapis.com:443 से कनेक्ट करें.
    • gRPC प्रोटो-जनरेट किए गए कोड का इस्तेमाल करके, क्रिएटिव डालने की सेवा के लिए क्लाइंट स्टब बनाएं.
    • क्लाइंट स्टब का इस्तेमाल करके CreateCreative को कॉल करें.

    इसके अलावा, लंबे समय तक चलने वाले ऑपरेशन के gRPC कोड का इस्तेमाल करके, ऑपरेशंस सेवा के लिए स्टब बनाएं. यह कोड, दूसरे चरण में डाउनलोड की गई googleapis डायरेक्ट्री में शामिल होता है. इसका इस्तेमाल, किसी दिए गए ऑपरेशन (GetOperation) की स्थिति जानने के लिए किया जा सकता है.

  5. सूचनाओं के लिए PubSub देखें:

    1. PubSub सेवा से कनेक्ट करने के लिए, PubSub क्लाइंट लाइब्रेरी या gRPC का इस्तेमाल करें. साथ ही, दिए गए विषय पर पब्लिश की गई PubSub सूचनाओं के लिए पोल करें.

    2. चौथे चरण में, PubSub मैसेज को प्रोटो में अनमार्शल करें.

    3. जब भी CreateCreative, GetOperation या PubSub सूचना के कॉल से, लंबे समय तक चलने वाला कोई ऑपरेशन वापस आता है, तो google.protobuf.Any प्रोटो से discovery.proto में मेटाडेटा को CreateCreativeOperationMetadata में और किसी भी जवाब को discovery.proto में Creative में अनमार्शल करें.

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)
}

वीडियो चलाने के दौरान क्रिएटिव लुकअप

क्रिएटिव लुकअप प्रोसेस का फ़्लो डायग्राम

  1. उपयोगकर्ता, YouTube या डीआई (डिजिटल ऐडवांस इंटिग्रेशन) में कॉन्टेंट देखने का अनुरोध करता है.
  2. YouTube / डीएआई, कॉन्टेंट में विज्ञापन डालने के लिए, तीसरे पक्ष के विज्ञापन सिस्टम से वीएएसटी रिस्पॉन्स पाता है.
  3. वापस मिले विज्ञापनों को, पहले डाले गए क्रिएटिव से मैप किया जाता है. ये क्रिएटिव, चलाने के लिए तैयार होते हैं. इन्हें Google वीडियो इन्फ़्रास्ट्रक्चर से फ़ेच किया जाता है और उपयोगकर्ता के लिए चलाया जाता है.

पार्टनर के बदले गए VAST दस्तावेज़

जब क्रिएटिव को Google वीडियो इन्फ़्रास्ट्रक्चर में लोड करने के बाद, विज्ञापन सिस्टम से वीएएसटी रिस्पॉन्स मिलता है, तो दस्तावेज़ में प्रोसेस किए गए क्रिएटिव का रेफ़रंस होना चाहिए. VAST दस्तावेज़ में किसी क्रिएटिव के लिए मीडिया फ़ाइलें शामिल की जानी चाहिए. हालांकि, इस बात की कोई गारंटी नहीं है कि सिस्टम इन मीडिया फ़ाइलों का इस्तेमाल करेगा.

प्रोसेस किए गए क्रिएटिव को VAST दस्तावेज़ में रेफ़र करने के दो तरीके हैं: VAST 4+ दस्तावेज़ में नया UniversalAdId एलिमेंट जोड़ना या कस्टम एक्सटेंशन जोड़ना.

यूनिवर्सल विज्ञापन आईडी

वीडियो क्रिएटिव इंजेस्ट एपीआई से मिला gvRegistryID, एक यूनिवर्सल और सार्वजनिक आईडी होता है. इसका इस्तेमाल, कई विज्ञापन सिस्टम में वीडियो क्रिएटिव की खास पहचान करने के लिए किया जाता है. इस आईडी को विज्ञापन सिस्टम के VAST 4+ दस्तावेज़ों में जोड़ा जाना चाहिए, ताकि जब YouTube या डीएआई को कोई VAST दस्तावेज़ मिले, तो आईडी का इस्तेमाल करके, मूल रूप से सबमिट किए गए क्रिएटिव को मैप किया जा सके.

विज्ञापन सिस्टम को अपने VAST 4+ दस्तावेज़ों में, क्रिएटिव नोड के नीचे एक नया UniversalAdId एलिमेंट जोड़ना चाहिए. idRegistry एट्रिब्यूट की वैल्यू "googlevideo" पर सेट होनी चाहिए. साथ ही, यह वैल्यू, प्रोसेस किए गए क्रिएटिव की सूचना के स्टेटस में दी गई वैल्यू होनी चाहिए.

यहां VAST 4 दस्तावेज़ का एक सैंपल दिया गया है, जिसमें नया यूनिवर्सल विज्ञापन आईडी जोड़ा गया है:

<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 Ad ID एलिमेंट को सिर्फ़ VAST 4.0 में पेश किया गया था. इसलिए, 4.0 से पहले के वर्शन वाले VAST दस्तावेज़ों में उसी डेटा को दिखाने के लिए, कस्टम एक्सटेंशन की ज़रूरत होती है. ऐसा करने के लिए, VAST स्पेसिफ़िकेशन के Creative एलिमेंट में CreativeExtension एलिमेंट का इस्तेमाल किया जाता है.

नया एक्सटेंशन एक सामान्य एक्सटेंशन है. इसे चालू करने पर, किसी भी यूनिवर्सल विज्ञापन आईडी की वैल्यू अपने-आप भर जाती है. इस खास मामले में, यूनिवर्सल विज्ञापन आईडी, googlevideo रजिस्ट्री से जुड़ा होगा और आईडी, google वीडियो आईडी होगा.

<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>