Trình chỉnh sửa tệp kê khai cho sự kiện phát trực tiếp

API phân phát nhóm cho phép bạn truy cập vào các phân đoạn quảng cáo đã mã hoá và được điều chỉnh, được chuẩn bị sao cho chúng có thể được ghép trực tiếp vào HLS cho người dùng hoặc danh sách phát đa phương tiện MPEG-DASH. Đối với MPEG-DASH, API phân phát nhóm cũng cung cấp mẫu tệp kê khai để cung cấp thêm thông tin và ngữ cảnh cho những quảng cáo này phân khúc.

Hướng dẫn này tập trung vào việc triển khai một thao tác cơ bản đối với tệp kê khai Phân phát nhóm cho sự kiện phát trực tiếp.

Điều kiện tiên quyết: Định cấu hình sự kiện phát trực tiếp trong Google Ad Manager

Trước khi thực hiện bất kỳ yêu cầu nào từ API phân phát nhóm, bạn phải tạo một Quảng cáo Quản lý sự kiện phát trực tiếp cho mỗi sự kiện phát trực tiếp bạn xử lý. Bạn có thể tạo một bằng tính năng LiveStreamEventService API hoặc Giao diện web Google Ad Manager.

Để sử dụng sự kiện phát trực tiếp với API phân phát nhóm, bạn cần phải điền sẵn một số thuộc tính của sự kiện:

  • customAssetKey – Giá trị nhận dạng tùy chỉnh dùng cho Sự kiện này. Phải duy nhất trên tất cả các Sự kiện cho mạng.
  • adTags - URL thẻ quảng cáo chính do tính năng quản lý quảng cáo Ad Manager tạo ra quy trình làm việc.
  • dynamicAdInsertionType – Phải được đặt thành POD_SERVING_REDIRECT.
  • streamingFormat – Đặt thành HLS hoặc DASH cho phù hợp.
  • segmentUrlAuthenticationKeyIds – ít nhất một Khoá HMAC dùng để ký các yêu cầu phân khúc quảng cáo.
  • daiEncodingProfileIds – Danh sách DAIEncodingProfile Đã bật mã nhận dạng cho sự kiện này.
  • startDateTime – Ngày và giờ bắt đầu sự kiện
  • endDateTime – Ngày và giờ kết thúc theo lịch của sự kiện này. Thuộc tính này là bắt buộc nếu unlimitedEndDateTimeis false and ignored ifLIMITEndDateTimeis true. đợiEndDateTime` – Boolean. Xem bên trên.

Nhận yêu cầu tệp kê khai luồng

Trình điều khiển tệp kê khai phải cung cấp một điểm cuối API để theo dõi tệp kê khai từ ứng dụng trình phát video. Ở mức tối thiểu, điểm cuối này phải thu thập mã luồng từ ứng dụng trình phát máy khách và phải trả về một đường ghép tệp kê khai luồng. Mã luồng dùng để xác định phiên truyền trực tuyến đến Quảng cáo Người quản lý.

Bạn cũng cần thu thập một số thông tin khác để xác định chính sách luồng nội dung, ví dụ: Content ID.

Ví dụ về điểm cuối của yêu cầu tệp kê khai tiềm năng

GET /api/video/{asset_key}/manifest.{format}
Host: {your_domain}
Tham số đường dẫn
asset_key Mã nhận dạng giả định tương ứng với sự kiện phát trực tiếp được yêu cầu trong hệ thống của bạn.
format Một tham số giả định tương ứng với định dạng luồng. Một trong hai lựa chọn sau:
mpd Đối với luồng MPEG-DASH
m3u8 Đối với luồng HLS
Tham số truy vấn
stream_id Mã luồng Ad Manager từ ứng dụng trình phát video ứng dụng.

Truy xuất luồng nội dung

Sử dụng Content ID thu thập được từ yêu cầu tệp kê khai để chọn nội dung để kết hợp với quảng cáo.

Ghép các phân đoạn quảng cáo vào luồng nội dung

Việc ghép các URL phân đoạn quảng cáo sẽ khác nhau, tuỳ thuộc vào định dạng luồng phát của bạn.

Luồng HLS

Luồng HLS thường được phân phát dưới dạng tệp kê khai đa biến thể, chứa tập hợp các liên kết đến tệp kê khai biến thể, tương ứng với mỗi mã hoá hồ sơ.

Lưu ý: Để đơn giản, hướng dẫn này giả định rằng phương tiện truyền thông HLS của bạn được mã hoá theo để kết hợp âm thanh và video vào cùng một tệp phân đoạn.

Danh sách phát đa biến thể proxy

Bạn sẽ cần thay thế từng URL danh sách phát biến thể trong đa biến thể ban đầu danh sách phát có một lệnh gọi điểm cuối khác đến trình điều khiển để xử lý tệp kê khai biến thể đã chọn.

Các bước còn lại để ghép HLS sẽ giả định rằng một tệp kê khai biến thể duy nhất đang được xử lý.

Ví dụ về điểm cuối của yêu cầu biến thể tiềm năng
GET /api/video/{asset_key}/variant/{variant_id}.m3u8
Host: {your_domain}
Tham số đường dẫn
asset_key Mã nhận dạng giả định tương ứng với sự kiện phát trực tiếp được yêu cầu trong hệ thống của bạn.
variant Một tham số giả định có chứa giá trị nhận dạng cho biến thể cụ thể đang được xử lý.
Tham số truy vấn
stream_id Mã luồng Ad Manager từ ứng dụng trình phát video ứng dụng. đã sử dụng ở đây để xác định một phiên của người dùng bằng trình điều khiển tệp kê khai.
Ví dụ về tệp kê khai đa biến thể chưa được xử lý
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://cdn.{...}/360p.m3u8
Ví dụ về tệp kê khai đa biến thể được xử lý qua máy chủ proxy
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/1080p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.4d000c,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/720p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/360p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS

Xác định phân đoạn điểm chèn quảng cáo và chèn điểm gián đoạn

Khi bạn xử lý tệp kê khai biến thể, hãy 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 tiếp theo, cho đến khi tệp kê khai động được xử lý chứa các phân đoạn sẽ được thay thế bằng nội dung quảng cáo.

Các điểm chèn quảng cáo có thể được khoanh vùng từ các phân đoạn nội dung theo nhiều cách, tuỳ thuộc vào trên bộ mã hoá của bạn. Một cách phổ biến để phân định điểm chèn quảng cáo là mở đầu quảng cáo các phân đoạn có thẻ #EXT-X-CUE-OUT và theo sau là thẻ #EXT-X-CUE-IN.

Để tách điểm chèn quảng cáo do Google lưu trữ khỏi phân đoạn nội dung, bạn phải chèn #EXT-X-DISCONTINUITY thẻ ở đầu và cuối mỗi điểm chèn quảng cáo. Nếu các yêu cầu này thẻ gián đoạn không xuất hiện trong tệp kê khai cuối cùng, phát lại sẽ không thành công.

URI phân khúc quảng cáo đã chèn không được mã hoá. Nếu nội dung được mã hoá, bạn cũng sẽ cần loại bỏ lớp mã hoá bằng cách chỉ định #EXT-X-KEY:METHOD=NONE trước phân đoạn quảng cáo đầu tiên của mỗi điểm chèn quảng cáo và sau đó thêm lại sau điểm chèn quảng cáo.

Tệp kê khai mẫu (gốc)
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:15.000
#EXTINF:5.005,
contentorigin.com/3.ts
#EXTINF:5.005,
contentorigin.com/4.ts
#EXTINF:5.005,
contentorigin.com/5.ts
#EXTINF:5.000,d
contentorigin.com/6.ts
#EXT-X-CUE-IN
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4
Tệp kê khai có các điểm gián đoạn đã được chèn
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXTINF:5.005,
#EXT-X-DISCONTINUITY
{... New segments will go here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4

Xử lý phân khúc nhóm quảng cáo

Đối với mỗi phân đoạn trong nhóm quảng cáo, bạn phải theo dõi một vài giá trị bổ sung:

  • segment_number: Chỉ mục phân đoạn trong nhóm quảng cáo, bắt đầu bằng số 0. Hoặc "init" cho phân đoạn khởi chạy tệp mp4.
  • segment_duration: Thời lượng của phân đoạn hiện tại tính bằng mili giây. Chiến dịch này tất cả các phân khúc đều phải có giá trị giống nhau, ngoại trừ phân khúc cuối cùng trong nhóm.
  • segment_offset: Độ lệch phân khúc được tính bằng cách thêm giá trị trước thời lượng của phân đoạn so với thời gian bù phân đoạn (tính bằng mili giây)
  • last: Giá trị Boolean xác định phân khúc cuối cùng trong một nhóm quảng cáo. Mặc định thành false.

Tạo URL phân khúc quảng cáo

Thay thế từng phân đoạn trong điểm chèn quảng cáo bằng URL có định dạng:

/linear/pods/v1/seg/network/{network_code}/custom_asset/{custom_asset_key}/pod/{pod_id}/profile/{profile_name}/{segment_number}.(ts|mp4|vtt|aac|ac3|eac3)
Tham số đường dẫn
network_code Mã mạng Ad Manager 360 cho mạng này.
custom_asset_key Khoá tài sản sự kiện phát trực tiếp tuỳ chỉnh được chỉ định trong LiveStreamEventService API hoặc trên trang phát trực tiếp trong giao diện web của Ad Manager 360.
pod_id Giá trị nhận dạng cho điểm chèn quảng cáo. Phải là một số nguyên bắt đầu từ 1 và tăng thêm 1 đơn vị cho mỗi điểm chèn quảng cáo.

Giá trị này phải giống nhau cho tất cả người dùng xem cùng một điểm chèn quảng cáo trong sự kiện hiện tại.

profile_name Giá trị nhận dạng cho hồ sơ đang được yêu cầu,
segment_number Chỉ mục của phân khúc này trong nhóm quảng cáo hiện tại, bắt đầu từ 0.
Khi sử dụng vùng chứa MP4, bạn có thể yêu cầu phân đoạn khởi chạy bằng cách đặt phân đoạn số thành "init".
Tham số truy vấn
stream_id Bắt buộc Tham số stream_id của người dùng được trả về từ sự kiện Tạo luồng của bạn.
sd Bắt buộc segment_duration
so Không bắt buộc segment_offset

Nếu thiếu so, hệ thống sẽ xem như các phân khúc trước đó tất cả có cùng thời lượng và chênh lệch phân đoạn được tính từ segment_numbersd.

pd Bắt buộc, ngoại trừ các sự kiện bật điểm chèn quảng cáo không thời lượng Thời lượng (tính bằng mili giây) của điểm chèn quảng cáo. Còn được gọi là ad_pod_duration.
auth-token Bắt buộc URL được mã hoá, đã ký Mã thông báo HMAC cho nhóm quảng cáo này.
last Không bắt buộc Giá trị boolean cho biết phân đoạn cuối cùng trong điểm chèn quảng cáo. Giá trị mặc định là false.

Các giá trị thông số truy vấn phải được mã hoá đúng cách để an toàn với URL. Đây là đặc biệt quan trọng đối với trường auth-token, vì trường này có thể chứa /, += ký tự.

Tệp kê khai mẫu (sau khi thay thế phân đoạn)
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/0.ts?sd=5005&so=0&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/1.ts?sd=5005&so=5005&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/2.ts?sd=5005&so=10010&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:3.000,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/3.ts?sd=3000&so=15015&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2&last=true
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4

Xin chúc mừng! Bạn hiện đang phân phát sự kiện phát trực tiếp bằng phân khúc quảng cáo do API phân phát nhóm DAI.

Luồng DASH

Luồng DASH được cung cấp dưới dạng tệp MPD, chứa tất cả phương thức mã hoá luồng trong một tệp duy nhất, trong đó nội dung được trình bày dưới dạng một chuỗi dấu chấm.

Mẫu khoảng thời gian yêu cầu

Yêu cầu mẫu khoảng thời gian từ Google Ad Manager. Mẫu này sẽ trở thành khoảng thời gian chèn quảng cáo sau khi các macro trong đó được điền sẵn.

Bạn chỉ nên yêu cầu mẫu này một lần cho mỗi phiên truyền trực tuyến và lưu mẫu này vào bộ nhớ đệm tái sử dụng với mỗi điểm chèn quảng cáo.

Điểm cuối yêu cầu mẫu khoảng thời gianhjf
GET /linear/pods/v1/dash/network/{network_code}/custom_asset/{custom_asset}/pods.json
Host: dai.google.com
Content-Type: application/json
Tham số đường dẫn
network_code Mã mạng Ad Manager 360 của nhà xuất bản.
custom_asset Khoá tài sản tuỳ chỉnh của sự kiện phát trực tiếp trong Google Ad Manager.
Tham số truy vấn
stream_id Mã luồng Ad Manager từ trình phát video ứng dụng.
JSON phản hồi
dash_period_template Chuỗi XML mẫu khoảng thời gian.
segment_duration_ms Thời lượng của mỗi phân đoạn nội dung nghe nhìn quảng cáo trong mẫu dấu gạch ngang, theo mili giây.
Yêu cầu mẫu (cURL)
curl https://dai.google.com/linear/pods/v1/dash/network/21775744923/custom_asset/tears_of_steel/pods.json?stream-id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS
Ví dụ về phản hồi
{"dash_period_template":"<Period id="adpod-$$pod-id$$" $$period-start$$ $$period-duration$$> <BaseURL>https://dai.google.com/linear/pods/v1/seg/event/{event_code}/pods/$$pod-id$$/profile/</BaseURL>
 <SegmentTemplate initialization="$RepresentationID$/init.mp4?stream_id={a-stream-id}&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id={a-stream-id}&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;scte35=$$scte35$$&amp;auth_token=$$token$$" startNumber="1" presentationTimeOffset="0">
  <SegmentTimeline>
    <S t="0" d="5" r="$$number-of-repeated-segments$$"/>
  </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet id="0" width="1280" height="720" frameRate="30" contentType="video" subsegmentAlignment="true" startWithSAP="1">
    <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="a943ff679a2f3e71d9181a21b7542122g" bandwidth="3200000"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="abbbd80q4w5ce2fs28308rd1f4g4bat0" bandwidth="1500000"/>
  </AdaptationSet>
  <AdaptationSet id="1" contentType="audio"> <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="a87ff679a2f3e71d9181a67b7542122c" bandwidth="95000"/>

    <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="eccbc87e4b5ce2fe28308fd9f2a7baf3" bandwidth="127000"/>
  </AdaptationSet>
</Period>",
"segment_duration_ms":5000}

Điền mẫu khoảng thời gian

Mẫu dấu chấm chứa một số macro mà bạn phải thay thế cho mỗi quảng cáo nghỉ ngơi. Tất cả các macro phải được thay thế. Bạn nên thay thế các macro không được sử dụng bằng một chuỗi trống ("").

Macro Mô tả Ví dụ:
$$pod-id$$ Chỉ mục của nhóm quảng cáo trong khoảng thời gian này. Giá trị này phải khớp với cùng một nhóm trên tất cả các phiên xem. 1
$$period-start$$ Thời điểm bắt đầu giai đoạn tính bằng MPD hiện tại. Thuộc tính không bắt buộc phải được thay thế bằng start="###", trong đó ### là thời gian trình bày mà điểm chèn quảng cáo bắt đầu. Nếu thời gian bắt đầu của khoảng thời gian không được cung cấp, macro này phải được thay thế có chuỗi trống. start="PT2H33M30S"
$$period-duration$$ Thời lượng của toàn bộ thời gian quảng cáo. Đây là thuộc tính không bắt buộc được thay thế bằng duration="###", trong đó ### là thời lượng của thời gian quảng cáo ở định dạng thời lượng DASH chuẩn. Nếu khoảng thời gian không được cung cấp, bạn phải thay thế macro này bằng một chuỗi trống. duration="PT15S"
$$pod-duration$$ Thời lượng dự kiến của quảng cáo sẽ được quyết định cho nhóm này, tính theo mili giây. 15000
$$number-of-repeated-segments$$ Giá trị này được tính bằng cách chia thời lượng của khoảng thời gian quảng cáo (theo mili giây) theo giá trị của Segment_duration_ms và làm tròn lên đến số nguyên gần nhất. 3
$$cust_params$$ Bạn có thể thay thế macro này bằng các thông số nhắm mục tiêu tùy chỉnh dành riêng cho điểm chèn quảng cáo hiện tại, nếu có. đã cung cấp. Giá trị phải được định dạng là được mô tả trong Ad Manager này Bài viết trên Trung tâm trợ giúp. Nếu không cần thông số tùy chỉnh, bạn nên thay thế macro này bằng một tham số trống . &cust_params=section%3Dblog%26anotherKey%3Dvalue1%2Cvalue2
$$scte35$$ Bạn cần thay thế macro này bằng một giá trị scte35 duy nhất cho điểm chèn quảng cáo đó, nếu có. Nếu không cần thông tin scte35 thì macro này sẽ sẽ được thay thế bằng một chuỗi trống. /DAqAAAAAAAA///wDwVAAAT2f0/+ecF1mQABC/8ACgAIQ1VFSQAAAAsuZVlR
$$token$$ URL được mã hoá, đã ký Mã thông báo HMAC. Bắt buộc phải có mã thông báo này. custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D6a8c44c72e4718ff63ad2284edf2a8b9e319600b430349d31195c99b505858c9
Mẫu khoảng thời gian thô, có chứa macro
<Period id="adpod-$$pod-id$$" $$period-start$$ $$period-duration$$>
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/{event_code}/pods/$$pod-id$$/profile/
  </BaseURL>
  <SegmentTemplate initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id=ç√&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;scte35=$$scte35$$&amp;auth_token=$$token$$" startNumber="1" presentationTimeOffset="0">  
    <SegmentTimeline>
      <S t="0" d="5" r="$$number-of-repeated-segments$$"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet id="0" width="1280" height="720" frameRate="30" contentType="video" subsegmentAlignment="true" startWithSAP="1">
    <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="a943ff679a2f3e71d9181a21b7542122g" bandwidth="3200000"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="abbbd80q4w5ce2fs28308rd1f4g4bat0" bandwidth="1500000"/>
  </AdaptationSet>
  <AdaptationSet id="1" contentType="audio"> <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="a87ff679a2f3e71d9181a67b7542122c" bandwidth="95000"/>
    <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="eccbc87e4b5ce2fe28308fd9f2a7baf3" bandwidth="127000"/>
  </AdaptationSet>
</Period>
Giai đoạn quảng cáo được điền sẵn
<Period id="pod-0" start="PT5H50M12S">
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/M-nTcApTRTi6CEGIt4GYMw/pod/0/profile/
  </BaseURL>
  <SegmentTemplate startNumber="0" media="1080p/0.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=">
    <SegmentTimeline>
      <S d="5" r="1"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet mimeType="video/mp4" scanType="progressive" contentType="video">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation width="768" height="432" frameRate="30" codecs="avc1.42c01e" id="fmp4-video-1200k" bandwidth="1300000">
      <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    </Representation>
  </AdaptationSet>
  <AdaptationSet mimeType="audio/mp4" scanType="progressive" contentType="audio">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="fmp4-audio-128kbps" bandwidth="128000">
      <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
    </Representation>
  </AdaptationSet>
</Period>

Chèn khoảng thời gian đã điền vào tệp kê khai DASH

Cuối cùng, hãy thay thế khoảng thời gian thích hợp trong tệp kê khai thô của bạn bằng thời gian quảng cáo được điền và trả về tệp kê khai ghép cuối cùng vào yêu cầu ứng dụng video để phát lại.

Ví dụ về tệp kê khai nội dung thô
<?xml version="1.0"?>
  <MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:DASH:schema:MPD:2011" xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011" profiles="urn:mpeg:dash:profile:isoff-main:2011" type="static" mediaPresentationDuration="PT0H9M56.46S">
    <BaseURL>
      http://example.com/tears_of_steel/
    </BaseURL>
    <Period start="PT0S">
      <AdaptationSet bitstreamSwitching="true">

        <Representation id="0" codecs="avc1" mimeType="video/mp4" width="1920" height="1080" startWithSAP="1" bandwidth="500000">
          <SegmentBase>
            <Initialization sourceURL="segments/1080/1.m4s" range="0-862"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segments/1080p/2.m4s" mediaRange="863-7113"/>
            <SegmentURL media="segments/1080p/3.m4s" mediaRange="7114-14104"/>
            <SegmentURL media="segments/1080p/4.m4s" mediaRange="14105-17990"/>
            ...
          </SegmentList>
        </Representation>

        <Representation id="1" codecs="avc1" mimeType="video/mp4" width="1280" height="720" startWithSAP="1" bandwidth="250000">
          <SegmentBase>
            <Initialization sourceURL="segments/720p/1.m4s" range="0-864"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segments/720p/2.m4s" mediaRange="865-11523"/>
            <SegmentURL media="segments/720p/3.m4s" mediaRange="11524-25621"/>
            <SegmentURL media="segments/720p/4.m4s" mediaRange="25622-33693"/>
            ...
          </SegmentList>
        </Representation>

        <Representation id="1" codecs="avc1" mimeType="video/mp4" width="640" height="480" startWithSAP="1" bandwidth="100000">
          <SegmentBase>
            <Initialization sourceURL="segment/480p/1.m4s" range="0-865"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segment/480p/2.m4s" mediaRange="866-26970"/>
            <SegmentURL media="segment/480p/3.m4s" mediaRange="26971-72543"/>
            <SegmentURL media="segment/480p/4.m4s" mediaRange="72544-95972"/>
            ...
          </SegmentList>
        </Representation>
        ...
      </AdaptationSet>
    </Period end>
  </MPD>
Ví dụ về tệp kê khai ghép nối
<?xml version="1.0"?>
  <MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:DASH:schema:MPD:2011" xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011" profiles="urn:mpeg:dash:profile:isoff-main:2011" type="static" mediaPresentationDuration="PT0H9M56.46S">
    <BaseURL>
      http://example.com/tears_of_steel/
    </BaseURL>
    
    <Period id="pod-0" start="PT5H50M12S">
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/M-nTcApTRTi6CEGIt4GYMw/pod/0/profile/
  </BaseURL>
  <SegmentTemplate startNumber="0" media="1080p/0.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=$$scte35$$" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=$$scte35$$">
    <SegmentTimeline>
      <S d="5" r="1"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet mimeType="video/mp4" scanType="progressive" contentType="video">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation width="768" height="432" frameRate="30" codecs="avc1.42c01e" id="fmp4-video-1200k" bandwidth="1300000">
      <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    </Representation>
  </AdaptationSet>
  <AdaptationSet mimeType="audio/mp4" scanType="progressive" contentType="audio">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="fmp4-audio-128kbps" bandwidth="128000">
      <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
    </Representation>
  </AdaptationSet>
</Period>
    
</MPD>

Xin chúc mừng! Bạn hiện đang phân phát một sự kiện phát trực tiếp DASH với các phân đoạn quảng cáo đã cung cấp bởi API phân phát nhóm DAI.

Tài nguyên khác