תחילת העבודה עם IMA DAI SDK

בחירת פתרון DAI שמעניין אתכם

הטמעת מודעות דינמיות (DAI) בשירות מלא

מדריך זה מדגים איך להפעיל שידור DAI באמצעות IMA CAF DAI SDK. אם אתם רוצים לראות שילוב לדוגמה מלא או לעקוב אחריו, תוכלו להוריד את הדוגמה.

לפני השימוש במדריך הזה, הקפד להכיר את הפרוטוקול WebReceiver של Chromecast Application Framework. המדריך מסביר ידע בסיסי במושגים של מקלטי CAF, כמו יירוט הודעות ואובייקטים של mediaInformation, וכן ידע בשימוש בכלי לפקודות ובקרה של Cast כדי לחקות שולח CAF.

כדי להשתמש ב-IMA DAI, נדרש חשבון Ad Manager 360. אם יש לכם חשבון Ad Manager, תוכלו לפנות למנהל החשבון כדי לקבל פרטים נוספים. למידע על ההרשמה ל-Ad Manager, היכנסו למרכז העזרה של Ad Manager.

למידע על שילוב עם פלטפורמות אחרות או על השימוש ב-IMA SDK בצד הלקוח, ראו ערכות SDK של מודעות מדיה אינטראקטיביות.

סקירה כללית של הטמעת מודעות דינמיות לרשת החיפוש (CAF)

כדי להטמיע הטמעת מודעות דינמיות באמצעות IMA CAF DAI SDK יש צורך בשני רכיבים עיקריים, כפי שמתואר במדריך הזה:

  • StreamRequest: אובייקט שמגדיר בקשה לשידור לשרתי הפרסום של Google. יש שתי גרסאות עיקריות של בקשות לשידור:

    • LiveStreamRequest: מציין מפתח נכס, מפתח API אופציונלי וכן פרמטרים אופציונליים נוספים.
    • VODStreamRequest: מציין את מזהה מקור התוכן, מזהה וידאו, מפתח API אופציונלי, וכן פרמטרים אופציונליים נוספים.
  • StreamManager: אובייקט שמטפל בתקשורת בין שידור הווידאו לבין ה-IMA DAI SDK, למשל הפעלת פינגים למעקב והעברת אירועים משידור אל בעל התוכן הדיגיטלי.

דרישות מוקדמות

הגדרת האובייקטים של MediaInfo של השולח

תחילה, הגדר את אובייקט MediaInfo של אפליקציית השולח כך שיכלול את השדות הבאים:

contentId מזהה ייחודי לפריט המדיה הזה
contentUrl כתובת ה-URL של השידור החלופי שייטען אם בקשת ה-DAI StreamRequest תיכשל מכל סיבה שהיא
streamType בשידורים חיים צריך להגדיר את הערך הזה כ-'LIVE'. עבור שידורי VOD, צריך להגדיר את הערך הזה כ-'BUFFERED'
customData assetKey שידורים חיים בלבד: מזהה את השידור החי לטעינה
contentSourceId רק סטרימינג ב-VOD. מזהה את פיד המדיה שמכיל את השידור המבוקש.
videoId רק סטרימינג ב-VOD. מזהה את השידור המבוקש בתוך פיד המדיה שצוין.
ApiKey מפתח API אופציונלי שנדרש כדי לאחזר את כתובת ה-URL של השידור מ-IMA DAI SDK
senderCanSkip ערך בוליאני שמאפשר לנמען לדעת אם למכשיר השולח יש אפשרות להציג לחצן דילוג, וכך להפעיל תמיכה במודעות שניתן לדלג עליהן

כדי להגדיר את הערכים האלה בכלי הבקרה והפקודה של Cast, לוחצים על הכרטיסייה Load Media (טעינת מדיה) ומגדירים את סוג בקשת הטעינה המותאמת אישית ל-LOAD. לאחר מכן, מחליפים את נתוני ה-JSON באזור הטקסט באחד מהאובייקטים הבאים של JSON:

שידור חי

{
  "media": {
    "contentId": "bbb",
    "contentUrl": "https://storage.googleapis.com/interactive-media-ads/media/bbb.m3u8",
    "streamType": "LIVE",
    "customData": {
      "assetKey": "sN_IYUG8STe1ZzhIIE_ksA",
      "ApiKey": "",
      "senderCanSkip": true
    }
  },
  "credentials": "testCredentials"
}

VOD

{
  "media": {
    "contentId": "tos",
    "contentUrl": "https://storage.googleapis.com/interactive-media-ads/media/tos.m3u8",
    "streamType": "BUFFERED",
    "customData": {
      "contentSourceId": "2548831",
      "videoId": "tears-of-steel",
      "ApiKey": "",
      "senderCanSkip": true
    }
  },
  "credentials": "testCredentials"
}

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

יצירת מקלט CAF בסיסי

