با IMA DAI SDK شروع کنید

راه حل DAI مورد علاقه خود را انتخاب کنید

پاد در حال ارائه DAI

IMA SDK ادغام تبلیغات چندرسانه ای را در وب سایت ها و برنامه های شما ساده می کند.

IMA SDK می‌تواند از هر سرور تبلیغاتی سازگار با VAST آگهی درخواست کند و پخش آگهی را در برنامه‌های شما مدیریت کند.

با IMA DAI SDK، برنامه‌ها درخواست پخش جریانی برای آگهی و ویدیوی محتوا برای محتوای VOD یا محتوای زنده ارائه می‌کنند. سپس SDK یک جریان ویدیوی ترکیبی را برمی‌گرداند، به طوری که نیازی به مدیریت جابجایی بین آگهی و ویدیوی محتوا در برنامه خود ندارید.

این راهنما نحوه پخش جریانی Live DAI Pod Serving را با استفاده از IMA DAI SDK برای CAF نشان می‌دهد.

قبل از استفاده از این راهنما، با پروتکل گیرنده وب Chromecast Application Framework آشنا شوید. این راهنما درک پایه ای از مفاهیم گیرنده CAF، مانند رهگیرهای پیام و اشیاء اطلاعات رسانه ، و آشنایی با استفاده از ابزار فرمان و کنترل Cast ، برای تقلید از فرستنده CAF را فرض می کند.

برای استفاده از سرویس غلاف IMA DAI، باید با شریک سرویس دهی پاد کار کنید و باید یک حساب Ad Manager 360 Advanced داشته باشید. اگر حساب Ad Manager دارید، برای جزئیات بیشتر با مدیر حساب خود تماس بگیرید. برای کسب اطلاعات در مورد ثبت نام در Ad Manager، از مرکز راهنمای Ad Manager دیدن کنید.

برای کسب اطلاعات در مورد ادغام با سایر پلتفرم‌ها یا استفاده از کیت توسعه نرم‌افزارهای سمت سرویس گیرنده IMA، به کیت‌های توسعه نرم‌افزار تبلیغات رسانه‌ای تعاملی مراجعه کنید.

نمای کلی سرویس IMA DAI Pod

اجرای سروینگ پاد با استفاده از IMA CAF DAI SDK شامل دو جزء اصلی است که در این راهنما نشان داده شده است:

  • StreamRequest : شیئی که یک درخواست جریان را به سرورهای تبلیغاتی Google تعریف می کند. درخواست ها یک کد شبکه، کلید دارایی سفارشی و یک کلید API اختیاری و همچنین سایر پارامترهای اختیاری را مشخص می کنند.
  • StreamManager : شی‌ای که ارتباط بین جریان ویدئو و IMA DAI SDK را کنترل می‌کند، مانند شلیک پینگ‌های ردیابی و ارسال رویدادهای جریان به ناشر.

پیش نیازها

  • یک حساب Cast Developer Console با دستگاه‌های آزمایشی ثبت‌شده.
  • یک برنامه گیرنده وب میزبانی شده که در Cast Developer Console شما ثبت شده است و می توان آن را برای میزبانی کد ارائه شده توسط این راهنما تغییر داد.
  • یک برنامه ارسال که برای استفاده از برنامه گیرنده وب شما پیکربندی شده است. برای اهداف این مثال، از ابزار Cast Command and Control به عنوان فرستنده خود استفاده کنید.

اشیاء MediaInfo فرستنده را پیکربندی کنید

ابتدا، شی MediaInfo برنامه فرستنده خود را طوری پیکربندی کنید که شامل فیلدهای زیر باشد:

رشته فهرست
contentId یک شناسه منحصر به فرد برای این آیتم رسانه ای.

CONTENT_ID

contentUrl اختیاری. از URL جریان پشتیبان تهیه کنید تا اگر جریان DAI بارگیری نشد، پخش شود.

BACKUP_STREAM_URL

contentType اختیاری. نوع Mimet از جریان های پشتیبان محتوا. فقط برای جریان های DASH مورد نیاز است.

