SDK Chèn quảng cáo động (DAI) của Quảng cáo tương tác trên phương tiện truyền thông (IMA) dựa vào thông tin siêu dữ liệu được nhúng trong các phân đoạn nội dung nghe nhìn của luồng phát (siêu dữ liệu trong băng tần) hoặc trong tệp kê khai phát trực tuyến (siêu dữ liệu trong tệp kê khai) để theo dõi vị trí của người xem và các sự kiện quảng cáo phía máy khách. Siêu dữ liệu có trong luồng DAI ở nhiều định dạng, tuỳ thuộc vào loại luồng đang phát. SDK IMA DAI xử lý tất cả các định dạng siêu dữ liệu thông qua một API duy nhất.
Ứng dụng của bạn chịu trách nhiệm thu thập siêu dữ liệu và chuyển tiếp siêu dữ liệu đó đến IMA DAI SDK. SDK cung cấp phương thức StreamManager.onMessage() để truyền thông tin này. Phương thức này chuyển tiếp siêu dữ liệu dưới dạng đối tượng msg do cổng roVideo cung cấp. Sau đó, các đối tượng này sẽ được SDK IMA DAI xử lý để thiết lập thời gian cho các sự kiện quảng cáo. Hàm này nhận một đối số duy nhất:
msg: đối tượng loại msg do cổng roVideo cung cấp.
Mã mẫu siêu dữ liệu
Dưới đây là ví dụ về cách xử lý siêu dữ liệu từ cổng roVideo và truyền siêu dữ liệu đó đến SDK IMA DAI thông qua StreamManager.onMessage().
Sub runLoop()
' Forward all timed metadata events to IMA.
m.top.video.timedMetaDataSelectionKeys = ["*"]
' Cycle through all the fields and set listeners.
' IMPORTANT: Failure to listen to the position and timedmetadata fields could
' result in ad impressions not being reported.
m.port = CreateObject("roMessagePort")
fields = m.top.video.getFields()
for each field in fields
m.top.video.observeField(field, m.port)
end for
while True
msg = wait(1000, m.port)
if m.top.video = invalid
print "exiting"
exit while
end if
m.streamManager.onMessage(msg)
currentTime = m.top.video.position
If currentTime > 3 And not m.top.adPlaying
m.top.video.enableTrickPlay = true
End If
end while
End Sub
Để biết thêm thông tin về cách kết hợp siêu dữ liệu luồng xử lý vòng lặp vào ứng dụng của bạn, hãy xem hướng dẫn bắt đầu sử dụng IMA Roku. Phần trình nghe sự kiện và phần bắt đầu luồng của hướng dẫn chứa vòng lặp xử lý siêu dữ liệu.
Yêu cầu về định dạng luồng phát và vùng chứa
Để bật tính năng theo dõi quảng cáo phía máy khách trên Roku, bạn phải sử dụng các phân đoạn nội dung nghe nhìn trong luồng DAI được đóng gói ở định dạng vùng chứa được hỗ trợ. Quy trình này cho phép Roku OS trích xuất siêu dữ liệu có dấu thời gian.
Roku Media Player hỗ trợ trích xuất siêu dữ liệu ID3 trong băng tần trên các định dạng vùng chứa sau:
- Luồng truyền tải MPEG-2 (TS)
- MP4 phân mảnh
- Định dạng ứng dụng đa phương tiện chung (CMAF)
Các luồng âm thanh cơ bản thô, chẳng hạn như các phân đoạn thô của Advanced Audio Coding (AAC), không được hỗ trợ cho siêu dữ liệu có dấu thời gian trên Roku OS. Roku Media Player không thể trích xuất siêu dữ liệu có dấu thời gian ID3 từ luồng âm thanh AAC thô, điều này khiến IMA SDK không nhận được các sự kiện siêu dữ liệu và không gửi được lượt hiển thị quảng cáo hoặc các tín hiệu theo dõi. Đối với tất cả các luồng chỉ có âm thanh và luồng kết xuất âm thanh, bạn phải sử dụng các luồng có bao bì định dạng vùng chứa được hỗ trợ, chẳng hạn như TS, MP4 hoặc CMAF.
Luồng CMAF HLS
Các luồng HLS DAI tuyến tính sử dụng Khung ứng dụng đa phương tiện phổ biến (CMAF) truyền siêu dữ liệu có dấu thời gian thông qua các hộp eMSGv1 trong băng tần theo tiêu chuẩn ID3 thông qua CMAF. Các hộp eMSG này được nhúng ở đầu mỗi phân đoạn nội dung nghe nhìn, trong đó mỗi eMSG ID3 chứa một PTS tương ứng với điểm gián đoạn cuối cùng trong luồng.
Đối với IMA Roku, tất cả luồng CMAF HLS đều gửi dữ liệu ID3 trong băng tần bằng định dạng eMSGv0. IMA kết hợp thông tin do định dạng eMSGv0 cung cấp với thông tin từ đối tượng video.
Để cho phép phân tích cú pháp đúng các sự kiện ID3 luồng CMAF HLS, bạn phải gửi đối tượng video trong yêu cầu luồng bằng cách sử dụng StreamRequest.videoObject.