בהתאם למדריך CAF SDK Basic Acceptr, צריך ליצור מקלט אינטרנט בסיסי.

קוד המקבל אמור להיראות כך:

<html>
<head>
  <script type="text/javascript"
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js">
  </script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    cast.framework.CastReceiverContext.getInstance().start();
  </script>
</body>
</html>

ייבוא של IMA DAI SDK והורדת מנהל הנגן

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

<html>
<head>
  <script type="text/javascript"
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
  <script src="//imasdk.googleapis.com/js/sdkloader/cast_dai.js"></script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    const castContext = cast.framework.CastReceiverContext.getInstance();
    const playerManager = castContext.getPlayerManager();

    castContext.start();
  </script>
</body>
</html>

הפעלה של IMA Stream Manager

מפעילים את Stream Manager ב-CAF DAI SDK.

<html>
<head>
  <script type="text/javascript"
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
  <script src="//imasdk.googleapis.com/js/sdkloader/cast_dai.js"></script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    const castContext = cast.framework.CastReceiverContext.getInstance();
    const playerManager = castContext.getPlayerManager();
    const streamManager = new google.ima.cast.dai.api.StreamManager();

    castContext.start();
  </script>
</body>
</html>

יצירת יירוט הודעות הטעינה

ב-CAF DAI SDK נעשה שימוש במיירט הודעות של CAF כדי לשלוח בקשות לשידור ולהחליף את כתובת ה-URL של התוכן בשידור ה-DAI הסופי. מיירט ההודעות קורא לפונקציה streamManager.requestStream(), שמטפל בהגדרת הפסקות למודעות, בבקשת השידור ובהחלפת contentURL הקיים.

יכול להיות רק מיירט אחד של הודעות טעינה, כך שאם האפליקציה שלכם דורשת שימוש במיירט, עליכם לשלב פונקציות מותאמות אישית באותה קריאה חוזרת (callback).

<html>
<head>
  <script type="text/javascript"
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
  <script src="//imasdk.googleapis.com/js/sdkloader/cast_dai.js"></script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    const castContext = cast.framework.CastReceiverContext.getInstance();
    const playerManager = castContext.getPlayerManager();
    const streamManager = new google.ima.cast.dai.api.StreamManager();

    const getStreamRequest = (request) => null;

    playerManager.setMessageInterceptor(
        cast.framework.messages.MessageType.LOAD, (request) => {
          return streamManager.requestStream(request, getStreamRequest(request))
              .then((request) => {
                this.broadcast('Stream request successful.');
                return Promise.resolve(request);
              })
              .catch((error) => {
                this.broadcast('Stream request failed.');
                return Promise.resolve(request);
              });
        });

    castContext.start();
  </script>
</body>
</html>

יצירת הבקשה לשידור

כדי להשלים את שילוב ה-CAF DAI, עליכם ליצור את בקשת השידור באמצעות הנתונים שנכללו באובייקט mediaInfo מהשולח.

<html>
<head>
  <script type="text/javascript"
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
  <script src="//imasdk.googleapis.com/js/sdkloader/cast_dai.js"></script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    const castContext = cast.framework.CastReceiverContext.getInstance();
    const playerManager = castContext.getPlayerManager();
    const streamManager = new google.ima.cast.dai.api.StreamManager();

    const getStreamRequest = (request) => {
      const imaRequestData = request.media.customData;
      let streamRequest = null;
      if (imaRequestData.assetKey) {
        // Live stream
        streamRequest = new google.ima.cast.dai.api.LiveStreamRequest();
        streamRequest.assetKey = imaRequestData.assetKey;
      } else if (imaRequestData.contentSourceId) {
        // VOD stream
        streamRequest = new google.ima.cast.dai.api.VODStreamRequest();
        streamRequest.contentSourceId = imaRequestData.contentSourceId;
        streamRequest.videoId = imaRequestData.videoId;
      }
      if (streamRequest && imaRequestData.ApiKey) {
        streamRequest.ApiKey = imaRequestData.ApiKey;
      }
      if (streamRequest && imaRequestData.senderCanSkip) {
        streamRequest.senderCanSkip = imaRequestData.senderCanSkip;
      }
      return streamRequest;
    };

    playerManager.setMessageInterceptor(
        cast.framework.messages.MessageType.LOAD, (request) => {
          return streamManager.requestStream(request, getStreamRequest(request))
              .then((request) => {
                return Promise.resolve(request);
              })
              .catch((error) => {
                this.broadcast('Stream request failed.');
                return Promise.resolve(request);
              });
        });

    castContext.start();
  </script>
</body>
</html>

עכשיו אפשר לבקש ולהפעיל שידורי DAI באמצעות CAF DAI SDK של Google. למידע נוסף על תכונות SDK מתקדמות יותר, מומלץ לקרוא את המדריכים האחרים או להוריד את אפליקציות המקלט לדוגמה.