CONTENT_STREAM_MIMETYPE

streamType رشته یا ثابت مورد استفاده برای این مقدار بر اساس پلت فرم فرستنده متفاوت است.
customData فیلد customData حاوی یک ذخیره کلید-مقدار از فیلدهای اضافی مورد نیاز است.
رشته فهرست
manifestUrl نشانی وب جریان ویدئو که توسط دستکاری کننده مانیفست شما یا شریک شخص ثالث ارائه شده است. باید قبل از درخواست، شناسه جریان ارائه شده توسط IMA DAI SDK را درج کنید. در این نمونه، نشانی وب مانیفست شامل یک جای‌بان، [[STREAMID]] است که قبل از درخواست، با شناسه جریان جایگزین می‌شود.

MANIFEST_URL

networkCode کد شبکه برای حساب Google Ad Manager 360 شما.

NETWORK_CODE

customAssetKey کلید دارایی سفارشی که رویداد سرویس پاد شما را در Google Ad Manager 360 شناسایی می‌کند. در برخی موارد، ممکن است این مورد را از دستکاری‌کننده مانیفست یا شریک سرویس‌دهی غلاف شخص ثالث دریافت کنید.

CUSTOM_ASSET_KEY

apiKey یک کلید API اختیاری برای بازیابی Stream ID از IMA DAI SDK.

API_KEY

در اینجا چند نمونه کد برای کمک به شروع کار آورده شده است:

وب

برای پیکربندی این مقادیر در فرستنده وب Cast، ابتدا یک شی MediaInfo با داده های مورد نیاز ایجاد کنید، سپس یک درخواست بارگذاری به گیرنده وب ارائه دهید.

// Create mediaInfo object
const mediaInfo = new chrome.cast.media.MediaInfo("CONTENT_ID");
mediaInfo.contentUrl = "BACKUP_STREAM_URL";
mediaInfo.contentType = "CONTENT_STREAM_MIMETYPE";
mediaInfo.streamType = chrome.cast.media.StreamType.LIVE;
mediaInfo.customData = {
manifestUrl: "MANIFEST_URL",
networkCode: "NETWORK-CODE",
customAssetKey: "CUSTOM_ASSET_KEY",
apiKey: "API_KEY"
};

// Make load request to cast web receiver
const castSession = cast.framework.CastContext.getInstance().getCurrentSession();
const request = new chrome.cast.media.LoadRequest(mediaInfo);
castSession.loadMedia(request).then(
  () => { console.log('Load succeed'); },
  (errorCode) => { console.log('Error code: ' + errorCode); });

اندروید

برای پیکربندی این مقادیر در فرستنده وب Cast، ابتدا یک شی MediaInfo با داده های مورد نیاز ایجاد کنید، سپس یک درخواست بارگذاری به گیرنده وب ارائه دهید.

JSONObject customData = new JSONObject()?
  .put("manifestUrl", "MANIFEST_URL")
  .put("networkCode", "NETWORK-CODE")
  .put("customAssetKey", "CUSTOM_ASSET_KEY")
  .put("apiKey", "API_KEY");
MediaInfo mediaInfo = MediaInfo.Builder("CONTENT_ID")
  .setContentUrl("BACKUP_STREAM_URL")
  .setContentType("CONTENT_STREAM_MIMETYPE")
  .setStreamType(MediaInfo.STREAM_TYPE_LIVE)
  .setCustomData(customData)
  .build();

RemoteMediaClient remoteMediaClient = mCastSession.getRemoteMediaClient();
remoteMediaClient.load(new MediaLoadRequestData.Builder().setMediaInfo(mediaInfo).build());

iOS (Obj-C)

برای پیکربندی این مقادیر در فرستنده وب Cast، ابتدا یک شیء GCKMediaInformation با داده های مورد نیاز ایجاد کنید، سپس یک درخواست بارگذاری به گیرنده وب ارائه دهید.

