إنشاء فئة "مدير الإعلانات"
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
في الملف ads_manager.js، حدِّد فئة غلاف لـ IMA SDK StreamManager التي تُرسِل طلبات البث، وتحصل على بيان مجموعة إعلانات متسلسلة، وتستمع إلى أحداث بث IMA، وتمرِّر أحداث emsg إلى IMA SDK.
في الملف ads_manager.js، يضبط تطبيق HbbTV النموذجي الطرق التالية:
requestStream()
onStreamEvent()
onEmsgEvent()
loadAdPodManifest()
تهيئة مدير الإعلانات
يمكنك تهيئة فئة مدير الإعلانات وضبط أدوات الاستماع لأحداث بث IMA. في هذه المكالمة، اضبط معالج أحداث emsg باستخدام الطريقة VideoPlayer.setEmsgEventHandler().
/** * Wraps IMA SDK ad stream manager. * @param {!VideoPlayer} videoPlayer Reference an instance of the wrapper from * video_player.js. */varAdManager=function(videoPlayer){this.streamData=null;this.videoPlayer=videoPlayer;// Ad UI is not supported for HBBTV, so no 'adUiElement' is passed in the// StreamManager constructor.this.streamManager=newgoogle.ima.dai.api.StreamManager(this.videoPlayer.videoElement);this.streamManager.addEventListener([google.ima.dai.api.StreamEvent.Type.STREAM_INITIALIZED,google.ima.dai.api.StreamEvent.Type.ERROR,google.ima.dai.api.StreamEvent.Type.CLICK,google.ima.dai.api.StreamEvent.Type.STARTED,google.ima.dai.api.StreamEvent.Type.FIRST_QUARTILE,google.ima.dai.api.StreamEvent.Type.MIDPOINT,google.ima.dai.api.StreamEvent.Type.THIRD_QUARTILE,google.ima.dai.api.StreamEvent.Type.COMPLETE,google.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED,google.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED,google.ima.dai.api.StreamEvent.Type.AD_PROGRESS,google.ima.dai.api.StreamEvent.Type.PAUSED,google.ima.dai.api.StreamEvent.Type.RESUMED],this.onStreamEvent.bind(this),false);this.videoPlayer.setEmsgEventHandler(this.onEmsgEvent,this);};
أنشئ الطريقة AdManager.requestStream() لإنشاء عنصر PodStreamRequest باستخدام معرِّف شبكة "إدارة إعلانات Google" ومفتاح مواد العرض المخصّص للبث. اختبِر تطبيق HbbTV باستخدام نموذج بث مجموعة إعلانات DASH من IMA مع مَعلمات البث التالية:
معرِّف الشبكة: '21775744923'
مفتاح مواد العرض المخصّص: 'hbbtv-dash'
/** * Makes a pod stream request. * @param {string} networkCode The network code. * @param {string} customAssetKey The custom asset key. */AdManager.prototype.requestStream=function(networkCode,customAssetKey){varstreamRequest=newgoogle.ima.dai.api.PodStreamRequest();varsecretKey=getStreamSecretKeys();streamRequest.networkCode=networkCode;streamRequest.customAssetKey=customAssetKey;streamRequest.format='dash';if(secretKey.STREAM_CREATE_SECRET){varexpirationTime=Math.trunc(newDate().getTime()/1000)+3600;varparams={custom_asset_key:customAssetKey,exp:expirationTime,network_code:networkCode};streamRequest.authToken=this.generateAuthToken(params,secretKey.STREAM_CREATE_SECRET);debugView.log('AdsManager: make Auth-PodStreamRequest');}else{debugView.log('AdsManager: make PodStreamRequest without auth');}this.streamManager.requestStream(streamRequest);};
أنشئ الطريقة AdManager.onStreamEvent() للتعامل مع استجابة تطبيقك لأحداث بث IMA، وهي STREAM_INITIALIZED وAD_BREAK_STARTED وAD_BREAK_ENDED.
/** * Handles IMA playback events. * @param {!Event} event The event object. */AdManager.prototype.onStreamEvent=function(event){switch(event.type){// Once the stream response data is received, generate pod manifest url// for the video stream.casegoogle.ima.dai.api.StreamEvent.Type.STREAM_INITIALIZED:debugView.log('IMA SDK: stream initialized');this.streamData=event.getStreamData();break;casegoogle.ima.dai.api.StreamEvent.Type.ERROR:break;// Hide video controls while ad is playing.casegoogle.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED:debugView.log('IMA SDK: ad break started');this.adPlaying=true;this.adBreakStarted=true;break;// Show video controls when ad ends.casegoogle.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED:debugView.log('IMA SDK: ad break ended');this.adPlaying=false;this.adBreakStarted=false;break;// Update ad countdown timers.casegoogle.ima.dai.api.StreamEvent.Type.AD_PROGRESS:break;default:debugView.log('IMA SDK: '+event.type);break;}};
لتمرير معلومات حدث emsg إلى IMA، أنشئ الطريقة AdManager.onEmsgEvent() باستخدام الطريقة StreamManager.processMetadata(). تستدعي فئة مشغّل الفيديو هذه الطريقة باستخدام الطريقة VideoPlayer.setEmsgEventHandler().
/** * Callback on Emsg event. * Instructs IMA SDK to fire back VAST events accordingly. * @param {!Event} event The event object. */AdManager.prototype.onEmsgEvent=function(event){vardata=event.event.messageData;varpts=event.event.calculatedPresentationTime;if((datainstanceofUint8Array) && data.byteLength > 0){this.streamManager.processMetadata('ID3',data,pts);}};
أنشئ الطريقة AdManager.loadAdPodManifest() لتحميل بيان مجموعة الإعلانات المتسلسلة مسبقًا باستخدام مشغّل الفيديو. أنشئ عنوان URL لبيان مصادق عليه باستخدام الـ
بنية في الطريقة: بيان مجموعة إعلانات DASH.
/** * Creates DAI pod url and instructs video player to load manifest. * @param {string} networkCode The network code. * @param {string} customAssetKey The custom asset key. * @param {number} podDuration The duration of the ad pod. */AdManager.prototype.loadAdPodManifest=function(networkCode,customAssetKey,podDuration){if(!this.streamData){debugView.log('AdsManager: No stream data available.');return;}varadBreakId=this.getAdBreakId();varexpirationTime=Math.trunc(newDate().getTime()/1000)+3600;varparams={ad_break_id:adBreakId,custom_asset_key:customAssetKey,exp:expirationTime,network_code:networkCode,pd:podDuration};varsecretKey=getStreamSecretKeys();vartoken=this.generateAuthToken(params,secretKey.MANIFEST_SECRET);varencodedToken=encodeURIComponent(token);varmanifestUrl='https://dai.google.com/linear/pods/v1/dash/network/'+networkCode+'/custom_asset/'+customAssetKey+'/stream/'+this.streamData.streamId+'/ad_break_id/'+adBreakId+'/manifest.mpd?pd='+podDuration+'&auth-token='+encodedToken;this.videoPlayer.preload(manifestUrl);};
يستخدم
نموذج تطبيق HbbTV
قيمة فريدة يتم إنشاؤها عشوائيًا adBreakId. في التطبيقات قيد الإنتاج، تكون قيمة adBreakId سلسلة أبجدية رقمية، مثل ab-001، وتزداد بمقدار واحد لكل فاصل إعلاني. تأكَّد من أنّ قيمة adBreakId هي القيمة نفسها لجميع مشاهدي الفاصل الإعلاني. للحصول على قيمة adBreakId، ننصحك باستخدام DAI Ad Break API.
في بيئة الإنتاج، ضِّمن قيمة adBreakId وقيمة podDuration في حدث بث HbbTV AD_BREAK_ANNOUNCE.
بعد ذلك، أنشئ فئة التطبيق الرئيسية لتطبيق HbbTV الذي يتفاعل مع بث HbbTV.
تاريخ التعديل الأخير: 2026-05-13 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2026-05-13 (حسب التوقيت العالمي المتفَّق عليه)"],[],["The `ads_manager.js` file defines an `AdManager` class to manage IMA SDK stream interactions. This includes `requestStream()` for sending stream requests using a network code and custom asset key, `onStreamEvent()` to handle IMA stream events like `STREAM_INITIALIZED`, `AD_BREAK_STARTED`, and `AD_BREAK_ENDED`. `onEmsgEvent()` passes emsg event data to the IMA SDK, and `loadAdPodManifest()` preloads the ad pod manifest using a constructed URL. The `podId` should be unique for each ad break.\n"]]