Hướng dẫn này mô tả cách chèn điểm chèn quảng cáo bằng phương thức Siêu dữ liệu về thời gian của nhóm quảng cáo (ATM) để tìm nạp thời gian và thời lượng chính xác cho điểm chèn quảng cáo, bao gồm cả quảng cáo trước video.
Để chèn quảng cáo trước video và quản lý việc quay lại nội dung sau khi kết thúc điểm chèn quảng cáo trong video, bạn nên gọi các API sau:
- API Siêu dữ liệu về thời gian của nhóm quảng cáo (ATM): truy vấn kết quả quyết định về nhóm quảng cáo, bao gồm cả thời lượng quảng cáo và bảng thông báo.
- Điểm cuối phân đoạn quảng cáo: yêu cầu phân đoạn quảng cáo hoặc bảng thông báo có lựa chọn kết thúc nhóm quảng cáo hiện tại.
Bạn có thể gọi API Thông báo điểm chèn quảng cáo sớm (EABN) để lên lịch quyết định về quảng cáo trước khi điểm chèn quảng cáo bắt đầu (đối với các sự kiện phát trực tiếp có tính đồng thời cao).
Điều kiện tiên quyết
Để bắt đầu, bạn cần thiết lập một sự kiện phát trực tiếp cho loại Lệnh chuyển hướng phân phát nhóm Chèn quảng cáo động (DAI). Chọn một trong các phương thức sau:
- Giao diện người dùng Ad Manager: Thiết lập một luồng phát trực tiếp cho DAI.
- Ad Manager API: Sử dụng một thư viện ứng dụng (các lựa chọn hiện có) để gọi phương thức
LiveStreamEventService.createLiveStreamEvents
. Đặt tham sốLiveStreamEvent.dynamicAdInsertionType
thànhPOD_SERVING_REDIRECT
.
Truy xuất luồng nội dung
Khi người dùng chọn một sự kiện phát trực tiếp, ứng dụng khách sẽ gửi một yêu cầu phát trực tiếp đến Google Ad Manager. Trong phản hồi luồng phát, ứng dụng sẽ trích xuất mã phiên DAI của Google và siêu dữ liệu để đưa vào yêu cầu tệp kê khai luồng phát.
Ví dụ sau đây truyền mã phiên DAI của Google đến một trình xử lý tệp kê khai:
https://MANIFEST_MANIPULATOR_URL/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY
Khi xử lý yêu cầu phát nội dung video, hãy lưu trữ mã phiên Google DAI và CUSTOM_ASSET_KEY từ yêu cầu để chuẩn bị cho việc ghép quảng cáo.
Truy xuất siêu dữ liệu về thời gian của nhóm quảng cáo
Để truy xuất thời gian của nhóm quảng cáo, hãy làm theo các bước sau:
- Tạo mã thông báo HMAC.
- Gọi ATM API bằng mã thông báo HMAC.
Tạo mã thông báo HMAC đã ký
Để xác thực các yêu cầu, hãy làm theo các bước sau:
Tạo một chuỗi mã thông báo bằng cách nối các tham số sau theo thứ tự bảng chữ cái, phân tách bằng dấu ngã
~
:Thông số Bắt buộc hoặc không bắt buộc Mô tả ad_break_id
Bắt buộc Một chuỗi mà bạn chỉ định để xác định khoảng thời gian chèn quảng cáo, ví dụ: ad-break-1
. Đối với quảng cáo trước video, hãy sử dụngpreroll
.custom_asset_key
Bắt buộc Khoá tài sản tuỳ chỉnh của sự kiện phát trực tiếp. cust_params
Không bắt buộc Thông số nhắm mục tiêu tuỳ chỉnh. Để biết thêm thông tin chi tiết, hãy xem bài viết Cung cấp thông số nhắm mục tiêu đến luồng của bạn. exp
Bắt buộc Thời gian hết hạn của mã thông báo này, được đo bằng tổng số giây đã trôi qua kể từ thời gian bắt đầu của hệ thống Unix. network_code
Bắt buộc Mã mạng Google Ad Manager của bạn. Để biết thêm thông tin, hãy xem bài viết Tìm thông tin tài khoản Ad Manager. pd
Bắt buộc Thời lượng của điểm chèn quảng cáo tính bằng mili giây. Đối với quảng cáo trước video, DAI của Google sẽ ghi đè tham số này bằng chế độ cài đặt sự kiện phát trực tiếp của bạn. scte35
Không bắt buộc Tín hiệu SCTE-35 được mã hoá Base64. Xác minh rằng tín hiệu là chính xác. Nếu không chính xác, một thông báo sẽ được gửi đến tiêu đề HTTP X-Ad-Manager-Dai-Warning
trong phản hồi và tín hiệu vẫn được truyền để tạo một khoảng quảng cáo. Để biết thêm thông tin về các điểm đánh dấu điểm chèn quảng cáo được hỗ trợ, hãy xem phần Tích hợp HLS.Tải khoá xác thực DAI của Google thuộc loại HMAC xuống. Để biết thêm thông tin, hãy xem phần Xác thực yêu cầu luồng video chèn quảng cáo động (DAI).
Sử dụng khoá HMAC đã tải xuống để tạo chữ ký SHA256 của chuỗi mã thông báo.
Nối chuỗi mã thông báo và chữ ký đã tạo.
Áp dụng phương thức mã hoá URL cho chuỗi được nối. Chuỗi được mã hoá là mã thông báo HMAC đã ký để xác thực các yêu cầu API Siêu dữ liệu về thời gian của nhóm quảng cáo (ATM).
Ví dụ sau đây tạo ra mã thông báo HMAC đã ký cho quảng cáo đầu video:
custom_asset_key="CUSTOM_ASSET_KEY"
exp="1750700000" # Expired on Mon Jun 23 2025 13:33:20 GMT-0400 (Eastern Daylight Time)
network_code="NETWORK_CODE"
ad_break_id="preroll"
pd="0" # Pod duration value is overridden by the livestream event settings.
# The HMAC authentication key associated with your livestream event in Google Ad Manager.
secret_key="24E96382584C328087546B0E8454F26158564E8466FD2BE3D8A996B38445876C"
# Concatenate the parameters, keep the parameters alphabetically ordered by name.
token_string="ad_break_id=${ad_break_id}~custom_asset_key=${custom_asset_key}~exp=${exp}~network_code=${network_code}~pd=${pd}"
# Calculate the SHA256 signature of the token_string.
hmac_signature=$(echo -n "$token_string" | openssl dgst -sha256 -hmac "$secret_key" | awk '{print $2}')
# Concatenate the token string and the signature.
signed_token="${token_string}~hmac=${hmac_signature}"
url_encode() {
local string="${1}"
local strlen=${#string}
local encoded=""
local pos c
for (( pos=0 ; pos<strlen ; pos++ )); do
c=${string:$pos:1}
case "$c" in
[-_.~a-zA-Z0-9] ) o="${c}" ;;
* ) printf -v o '%%%02x' "'$c"
esac
encoded+="${o}"
done
echo "${encoded}"
}
# Apply URL encoding to the concatenated string.
url_encoded_signed_token=$(url_encode "$signed_token")
echo "Signed HMAC token:"
echo "${url_encoded_signed_token}"
# Example output:
# ad_break_id%3Dpreroll~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D21775744923~pd%3D180000~pod_id%3D5~hmac%3D24E96382584C328087546B0E8454F26158564E8466FD2BE3D8A996B38445876C
Yêu cầu siêu dữ liệu về thời gian cho quảng cáo trước video
Xác minh chế độ cài đặt quảng cáo trước video cho sự kiện phát trực tiếp bằng các lựa chọn sau:
- Quảng cáo trước video trong sự kiện phát trực tiếp DAI (Thử nghiệm beta)
- LiveStreamEvent.prerollsettings
Để truy xuất kết quả quyết định về quảng cáo trước video, hãy gửi yêu cầu đến ATM API.
Ví dụ sau đây đưa ra yêu cầu ATM cho quảng cáo trước video:
curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=preroll&auth-token=your_signed_HMAC_token"
Yêu cầu siêu dữ liệu về thời gian cho quảng cáo trong video
Để truy xuất siêu dữ liệu nhóm quảng cáo cho quảng cáo trong video, hãy làm theo các bước sau:
- Phân tích cú pháp tệp kê khai sự kiện phát trực tiếp để tìm các điểm đánh dấu quảng cáo có chứa thời gian và thời lượng cho từng điểm chèn quảng cáo trong video.
- Gọi điểm cuối ATM API để yêu cầu thời lượng chính xác của nhóm quảng cáo và bảng quảng cáo. API này trả về một đối tượng JSON có kết quả quyết định của nhóm quảng cáo.
Ví dụ sau đây đưa ra yêu cầu ATM cho quảng cáo trong video:
curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=AD_BREAK_ID&pd=AD_BREAK_DURATION&auth-token=your_signed_HMAC_token"
Nếu thành công, bạn sẽ thấy kết quả tương tự như đối tượng JSON sau:
{
"status": "final",
"ads": [
{
"duration_ms": 5046,
"variants": {
"devrel1428000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5045
]
}
},
"devrel1928000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5045
]
}
}
}
}
],
"slate": {
"duration_ms": 0,
"variants": {
"devrel1428000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5005,
...
5046
]
}
},
"devrel1928000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5005,
...
5046
]
}
}
}
}
}
Ghép quảng cáo vào tệp kê khai nội dung
Các phần sau đây hướng dẫn bạn cách sửa đổi tệp kê khai sự kiện phát trực tiếp và thêm các phân đoạn quảng cáo.
Xác định các phân đoạn điểm chèn quảng cáo và chèn các điểm gián đoạn
Khi bạn xử lý từng tệp kê khai biến thể, hãy xác định thẻ EXT-X-CUE-IN
và EXT-X-CUE-OUT
trong luồng phát của bạn, cho biết thời điểm bắt đầu và kết thúc một khoảng thời gian chèn quảng cáo.
Thay thế thẻ EXT-X-CUE-IN
và EXT-X-CUE-OUT
bằng các phần tử EXT-X-DISCONTINUITY
để trình phát video trên máy khách chuyển đổi giữa nội dung và quảng cáo.
Tệp kê khai ví dụ sau đây sẽ thay thế các thẻ EXT-X-CUE-IN
và EXT-X-CUE-OUT
:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:15.000
#EXTINF:5.000,
contentorigin.com/3.ts
#EXTINF:5.000,
contentorigin.com/4.ts
#EXTINF:5.000,
contentorigin.com/5.ts
#EXT-X-CUE-IN
#EXTINF:5.000,
contentorigin.com/6.ts
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
Ví dụ sau đây cho thấy một tệp kê khai được thay thế:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXTINF:5.000,
#EXT-X-DISCONTINUITY
{... Insert ad segments here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/6.mp4
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
Các phân đoạn quảng cáo DAI của Google không được mã hoá. Nếu nội dung của bạn được mã hoá, hãy xoá lớp mã hoá bằng cách chèn phần tử EXT-X-KEY:METHOD=NONE
trước phân đoạn quảng cáo đầu tiên của mỗi khoảng thời gian chèn quảng cáo. Khi điểm chèn quảng cáo kết thúc, hãy thêm lại lớp mã hoá bằng cách chèn một EXT-X-KEY
thích hợp.
Theo dõi thời gian bắt đầu, thời lượng và chỉ mục của điểm chèn quảng cáo sắp tới.
Tạo URL phân khúc quảng cáo
Thay thế các phân đoạn nội dung giữa thẻ EXT-X-DISCONTINUITY
bằng URL cho từng phân đoạn quảng cáo. Để xác định số lượng phân đoạn quảng cáo cần chèn, hãy sử dụng ads.segment_durations.values
có trong phản hồi JSON từ ATM API.
Để kết thúc sớm một nhóm quảng cáo khi phát hiện thấy thẻ EXT-X-CUE-IN
, hãy thêm tham số d=
vào URL của phân đoạn quảng cáo cuối cùng. Tham số này rút ngắn đoạn để tránh ảnh hưởng đến dòng thời gian của trình phát video trên máy khách.
Ví dụ sau đây sẽ tập hợp một URL phân đoạn quảng cáo trước video vào tệp kê khai. Xin lưu ý rằng các phân đoạn quảng cáo sử dụng chỉ mục dựa trên 0:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/preroll/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
Ví dụ sau đây sẽ tập hợp một URL phân đoạn quảng cáo trong video vào tệp kê khai:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
Ví dụ sau đây chèn các phân đoạn quảng cáo vào tệp kê khai:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.00,
contentorigin.com/1.ts
#EXTINF:5.00,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/2.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:5.00,
contentorigin.com/6.mp4
#EXTINF:5.00,
contentorigin.com/7.mp4
#EXTINF:5.00,
contentorigin.com/8.mp4
Tạo phân đoạn phương tiện chặn
Để lấp đầy khoảng trống giữa quảng cáo và nội dung, hãy chèn các phân đoạn phương tiện chặn.
Sử dụng mảng slates.segment_durations.values
trong phản hồi JSON của ATM API để xác định thời lượng của từng phân đoạn bảng thông tin. Lặp lại chuỗi thời lượng phân đoạn khi cần để lấp đầy toàn bộ khoảng thời gian chèn quảng cáo.
Ví dụ sau đây minh hoạ cách lắp ráp một phân đoạn bảng thông báo:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
slate/0
trong ví dụ này biểu thị số lần lặp lại của bảng điều khiển. Tham khảo khả năng tương thích và khả năng lưu vào bộ nhớ đệm của trình phát video trên máy khách để xác định xem có nên bắt đầu từ 0
và tăng số này cho mỗi vòng lặp của bảng quảng cáo hay giữ ở mức 0
cho tất cả các lần lặp.
Quản lý việc quay lại nội dung
Sau khi bạn chèn tất cả các phân đoạn từ nhóm quảng cáo, hãy chọn một trong các phương thức sau để chuyển về luồng nội dung:
Phương thức | Mô tả | Ảnh hưởng đến trình phát video trên ứng dụng |
---|---|---|
Lấp đầy bằng các đoạn phương tiện chặn | Chèn các phân đoạn bảng hiệu và lặp lại bảng hiệu. Điền thời lượng và chèn các phần tử EXT-X-DISCONTINUITY giữa mỗi lần lặp lại của bảng. |
Không có hiệu ứng. Trình phát video chuyển về nội dung mà không có dòng thời gian bị thay đổi. |
Điều chỉnh lại bằng một phân đoạn bảng duy nhất | Chèn một đoạn bảng hiệu duy nhất. Sử dụng tham số d= để điền thời lượng cho đến khi nội dung bắt đầu. |
Không có hiệu ứng. Trình phát video chuyển về nội dung mà không có dòng thời gian bị thay đổi. |
Trả lại ngay | Chèn các đoạn nội dung. | Dòng thời gian của trình phát video bị thay đổi. Trình phát video của ứng dụng phải xử lý dòng thời gian đã thay đổi. |
Không bắt buộc: Lên lịch điểm chèn quảng cáo
Để tăng tỷ lệ lấp đầy, hãy gửi Early Ad Break Notification (EABN) (Thông báo sớm về điểm chèn quảng cáo) cùng với thời lượng nhóm quảng cáo, các thông số nhắm mục tiêu tuỳ chỉnh và dữ liệu tín hiệu SCTE-35. Để biết thêm thông tin chi tiết, hãy xem phần Gửi thông báo sớm về điểm chèn quảng cáo.