Xử lý siêu dữ liệu đã hẹn giờ trong luồng DAI tuyến tính

SDK chèn quảng cáo động (DAI) của Quảng cáo trên phương tiện truyền thông tương tác (IMA) dựa vào thông tin về siêu dữ liệu được nhúng trong phân đoạn nội dung nghe nhìn của luồng (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í và sự kiện quảng cáo phía máy khách của người xem. Siêu dữ liệu có sẵn từ luồng DAI ở nhiều định dạng khác nhau, tùy thuộc vào loại luồng đang phát. SDK IMA của Roku 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 SDK IMA DAI. SDK cung cấp phương thức StreamManager.onMessage() để chuyể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 một đối tượng msg do cổng roVideo cung cấp. Sau đó, các đối tượng này được SDK IMA DAI xử lý để thiết lập thời gian cho các sự kiện quảng cáo. Phương thức này chỉ có một đối số:

  • msg: một đối tượng loại tin nhắn 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à chuyển siêu dữ liệu đó đến SDK IMA 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à bắt đầu phát trực tuyến của hướng dẫn chứa vòng lặp xử lý siêu dữ liệu.

Luồng CMAF HLS

Các luồng HLS của DAI tuyến tính sử dụng Khung ứng dụng đa phương tiện chung (CMAF) sẽ truyền siêu dữ liệu được tính thời gian 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 liên quan đến điểm gián đoạn cuối cùng trong luồng.

Đối với IMA Roku, tất cả các luồng CMAF HLS đều gửi dữ liệu ID3 trong băng tần bằng cách sử dụ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.

Để phân tích cú pháp đúng cách các sự kiện ID3 của luồng CMAF HLS, bạn phải gửi đối tượng video trong yêu cầu phát trực tiếp bằng cách sử dụng StreamRequest.videoObject.