שימוש ב-IMA DAI SDK ב-Roku

הפעלת סטרימינג של VOD שנרשם ב-Google Cloud Video Stitcher API

במדריך הזה נדגים איך להשתמש ב-IMA DAI SDK ל-Roku כדי לבקש ולהפעיל סשן של סטרימינג VOD ב-Google Cloud.

המדריך הזה מרחיב את הדוגמה הבסיסית מהמדריך למתחילים בנושא IMA DAI.

למידע על שילוב עם פלטפורמות אחרות או על שימוש ב-IMA SDKs בצד הלקוח, אפשר לעיין במאמר בנושא Interactive Media Ads SDKs.

כדי לצפות בדוגמה של שילוב שהושלם או לעקוב אחריו, אפשר להוריד את הדוגמה של Cloud Video Stitcher.

הגדרת פרויקט ב-Google Cloud

מזינים את המשתנים הבאים לשימוש ב-IMA SDK:

מיקום
‫
האזור ב-Google Cloud שבו נוצרה ההגדרה של ה-VOD: LOCATION
מספר הפרויקט
מספר הפרויקט ב-Google Cloud שבו נעשה שימוש ב-Video Stitcher API: PROJECT_NUMBER
טוקן OAuth

אסימון OAuth לטווח קצר של חשבון שירות עם תפקיד המשתמש Video Stitcher:

OAUTH_TOKEN

מידע נוסף על יצירת טוקנים של OAuth לזמן קצר אפשר לעשות שימוש חוזר בטוקן OAuth בכמה בקשות, כל עוד תוקף הטוקן לא פג.

הקוד של הרשת

קוד הרשת ב-Ad Manager לבקשת הצגת מודעות: NETWORK_CODE

מזהה ההגדרה של VOD

מזהה ההגדרה של ה-VOD בסטרימינג של ה-VOD: VOD_CONFIG_ID

מידע נוסף על יצירת מזהה הגדרות VOD זמין במדריך Cloud stitching create a VOD config.

הגדרת הדוגמה הבסיסית

מורידים ומריצים את IMA Roku DAI Basic Example. לוחצים על לחצן ההפעלה בנגן הווידאו כדי להתחיל את הסרט הקצר Tears of Steel, שכולל הפסקות לפרסומות כל 30 שניות.

בקשה לסטרימינג של תוכן על פי דרישה (VOD)

כדי להחליף את זרם הדוגמה בזרם ה-VOD של המודעה, משתמשים בפונקציה sdk.createVideoStitcherVodStreamRequestWithVodConfig(). אתם יכולים להשתמש בממשק המשתמש של Google Ad Manager כדי לאתר את סשנים של DAI שנוצרו לצורך מעקב וניפוי באגים.

בדוגמה הקיימת יש משפטי תנאי שקובעים אם ליצור תוכן וידאו על פי דרישה StreamRequest או שידור חי StreamRequest. מוסיפים נתיב חדש כדי ליצור VOD של Cloud Video Stitcher StreamRequest באמצעות הערכים שנוצרו קודם.

הנה דוגמה:

basic_example/components/MainScene.xml

<?xml version="1.0" encoding="utf-8" ?>
<component name="MainScene" extends="Scene" initialFocus = "myVideo">
<script type="text/brightscript">
<![CDATA[
  function init()
    m.video = m.top.findNode("myVideo")
    m.video.notificationinterval = 1
    m.testLiveStream = {
      title: "Livestream",
      assetKey: "c-rArva4ShKVIAkNfy6HUQ",
      apiKey: "",
      type: "live"
    }
    m.testVodStream = {
      title: "VOD stream"
      contentSourceId: "2548831",
      videoId: "tears-of-steel",
      apiKey: "",
      type: "vod"
    }
    m.testVideoStitcherVodStream = {
      title: "My Stream Title",
      vodConfigId: "VOD_CONFIG_ID",
      networkCode: "NETWORK_CODE",
      region: "LOCATION",
      projectNumber: "PROJECT_NUMBER",
      oAuthToken: "OAUTH_TOKEN",
      apiKey: "",
      title: "Video Stitcher VOD Stream",
      type: "stitcherVod"
    }

    loadImaSdk()
  end function

  function loadImaSdk() as void
    m.sdkTask = createObject("roSGNode", "imasdk")
    m.sdkTask.observeField("sdkLoaded", "onSdkLoaded")
    m.sdkTask.observeField("errors", "onSdkLoadedError")

    ' Set this to the stream data you would like to play.
    selectedStream = m.testVideoStitcherVodStream
    m.videoTitle = selectedStream.title
    m.sdkTask.streamData = selectedStream

    m.sdkTask.observeField("urlData", "urlLoadRequested")
    m.sdkTask.video = m.video
    ' Setting control to run starts the task thread.
    m.sdkTask.control = "RUN"
  end function

basic_example/components/Sdk.xml

Sub loadStream()
  sdk = m.sdk
  sdk.initSdk()
  setupVideoPlayer()

  request = {}
  streamData = m.top.streamData
  if streamData.type = "live"
    request = sdk.CreateLiveStreamRequest(streamData.assetKey, streamData.apiKey)
  else if streamData.type = "vod"
    request = sdk.CreateVodStreamRequest(streamData.contentSourceId, streamData.videoId, streamData.apiKey)
  else if streamData.type = "stitcherVod"
    request = sdk.createVideoStitcherVodStreamRequest(
      streamData.vodConfigId,
      streamData.networkCode,
      streamData.region,
      streamData.projectNumber,
      streamData.oAuthToken
    )
  else
    request = sdk.CreateStreamRequest()
  end if

  request.player = m.player
  request.adUiNode = m.top.video

  requestResult = sdk.requestStream(request)
  If requestResult <> Invalid
    print "Error requesting stream ";requestResult
  Else
    m.streamManager = Invalid
    While m.streamManager = Invalid
      sleep(50)
      m.streamManager = sdk.getStreamManager()
    End While
    If m.streamManager = Invalid or m.streamManager["type"] <> Invalid or m.streamManager["type"] = "error"
      errors = CreateObject("roArray", 1, True)
      print "error ";m.streamManager["info"]
      errors.push(m.streamManager["info"])
      m.top.errors = errors
    Else
      m.top.streamManagerReady = True
      addCallbacks()
      m.streamManager.start()
    End If
  End If
End Sub

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

(אופציונלי) הוספת אפשרויות של סשן סטרימינג

כדי להתאים אישית את בקשת הסטרימינג, מוסיפים אפשרויות הפעלה כדי לשנות את הגדרת ברירת המחדל של Cloud Video Stitcher API. לשם כך, מאכלסים את הפרמטר videoStitcherSessionOptions באובייקט StreamRequest.

אם תספקו אפשרות לא מזוהה, Cloud Video Stitcher API יגיב עם שגיאת HTTP 400. אפשר לקבל עזרה במדריך לפתרון בעיות.

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


request = sdk.createVideoStitcherVodStreamRequestWithVodConfig(vodConfigId, networkCode, region, projectNumber, oAuthToken)

request.player = m.player
request.adUiNode = m.top.video

' The following session options are examples. Use session options
' that are compatible with your video stream.
sessionOptions = {
  "manifestOptions": {
    "bitrateOrder": "ascending"
  }
}
request.videoStitcherSessionOptions = sessionOptions

requestResult = sdk.requestStream(request)

הסרת המשאבים

אחרי שסיימתם לארח בהצלחה סטרימינג של VOD באמצעות Google Cloud Video Stitcher API ולבקש אותו באמצעות IMA DAI SDK ל-Roku, חשוב לנקות את כל משאבי ההצגה.

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