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

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

DAI בשירות מלא

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

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

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

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

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

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

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

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

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

הגדרת האובייקטים 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 בסיסי למקלט, יוצרים מקלט אינטרנט בסיסי.

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

<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 ומקבלים את Player Manager

מוסיפים תג סקריפט כדי לייבא את 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

מפעילים את מנהל הסטרימינג של 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 הקיים.

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

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