Hướng dẫn này đề cập đến việc phát triển một ứng dụng khách để tải luồng phát trực tiếp HLS hoặc DASH bằng API phân phát nhóm và trình thao tác tệp kê khai của bạn.
Điều kiện tiên quyết
Để tiếp tục, bạn phải có những thông tin sau:
Khoá thành phần tuỳ chỉnh cho một sự kiện phát trực tiếp được định cấu hình bằng loại
Pod serving redirect
DAI. Để lấy khoá này, hãy làm như sau:Sử dụng thư viện ứng dụng SOAP API để gọi phương thức
LiveStreamEventService.createLiveStreamEvents
bằng đối tượngLiveStreamEvent
và thuộc tínhdynamicAdInsertionType
được đặt thành giá trị enumPOD_SERVING_REDIRECT
. Đối với tất cả thư viện ứng dụng, hãy xem Thư viện ứng dụng và mã ví dụ.
Xác định xem SDK quảng cáo trên phương tiện truyền thông tương tác (IMA) có dùng được cho nền tảng của bạn hay không. Bạn nên sử dụng IMA SDK để tăng doanh thu. Để biết thông tin chi tiết, hãy xem phần Thiết lập IMA SDK cho DAI.
Đưa ra yêu cầu phát trực tuyến
Khi người dùng chọn một luồng, hãy làm như sau:
Gửi yêu cầu
POST
đến phương thức dịch vụ phát trực tiếp. Để biết thông tin chi tiết, hãy xem Phương thức: stream.Truyền các tham số nhắm mục tiêu quảng cáo ở định dạng
application/x-www-form-urlencoded
hoặcapplication/json
. Yêu cầu này sẽ đăng ký một phiên phát trực tuyến với DAI của Google.Ví dụ sau đây sẽ tạo một yêu cầu truyền phát trực tiếp:
Mã hoá biểu mẫu
const url = `https://dai.google.com/ssai/pods/api/v1/` + `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`; const params = new URLSearchParams({ cust_params: 'section=sports&page=golf,tennis' }).toString(); const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: params }); console.log(await response.json());
Mã hoá JSON
const url = `https://dai.google.com/ssai/pods/api/v1/` + `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`; const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ cust_params: { section: 'sports', page: 'golf,tennis' } }) }); console.log(await response.json());
Nếu thành công, bạn sẽ thấy kết quả tương tự như sau:
{ "stream_id": "8d2b2292-6356-4c0e-94be-cece01d2df2e:DLS", "media_verification_url": "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/", "metadata_url": "https://dai.google.com/linear/pods/hls/.../metadata", "session_update_url": "https://dai.google.com/linear/.../session", "polling_frequency": 10 }
Trong phản hồi JSON, hãy xác định mã phiên phát trực tiếp và lưu trữ các dữ liệu khác cho các bước tiếp theo.
Siêu dữ liệu quảng cáo thăm dò ý kiến
Để thăm dò siêu dữ liệu quảng cáo, hãy làm như sau:
Đọc giá trị
metadata_url
từ phản hồi đăng ký luồng phát.Gửi yêu cầu
GET
đến điểm cuối. Để biết thông tin chi tiết, hãy xem Phương thức: siêu dữ liệu.Ví dụ sau đây tìm nạp siêu dữ liệu quảng cáo:
const response = await fetch(metadata_url); console.log(await response.json());
Nếu thành công, bạn sẽ nhận được phản hồi PodMetadata cho các điểm chèn quảng cáo hiện tại và sắp tới:
{ "tags":{ "google_5555555555":{ "ad":"0000229834_ad1", "ad_break_id":"0000229834", "type":"firstquartile" }, "google_1234567890123456789":{ "ad":"0000229834_ad1", "ad_break_id":"0000229834", "type":"progress" }, ... }, "ads":{ "0000229834_ad1":{ "ad_break_id":"0000229834", "position":1, "duration":15, "clickthrough_url":"https://.../", ... }, ... }, "ad_breaks":{ "0000229834":{ "type":"mid", "duration":15, "ads":1 }, ... } }
Lưu đối tượng
tags
cho các bước sau.Đặt một bộ hẹn giờ bằng giá trị
polling_frequency
để thường xuyên yêu cầu siêu dữ liệu cho tất cả các điểm chèn quảng cáo tiếp theo.
Tải luồng phát vào trình phát video
Sau khi bạn nhận được mã nhận dạng phiên từ phản hồi đăng ký, hãy truyền mã nhận dạng đó đến trình thao tác tệp kê khai hoặc tạo một URL tệp kê khai để tải luồng vào trình phát video.
Để truyền mã nhận dạng phiên, hãy xem tài liệu về trình thao tác tệp kê khai. Nếu bạn phát triển một trình thao tác tệp kê khai, hãy xem phần Trình thao tác tệp kê khai cho sự kiện phát trực tiếp.
Ví dụ sau đây sẽ tập hợp một URL tệp kê khai:
https://<your_manifest_manipulator_url>/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY"
Khi trình phát đã sẵn sàng, hãy bắt đầu phát.
Theo dõi các sự kiện quảng cáo
Kiểm tra định dạng vùng chứa của luồng phát để biết siêu dữ liệu có dấu thời gian:
Luồng HLS có vùng chứa Transport Stream (TS) sử dụng thẻ ID3 có dấu thời gian để mang siêu dữ liệu có dấu thời gian. Để biết thông tin chi tiết, hãy xem bài viết Giới thiệu về định dạng ứng dụng đa phương tiện chung với giao thức Phát trực tuyến dựa trên HTTP (HLS).
Luồng DASH sử dụng các phần tử
EventStream
để chỉ định các sự kiện trong tệp kê khai.Luồng DASH sử dụng các phần tử
InbandEventStream
khi các phân đoạn chứa hộp Thông báo sự kiện (emsg
) cho dữ liệu tải trọng, bao gồm cả thẻ ID3. Để biết thông tin chi tiết, hãy xem phần InbandEventStream.Luồng CMAF, bao gồm cả DASH và HLS, sử dụng các hộp
emsg
chứa thẻ ID3.
Để truy xuất thẻ ID3 từ luồng phát, hãy tham khảo hướng dẫn của trình phát video. Để biết thông tin chi tiết, hãy xem Hướng dẫn xử lý siêu dữ liệu có dấu thời gian
Để truy xuất mã nhận dạng sự kiện quảng cáo từ thẻ ID3, hãy làm như sau:
- Lọc các sự kiện theo
scheme_id_uri
bằngurn:google:dai:2018
hoặchttps://aomedia.org/emsg/ID3
. Trích xuất mảng byte từ trường
message_data
.Ví dụ sau đây giải mã dữ liệu
emsg
thành JSON:{ "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3", "presentation_time": 27554, "timescale": 1000, "message_data": "ID3TXXXgoogle_1234567890123456789", ... }
Lọc thẻ ID3 theo định dạng
TXXXgoogle_{ad_event_ID}
:TXXXgoogle_1234567890123456789
Hiện dữ liệu sự kiện quảng cáo
Để tìm đối tượng TagSegment
, hãy làm như sau:
Truy xuất đối tượng siêu dữ liệu quảng cáo
tags
từ Poll ad metadata (Siêu dữ liệu quảng cáo trong cuộc thăm dò ý kiến). Đối tượngtags
là một mảng gồm các đối tượngTagSegment
.Sử dụng mã nhận dạng đầy đủ của sự kiện quảng cáo để tìm một đối tượng
TagSegment
có loạiprogress
.Sử dụng 17 ký tự đầu tiên của mã nhận dạng sự kiện quảng cáo để tìm một đối tượng
TagSegment
thuộc các loại khác.Sau khi có
TagSegment
, hãy dùng thuộc tínhad_break_id
làm khoá để tìm đối tượngAdBreak
trong đối tượng siêu dữ liệu quảng cáoad_breaks
.Ví dụ sau đây tìm một đối tượng
AdBreak
:{ "type":"mid", "duration":15, "ads":1 }
Sử dụng dữ liệu
TagSegment
vàAdBreak
để hiện thông tin về vị trí quảng cáo trong khoảng thời gian quảng cáo. Ví dụ:Ad 1 of 3
.
Gửi ping xác minh nội dung nghe nhìn
Đối với mọi sự kiện quảng cáo, ngoại trừ loại progress
, hãy gửi một ping xác minh nội dung nghe nhìn.
Google DAI sẽ loại bỏ các sự kiện progress
và việc gửi các sự kiện này thường xuyên có thể ảnh hưởng đến hiệu suất của ứng dụng.
Để tạo URL xác minh đầy đủ về sự kiện quảng cáo trên phương tiện nghe nhìn, hãy làm như sau:
Từ phản hồi luồng phát, hãy thêm mã sự kiện quảng cáo đầy đủ vào giá trị
media_verification_url
.Gửi yêu cầu
GET
bằng URL đầy đủ:// media_verification_url: "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/" const completeUrl = `${media_verification_url}google_5555555555123456789`; const response = await fetch(completeUrl);
Nếu thành công, bạn sẽ nhận được phản hồi trạng thái mã
202
. Nếu không, bạn sẽ nhận được mã lỗi404
.
Bạn có thể sử dụng công cụ Giám sát hoạt động truyền (SAM) để kiểm tra nhật ký theo thời gian về tất cả các sự kiện quảng cáo. Để biết thông tin chi tiết, hãy xem bài viết giám sát và khắc phục sự cố phát trực tiếp