NSURL url = [NSURL URLWithString:@"BACKUP_STREAM_URL"];
NSDictionary *customData = @{
  @"manifestUrl": @"MANIFEST_URL",
  @"networkCode": @"NETWORK-CODE",
  @"customAssetKey": @"CUSTOM_ASSET_KEY",
  @"apiKey": @"API_KEY"};
mediaInfoBuilder.customData = customData;

GCKMediaInformationBuilder *mediaInfoBuilder =
  [[GCKMediaInformationBuilder alloc] initWithContentID: @"CONTENT_ID"];
mediaInfoBuilder.contentURL = url;
mediaInfoBuilder.contentType = @"CONTENT_STREAM_MIMETYPE";
mediaInfoBuilder.streamType = GCKMediaStreamTypeLive;
mediaInfoBuilder.customData = customData;
self.mediaInformation = [mediaInfoBuilder build];

GCKRequest *request = [self.sessionManager.currentSession.remoteMediaClient loadMedia:self.mediaInformation];
if (request != nil) {
  request.delegate = self;
}

iOS (Swift)

برای پیکربندی این مقادیر در فرستنده وب Cast، ابتدا یک شیء GCKMediaInformation با داده های مورد نیاز ایجاد کنید، سپس یک درخواست بارگذاری به گیرنده وب ارائه دهید.

let url = URL.init(string: "BACKUP_STREAM_URL")
guard let mediaURL = url else {
  print("invalid mediaURL")
  return
}

let customData = [
  "liveConfigID": "MANIFEST_URL",
  "networkCode": "NETWORK-CODE",
  "customAssetKey": "CUSTOM_ASSET_KEY",
  "region": "API_KEY"
]

let mediaInfoBuilder = GCKMediaInformationBuilder.init(contentId: "CONTENT_ID")
mediaInfoBuilder.contentURL = mediaUrl
mediaInfoBuilder.contentType = @"CONTENT_STREAM_MIMETYPE"
mediaInfoBuilder.streamType = GCKMediaStreamType.Live
mediaInfoBuilder.customData = customData
mediaInformation = mediaInfoBuilder.build()

guard let mediaInfo = mediaInformation else {
  print("invalid mediaInformation")
  return
}

if let request = sessionManager.currentSession?.remoteMediaClient?.loadMedia
(mediaInfo) {
  request.delegate = self
}

ابزار CAC

برای پیکربندی این مقادیر در ابزار Cast Command and Control ، روی تب Load Media کلیک کنید و نوع درخواست بار سفارشی را روی LOAD تنظیم کنید. سپس داده های JSON را در قسمت متن با این JSON جایگزین کنید:

{
  "media": {
    "contentId": "CONTENT_ID",
    "contentUrl": "BACKUP_STREAM_URL",
    "contentType": ""CONTENT_STREAM_MIMETYPE"",
    "streamType": "LIVE",
    "customData": {
      "liveConfigID": "MANIFEST_URL",
      "networkCode": "NETWORK-CODE",
      "customAssetKey": "CUSTOM_ASSET_KEY",
      "oAuthToken": "API_KEY"
    }
  }
}

این درخواست بارگذاری سفارشی می تواند به گیرنده ارسال شود تا بقیه مراحل را آزمایش کند.

یک گیرنده اصلی CAF ایجاد کنید

همانطور که در راهنمای گیرنده وب سفارشی CAF SDK مشاهده می شود، یک گیرنده وب سفارشی ایجاد کنید.

کد گیرنده شما باید به شکل زیر باشد:

<html>
<head>
  <script
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js">
  </script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    // ...
  </script>
</body>
</html>

IMA DAI SDK را وارد کنید و Player Manager را دریافت کنید

یک برچسب اسکریپت برای وارد کردن IMA DAI SDK برای CAF به گیرنده وب خود، درست پس از بارگیری اسکریپت CAF اضافه کنید. در تگ اسکریپت، پیش از شروع گیرنده، زمینه گیرنده و مدیر پخش را به صورت ثابت ذخیره کنید.

<html>
<head>
  <script
      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 را راه اندازی کنید

