Hướng dẫn này minh hoạ cách phát luồng trực tiếp hoặc luồng VOD của tính năng Phân phát nhóm DAI bằng SDK IMA DAI cho tvOS thông qua trình phát video. Để xem hoặc làm theo một mẫu tích hợp hoàn chỉnh, hãy tải ứng dụng mẫu Pod Serving xuống (Obj C hoặc Swift).
Tổng quan về cơ chế Phân phát nhóm IMA DAI
Việc triển khai tính năng Phân phát nhóm bằng SDK IMA DAI cho tvOS bao gồm hai thành phần chính:
StreamRequest: Một đối tượng xác định yêu cầu luồng đến máy chủ quảng cáo của Google. Phải được tạo bằngIMAPodStreamRequesthoặcIMAPodVODStreamRequestđể bật tính năng Phân phát nhóm. Cả hai phương thức đều yêu cầu Mã mạng vàIMAPodStreamRequestcũng cần có Khoá thành phần tuỳ chỉnh. Khoá API là không bắt buộc.IMAStreamManager: Một đối tượng xử lý hoạt động giao tiếp giữa luồng video và SDK IMA DAI, chẳng hạn như kích hoạt ping theo dõi và chuyển tiếp sự kiện luồng đến nhà xuất bản.
Điều kiện tiên quyết
Trước khi bắt đầu, bạn cần có:
- Xcode 13 trở lên.
- Phương thức cài đặt IMA SDK:
- Trình quản lý gói Swift (ưu tiên)
- Bản sao có thể tải xuống của IMA SDK cho tvOS
- Một ứng dụng tvOS đã được thiết lập bằng SDK IMA DAI để phát các luồng video có quảng cáo DAI. Nếu chưa có ứng dụng như vậy, bạn nên sử dụng tvOS DAI BasicExample làm điểm xuất phát. BasicExample có toàn bộ mã nguồn được tham chiếu trong hướng dẫn này. Để biết thêm thông tin về cách triển khai SDK IMA DAI, hãy xem Hướng dẫn bắt đầu nhanh.
Thiết lập các biến Phân phát nhóm quảng cáo
Thực hiện tất cả thay đổi cho tính năng Phân phát nhóm quảng cáo trong ViewController.swift bằng Swift hoặc ViewController.m bằng Objective-C. Các đoạn mã trong hướng dẫn này
mặc định sử dụng ngôn ngữ Swift. Bước đầu tiên là cập nhật các biến hằng số.
Thêm các hằng số yêu cầu luồng nhóm quảng cáo sau:
STREAM_URL(Chỉ dùng cho sự kiện phát trực tiếp): URL của luồng video do trình thao tác tệp kê khai hoặc đối tác bên thứ ba cung cấp bằng tính năng Phân phát nhóm. Bạn cần phải chèn mã nhận dạng luồng do SDK IMA DAI cung cấp trước khi gửi yêu cầu. Trong trường hợp này, URL của luồng bao gồm một phần giữ chỗ,"[[STREAMID]]", mà bạn thay thế bằng mã luồng trước khi đưa ra yêu cầu.NETWORK_CODE: Mã mạng cho tài khoản Ad Manager 360 của bạn.CUSTOM_ASSET_KEY(Chỉ dùng cho sự kiện phát trực tiếp): Khoá thành phần tuỳ chỉnh giúp xác định sự kiện Phân phát nhóm trong Ad Manager 360. Trình thao tác tệp kê khai hoặc đối tác Phân phát nhóm quảng cáo bên thứ ba có thể tạo tệp này.API_KEY(Chỉ dùng cho sự kiện phát trực tiếp): Khoá API không bắt buộc, có thể cần thiết để truy xuất mã luồng phát từ SDK IMA DAI.
Thay đổi phần biến của ví dụ cho khớp với phần sau:
...
class ViewController:
UIViewController,
IMAAdsLoaderDelegate,
IMAStreamManagerDelegate,
AVPlayerViewControllerDelegate
{
static let streamUrl = ""
static let networkCode = ""
static let customAssetKey = ""
static let APIKey = ""
static let backupStreamURLString = ""
var adsLoader: IMAAdsLoader?
...
Tạo yêu cầu luồng nhóm quảng cáo trực tiếp hoặc VOD
Phân phát nhóm quảng cáo trong sự kiện phát trực tiếp
Sửa đổi phương thức requestStream để tạo yêu cầu luồng nhóm trực tiếp bằng cách tạo thực thể IMAPodStreamRequest.
...
func requestStream() {
guard let playerViewController = self.playerViewController else return
guard let adContainerView = self.adContainerView else return
guard let adsLoader = self.adsLoader else return
self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
adDisplayContainer = IMAAdDisplayContainer(
adContainer: adContainerView, viewController: self)
// Create a podserving stream request.
request = IMAPodStreamRequest(
networkCode: self.networkCode,
customAssetKey: self.customAssetKey,
adDisplayContainer: adDisplayContainer,
videoDisplay: self.videoDisplay,
userContext: nil)
adsLoader.requestStream(with: request)
}
...
Phân phát nhóm luồng VOD
Sửa đổi phương thức requestStream để tạo yêu cầu luồng nhóm VOD bằng cách tạo thực thể IMAPodVODStreamRequest.
...
func requestStream() {
guard let playerViewController = self.playerViewController else return
guard let adContainerView = self.adContainerView else return
guard let adsLoader = self.adsLoader else return
self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
adDisplayContainer = IMAAdDisplayContainer(
adContainer: adContainerView, viewController: self)
// Create a podserving stream request.
request = IMAPodVODStreamRequest(
networkCode: self.networkCode,
adDisplayContainer: adDisplayContainer,
videoDisplay: self.videoDisplay,
userContext: nil)
adsLoader.requestStream(with: request)
}
...
Chỉnh sửa và đặt URL của sự kiện phát trực tiếp
Phân phát nhóm quảng cáo trong sự kiện phát trực tiếp
Sửa đổi các phương thức IMAAdsLoaderDelegate, sử dụng streamManager.streamId để lấy mã luồng. Sau đó, hãy chèn mã nhận dạng luồng vào STREAM_URL, thay thế "[[STREAMID]]". Sau khi bạn thực hiện thay đổi này, hãy đặt URL luồng mới bằng cách sử dụng videoDisplay.loadStream().
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let streamManager = adsLoadedData.streamManager
let streamId = streamManager.streamId
let urlString = streamUrl.replacingOccurrences(of: "[[STREAMID]]", with: streamId)
let loadedStreamUrl = URL(string:urlString)
self.videoDisplay.loadStream(loadedStreamUrl, subtitles:@[])
self.videoDisplay.play()
streamManager.delegate = self
streamManager.initialize(with: nil)
self.streamManager = streamManager
}
...
Phân phát nhóm luồng VOD
Sửa đổi các phương thức IMAAdsLoaderDelegate, sử dụng streamManager.streamId để lấy mã luồng. Sau đó, hãy yêu cầu URL của luồng phát từ đối tác công nghệ video (VTP) và gọi IMAStreamManager.loadThirdPartyStream() để IMA tải URL của luồng phát và mọi phụ đề do TVP trả về.
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let streamManager = adsLoadedData.streamManager
let streamId = streamManager.streamId
// 'vtpInterface' is a place holder for your own video technology partner
// (VTP) API calls.
let streamUrl = vtpInterface.requestStreamURL(streamID)
self.streamManager.loadThirdPartyStream(streamUrl, streamSubtitles:@[])
streamManager.delegate = self
streamManager.initialize(with: nil)
self.streamManager = streamManager
}
Dọn dẹp các thành phần IMA DAI
Khi bạn đã hoàn tất thành công việc yêu cầu và hiển thị quảng cáo trong một luồng Phân phát nhóm quảng cáo bằng IMA DAI SDK, bạn nên dọn dẹp mọi tài nguyên sau khi phiên Phân phát nhóm quảng cáo hoàn tất. Gọi IMAStreamManager.destroy() để dừng phát luồng, dừng tất cả hoạt động theo dõi quảng cáo và giải phóng tất cả tài sản luồng đã tải.
Để xem các ví dụ khác về cách sử dụng SDK tvOS, hãy xem các mẫu trên GitHub.