إنشاء فئة "مدير الإعلانات"
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
في ads_manager.js، حدِّد فئة غلاف لـ StreamManager في "حزمة تطوير البرامج للإعلانات التفاعلية" (IMA SDK) التي تنفّذ طلبات البث، وتحصل على بيان حزمة الإعلانات، وتستمع إلى أحداث بث IMA، وتمرِّر أحداث emsg إلى حزمة IMA SDK.
في ads_manager.js، يضبط تطبيق IMA 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-09-29 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","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-09-29 (حسب التوقيت العالمي المتفَّق عليه)"],[],["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"]]