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

הפעלת שידורים חיים שנרשמו באמצעות Google Cloud Video Stitcher API

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

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

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

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

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

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

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

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

OAUTH_TOKEN

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

הקוד של הרשת

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

מזהה ההגדרה של השידור החי
מזהה ההגדרה של השידור החי שציינתם כשייצרתם את האירוע בשידור חי: LIVE_CONFIG_ID
מפתח של נכס מותאם אישית
מפתח הנכס המותאם אישית של Ad Manager שנוצר במהלך יצירת הגדרה לאירוע בשידור חי באמצעות Video Stitcher API: CUSTOM_ASSET_KEY

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

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

בקשה לשידור חי

כדי להחליף את זרם הדוגמה בשידור חי של Cloud Video Stitcher, משתמשים בפונקציה sdk.createVideoStitcherLiveStreamRequest(). אחרי שהסשן של DAI מתחיל, אפשר להשתמש בממשק המשתמש של Google Ad Manager כדי לאתר את הסשנים שנוצרו של DAI למטרות מעקב וניפוי באגים.

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

דוגמה

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.testVideoStitcherLiveStream = {
      title: "Video Stitcher Livestream",
      customAssetKey: "CUSTOM_ASSET_KEY",
      networkCode: "NETWORK_CODE",
      liveConfigId: "LIVE_CONFIG_ID",
      region: "LOCATION",
      projectNumber: "PROJECT_NUMBER",
      oAuthToken: "OAUTH_TOKEN",
      apiKey: "",
      type: "stitcherLive"
    }
    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.testVideoStitcherLiveStream
    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 = "stitcherLive"
      request = sdk.CreateVideoStitcherLiveStreamRequest(
        streamData.customAssetKey,
        streamData.networkCode,
        streamData.liveConfigId,
        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

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

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

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

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

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


request = sdk.createVideoStitcherLiveStreamRequest(customAssetKey, networkCode, liveConfigId, 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)

הוספת הפסקה למודעות

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

המודעה מוצגת מיד אחרי שההפסקה למודעות מוכנסת.

הסרת המשאבים

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

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