Chuẩn bị ứng dụng cho lệnh chuyển hướng phân phát nhóm

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:

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

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

  2. 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ặc application/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
    }
    
  3. 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:

  1. Đọc giá trị metadata_url từ phản hồi đăng ký luồng phát.

  2. 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
        },
        ...
      }
    }
    
  3. Lưu đối tượng tags cho các bước sau.

  4. Đặ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:

  1. Lọc các sự kiện theo scheme_id_uri bằng urn:google:dai:2018 hoặc https://aomedia.org/emsg/ID3.
  2. 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",
      ...
    }
    
  3. 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:

  1. 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ượng tags là một mảng gồm các đối tượng TagSegment.

  2. 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ại progress.

  3. 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.

  4. Sau khi có TagSegment, hãy dùng thuộc tính ad_break_id làm khoá để tìm đối tượng AdBreak trong đối tượng siêu dữ liệu quảng cáo ad_breaks.

    Ví dụ sau đây tìm một đối tượng AdBreak:

    {
      "type":"mid",
      "duration":15,
      "ads":1
    }
    
  5. Sử dụng dữ liệu TagSegmentAdBreak để 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:

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

  2. 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ỗi 404.

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