IMA Stream Manager را راه اندازی کنید.

<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 منتقل شوند، درخواست پخش خود را در یک رهگیر پیام LOAD ایجاد کنید.

    const castContext = cast.framework.CastReceiverContext.getInstance();
    const playerManager = castContext.getPlayerManager();
    const streamManager = new google.ima.cast.dai.api.StreamManager();

    /**
     * Creates a livestream request object for a pod serving stream.
     * @param {!LoadRequestData} castRequest The request object from the cast sender
     * @return {StreamRequest} an IMA stream request
     */
    const createStreamRequest = (castRequest) => { /* ... */};

    /**
     * Initates a DAI stream request for the final stream manifest.
     * @param {!LoadRequestData} castRequest The request object from the cast sender
     * @return {Promise<LoadRequestData>} a promise that resolves to an updated castRequest, containing the DAI stream manifest
     */
    const createDAICastRequest = (castRequest) => {
        return streamManager.requestStream(castRequest, createStreamRequest(castRequest))
          .then((castRequestWithPodStreamData) => {
            console.log('Successfully made DAI stream request.');
            // ...
            return castRequestWithPodStreamData;
          })
          .catch((error) => {
            console.log('Failed to make DAI stream request.');
            // CAF will automatically fallback to the content URL
            // that it can read from the castRequest object.
            return castRequest;
          });
    };

    playerManager.setMessageInterceptor(
        cast.framework.messages.MessageType.LOAD, createDAICastRequest);

    castContext.start();

درخواست جریان را ایجاد کنید

تابع createStreamRequest را برای ایجاد یک جریان سرویس دهی بر اساس درخواست بارگذاری CAF تکمیل کنید.

    /**
     * Creates a livestream request object for a pod serving stream.
     * @param {!LoadRequestData} castRequest The request object from the cast sender
     * @return {StreamRequest} an IMA stream request
     */
    const createStreamRequest = (castRequest) => {

      const streamRequest = new google.ima.cast.dai.api.PodStreamRequest();
      const customData = castRequest.media.customData;

      streamRequest.customAssetKey = customData.customAssetKey;
      streamRequest.networkCode = customData.networkCode;
      streamRequest.apiKey = customData.apiKey;

      return streamRequest;
    };

URL محتوا را با نشانی وب مانیفست و شناسه جریان جایگزین کنید

اگر درخواست پخش شما موفقیت آمیز بود، از streamManager.getStreamId() برای بازیابی شناسه جریان استفاده کنید و آن را به جای [[STREAMID]] در manifestUrl خود وارد کنید. سپس، contentUrl موجود را با manifestUrl جدید جایگزین کنید تا CAF جریان زنده را با غلاف های تبلیغاتی دوخته شده پخش کند.

    /**
     * Initates a DAI stream request for the final stream manifest.
     * @param {!LoadRequestData} castRequest The request object from the cast sender
     * @return {Promise<LoadRequestData>} a promise that resolves to an updated castRequest, containing the DAI stream manifest
     */
    const createDAICastRequest = (castRequest) => {
        return streamManager.requestStream(castRequest, createStreamRequest(castRequest))
          .then((castRequestWithPodStreamData) => {
            console.log('Successfully made DAI stream request.');
            const media = castRequestWithPodStreamData.media;
                const manifestUrl = media.customData.manifestUrl || "";
                if (manifestUrl) {
                    console.log('Replacing the contentURL with the manifest URL and stream ID');
                    const streamId = streamManager.getStreamId();
                    castRequestWithPodStreamData.media.contentUrl = manifestUrl.replace('[[STREAMID]]', streamId);

            return castRequestWithPodStreamData;
          })
          .catch((error) => {
            console.log('Failed to make DAI stream request.');
            // CAF will automatically fallback to the content URL
            // that it can read from the castRequest object.
            return castRequest;
          });
    };

اکنون می‌توانید با Cast Application Framework و IMA DAI SDK برای CAF، استریم‌های سرویس پاد را درخواست و پخش کنید.