ใน application.js
ให้สร้างคลาสหลักสําหรับแอป HbbTV ที่โต้ตอบกับการออกอากาศ HbbTV ชั้นเรียนนี้โต้ตอบกับ broadcastAppManager
และ broadcastContainer
ดูตัวอย่างคลาสที่คล้ายกันได้ที่หัวข้อการจัดการออบเจ็กต์ A/V ของออกอากาศ
แก้ไขแอป HbbTV พื้นฐานนี้เพื่อขอสตรีม IMA และตอบสนองต่อเหตุการณ์ช่วงพักโฆษณา
เริ่มต้นแอปพลิเคชัน
เริ่มต้นคลาสแอปพลิเคชันใน application.js
ตั้งค่า broadcastAppManager
และ broadcastContainer
ตามบทแนะนำ การจัดการออบเจ็กต์ Broadcast a/v
หลังจากนั้นให้เริ่มออบเจ็กต์ VideoPlayer
และ AdManager
ใหม่
/** Main HbbTV Application. */ var HbbTVApp = function() { this.broadcastAppManager = document.getElementById('broadcast-app-manager'); this.broadcastContainer = document.getElementById('broadcast-video'); this.playState = -1; // -1 as null play state. try { this.applicationManager = this.broadcastAppManager.getOwnerApplication(document); this.applicationManager.show(); this.broadcastContainer.bindToCurrentChannel(); this.subscribedToStreamEvents = false; this.broadcastContainer.addEventListener( 'PlayStateChange', this.onPlayStateChangeEvent.bind(this)); debugView.log('HbbTVApp: App loaded'); this.videoPlayer = new VideoPlayer(); this.videoPlayer.setOnAdPodEnded(this.resumeBroadcast.bind(this)); } catch (e) { debugView.log('HbbTVApp: No HbbTV device detected.'); return; } this.adManager = new AdManager(this.videoPlayer); };
ส่งคําขอสตรีม IMA
ในเมธอด HbbTVApp.onPlayStateChangeEvent()
ให้ส่งคําขอสตรีมเพื่อตอบสนองต่อการเปลี่ยนแอปเป็น PRESENTING_PLAYSTATE
แนวทางนี้จะช่วยเตรียมแอปให้โหลดไฟล์ Manifest ของพ็อดโฆษณาเพื่อตอบสนองต่อเหตุการณ์ AD_BREAK_EVENT_ANNOUNCE
if (!this.subscribedToStreamEvents && this.broadcastContainer.playState == PRESENTING_PLAYSTATE) { this.subscribedToStreamEvents = true; this.broadcastContainer.addStreamEventListener( STREAM_EVENT_URL, 'eventItem', function(event) { this.onStreamEvent(event); }.bind(this)); debugView.log('HbbTVApp: Subscribing to stream events.'); this.adManager.requestStream(NETWORK_CODE, CUSTOM_ASSET_KEY); }
หากอุปกรณ์ของคุณไม่ได้ส่ง PlayStateChange
event ของคอนเทนเนอร์การออกอากาศอย่างถูกต้อง ให้ใช้ฟังก์ชัน setInterval()
เพื่อตรวจสอบการเปลี่ยนแปลงสถานะการเล่น ดังนี้
setInterval(function() {
if (!subscribedToStreamEvents &&
this.broadcastContainer.playState == PRESENTING_PLAYSTATE) {
subscribedToStreamEvents = true;
this.broadcastContainer.addStreamEventListener(
STREAM_EVENT_URL, 'eventItem', function(event) {
this.onStreamEvent(event);
}.bind(this));
debugView.log('Subscribing to stream events');
this.adManager.requestStream(NETWORK_CODE, CUSTOM_ASSET_KEY);
}
…
ฟังกิจกรรมสตรีมของ HbbTV
สร้างเมธอด HbbTVApp.onStreamEvent()
เพื่อฟังเหตุการณ์ช่วงพักโฆษณา ดังนี้
adBreakAnnounce
, adBreakStart
และ adBreakEnd
/** * Callback for HbbTV stream event. * @param {!Event} event Stream event payload. */ HbbTVApp.prototype.onStreamEvent = function(event) { var eventData = JSON.parse(event.text); var eventType = eventData.type; if (eventType == AD_BREAK_EVENT_ANNOUNCE) { this.onAdBreakAnnounce(eventData); } else if (eventType == AD_BREAK_EVENT_START) { this.onAdBreakStart(eventData); } else if (eventType == AD_BREAK_EVENT_END) { this.onAdBreakEnd(eventData); } };
จัดการกิจกรรมสตรีมของ HbbTV
หากต้องการจัดการเหตุการณ์สตรีม HbbTV ให้ทำตามขั้นตอนต่อไปนี้
หากต้องการโหลดไฟล์ Manifest ของพ็อดโฆษณาเพื่อตอบสนองต่อเหตุการณ์
adBreakAnnounce
ให้สร้างเมธอดHbbTVApp.onAdBreakAnnounce()
ดังนี้/** * Callback function on ad break announce stream event. * @param {!Event} event HbbTV stream event payload. */ HbbTVApp.prototype.onAdBreakAnnounce = function(event) { var eventType = event.type; var eventDuration = event.duration; var eventOffset = event.offset; debugView.log( 'HbbTV event: ' + eventType + ' duration: ' + eventDuration + 's offset: ' + eventOffset + 's'); this.adManager.loadAdPodManifest(NETWORK_CODE, CUSTOM_ASSET_KEY, eventDuration); };
หากต้องการเปลี่ยนไปเล่นสตรีมโฆษณาในช่วงพักโฆษณา ให้สร้างวิธี
HbbTVApp.onAdBreakStart()
ดังนี้/** * Callback function on ad break start stream event. * @param {!Event} event HbbTV stream event payload. */ HbbTVApp.prototype.onAdBreakStart = function(event) { debugView.log('HbbTV event: ' + event.type); if (!this.videoPlayer.isPreloaded()) { debugView.log('HbbTVApp: Switch aborted. ' + 'The ad preloading buffer is insufficient.'); return; } this.stopBroadcast(); this.videoPlayer.play(); };
หากต้องการกลับไปที่เนื้อหาที่ออกอากาศ ให้สร้าง
HbbTVApp.onAdBreakEnd()
เมธอดดังนี้/** * Callback function on ad break end stream event. * @param {!Event} event HbbTV stream event payload. */ HbbTVApp.prototype.onAdBreakEnd = function(event) { debugView.log('HbbTV event: ' + event.type); this.videoPlayer.stop(); this.resumeBroadcast(); };
ตอนนี้คุณขอและแสดงพ็อดโฆษณา IMA SDK ในแอป HbbTV แล้ว หากต้องการเปรียบเทียบแอปของคุณกับแอปตัวอย่างที่เสร็จสมบูรณ์แล้ว โปรดดูตัวอย่าง IMA HbbTV ใน GitHub