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

בחירת פתרון ה-DAI הרצוי

שירות DAI מלא

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

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

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

מידע על שילוב עם פלטפורמות אחרות או על שימוש ב-SDK של IMA בצד הלקוח זמין במאמר ערכות SDK של מודעות Interactive Media.

סקירה כללית על DAI ב-CAF

כדי להטמיע DAI באמצעות 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:

LIVE

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

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

יצירת מתווך הודעות העומס

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