Chèn quảng cáo có siêu dữ liệu về thời gian của nhóm quảng cáo

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:

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:

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:

  1. Tạo mã thông báo HMAC.
  2. 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:

  1. 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ụng preroll.
    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.
  2. 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).

  3. Sử dụng khoá HMAC đã tải xuống để tạo chữ ký SHA256 của chuỗi mã thông báo.

  4. Nối chuỗi mã thông báo và chữ ký đã tạo.

  5. Á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:

Để 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:

  1. 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.
  2. 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-INEXT-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-INEXT-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-INEXT-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.