مصادقة طلبات بيان مجموعة الإعلانات المتسلسلة

بالنسبة إلى إدراج الإعلانات الموجَّه من الخادم، يرسل تطبيقك طلب بيان مجموعة إعلانات متسلسلة. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة إنشاء عنوان URL لبيان مجموعة إعلانات متسلسلة.

تتناول هذه الصفحة مصادقة طلبات بيان المجموعة الإعلانية باستخدام الرموز المميّزة لرمز مصادقة الرسالة المستند إلى التجزئة (HMAC).

قبل البدء

قبل المتابعة، يُرجى اتّخاذ الإجراءات التالية:

إنشاء رمز HMAC مميّز

لإنشاء رمز مميّز، اتّبِع الخطوات التالية:

  1. اجمع مسار ومعلَمات طلب البحث (باستثناء auth-token) التي تم ملؤها لطلب بيان المجموعة الإعلانية. للحصول على قائمة كاملة، يُرجى الاطّلاع على الطريقة: بيان مجموعة إعلانية بتنسيق HLS أو الطريقة: بيان مجموعة إعلانية بتنسيق DASH.
  2. اجمع بين سلسلة مفتاح المَعلمة وسلسلة القيمة. يجب ترتيب المَعلمات أبجديًا وفصلها باستخدام علامة المدة ~، على سبيل المثال:

    ad_break_id=AD_BREAK_ID~custom_asset_key=CUSTOM_ASSET_KEY~exp=EXPIRATION~network_code=NETWORK_CODE~pd=POD_DURATION
    
  3. احسب قيمة تجزئة SHA-256 لسلسلة الرمز المميّز باستخدام مفتاح مصادقة "إعلانات الفيديو أثناء التشغيل".

  4. نسِّق ناتج التجزئة بتنسيق سداسي عشري.

  5. لتوقيع سلسلة الرمز المميّز، أضِف التوقيع في نهاية المَعلمات التي جمعتها سابقًا:

    ad_break_id=...~hmac=HMAC_SIGNATURE`
    

    استبدِل HMAC_SIGNATURE بالتوقيع الذي أنشأته من خلال تجزئة سلسلة الرمز المميّز باستخدام مفتاح مصادقة "إعلانات الفيديو أثناء التشغيل".

  6. لتمرير سلسلة الرمز المميّز الموقَّعة بأمان، طبِّق ترميز عنوان URL على سلسلة الرمز المميّز الموقَّعة.

ينشئ المثال التالي القيمة الموقَّعة لسلسلة رمز مميّز بترميز عنوان URL:

HLS

# Add 60 seconds to the current time
future_epoch=$((EPOCHSECONDS + 60))

echo "Current: $EPOCHSECONDS"
echo "Future: $future_epoch"
# Current: 1774464277
# Future: 1774464337

# Sample DAI pod resource authentication key
key="EB089..."

# Sort parameters in the token string
token="ad_break_id=ab-001~custom_asset_key=hls-pod-serving-manifest-auth-stream-pod~exp=1774464337~network_code=21775744923~pd=30000"

# Generate the token's signature.
echo -n $token | openssl dgst -sha256 -mac HMAC -macopt key:$key

# SHA2-256(stdin)= 68ce65522e0b5f0b4e9a842a0a300e5cba8d14502268b18f66619abcc4dc016e

# Sign the token: ad_break_id=ab-001~custom_asset_key=hls-pod-serving-manifest-auth-stream-pod~exp=1774464337~network_code=21775744923~pd=30000~hmac=68ce65522e0b5f0b4e9a842a0a300e5cba8d14502268b18f66619abcc4dc016e

# Encode the token:
ad_break_id%3Dab-001~custom_asset_key%3Dhls-pod-serving-manifest-auth-stream-pod~exp%3D1774464337~network_code%3D21775744923~pd%3D30000~hmac%3D68ce65522e0b5f0b4e9a842a0a300e5cba8d14502268b18f66619abcc4dc016e

DASH

# Add 60 seconds to the current time
future_epoch=$((EPOCHSECONDS + 60))

echo "Current: $EPOCHSECONDS"
echo "Future: $future_epoch"
# Current: 1774464770
# Future: 1774464830

# Sample DAI pod resource authentication key
key="EB08..."

# Assemble parameters in the token string
token="ad_break_id=ab-001~custom_asset_key=dash-pod-serving-manifest-auth-stream-pod~exp=1774464830~network_code=21775744923~pd=30000"

# Generate the token's signature.
echo -n $token | openssl dgst -sha256 -mac HMAC -macopt key:$key

# SHA2-256(stdin)= 51ce9544b2f04a27d5a818bd982c262f97b7bc64d9e8ea07d13ae73e04062614

# Sign the token: ad_break_id=ab-001~custom_asset_key=dash-pod-serving-manifest-auth-stream-pod~exp=1774464830~network_code=21775744923~pd=30000~hmac=51ce9544b2f04a27d5a818bd982c262f97b7bc64d9e8ea07d13ae73e04062614

# Encode the token: ad_break_id%3Dab-001~custom_asset_key%3Ddash-pod-serving-manifest-auth-stream-pod~exp%3D1774464830~network_code%3D21775744923~pd%3D30000~hmac%3D51ce9544b2f04a27d5a818bd982c262f97b7bc64d9e8ea07d13ae73e04062614

مصادقة طلب بيان مجموعة إعلانية

لمصادقة طلبات بيان المجموعة الإعلانية، استخدِم مَعلمة سلسلة طلب البحث auth-token لتمرير رمز HMAC الموقَّع بترميز عنوان URL.

HLS

يستخدم المثال التالي رمز HMAC مميّزًا لمصادقة طلب بيان مجموعة إعلانية بتنسيق HLS:

curl --include "https://dai.google.com/linear/pods/v1/hls/network/21775744923/custom_asset/hls-pod-serving-manifest-auth-stream-pod/ad_break_id/ab-001.m3u8?stream_id=381c29ff-9015-4f9f-8a43-e2e13822473a:ATL&pd=30000&auth-token=ad_break_id%3Dab-001~custom_asset_key%3Dhls-pod-serving-manifest-auth-stream-pod~exp%3D1774464337~network_code%3D21775744923~pd%3D30000~hmac%3D68ce65522e0b5f0b4e9a842a0a300e5cba8d14502268b18f66619abcc4dc016e"

في حال نجاح العملية، سيظهر لك الردّ التالي:

...
< HTTP/2 200
< vary: Accept-Encoding
<
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA:TYPE=AUDIO,URI="https://dai.google.com/linear/pods/v1/hls/event/o35L8Xl8TFa2naph5beXsw/ab_break_id/ab-001/profile/fmp4-audio-128kbps.m3u8?pd=30000&stream_id=9331d770-ae82-460a-96d4-b971eb6f8fa0%3ADLS",GROUP-ID="AUDIO",NAME="mp4a.40.2-0",DEFAULT=YES
#EXT-X-STREAM-INF:BANDWIDTH=1268994,RESOLUTION=1280x720,CODECS="avc1.64001e,mp4a.40.2",AUDIO="AUDIO"
https://dai.google.com/linear/pods/v1/hls/event/o35L8Xl8TFa2naph5beXsw/ad_break_id/ab-001/profile/Video-1200k.m3u8?pd=30000&stream_id=9331d770-ae82-460a-96d4-b971eb6f8fa0%3ADLS
#EXT-X-STREAM-INF:BANDWIDTH=5114591,RESOLUTION=1280x720,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="AUDIO"
...

لفهم بنية الردّ ورموز الحالة، يُرجى الرجوع إلى الطريقة: بيان مجموعة إعلانية بتنسيق HLS.

في حال تعذُّر المصادقة، سيظهر لك التحذير x-ad-manager-dai-warning:

...
< HTTP/2 200
< x-ad-manager-dai-warning: Unable to create ad break due to Unauthorized error (skipping ad break creation)
....
<
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA:TYPE=AUDIO,URI="https://dai.google.com/linear/pods/v1/hls/event/o35L8Xl8TFa2naph5beXsw/ad_break_id/ab-001/profile/fmp4-audio-128kbps.m3u8?pd=30000&stream_id=381c29ff-9015-4f9f-8a43-e2e13822473a%3AATL",GROUP-ID="AUDIO",NAME="mp4a.40.2-0",DEFAULT=YES
#EXT-X-STREAM-INF:BANDWIDTH=1268994,RESOLUTION=1280x720,CODECS="avc1.64001e,mp4a.40.2",AUDIO="AUDIO"
https://dai.google.com/linear/pods/v1/hls/event/o35L8Xl8TFa2naph5beXsw/ad_break_id/ab-001/profile/Video-1200k.m3u8?pd=30000&stream_id=381c29ff-9015-4f9f-8a43-e2e13822473a%3AATL
#EXT-X-STREAM-INF:BANDWIDTH=5114591,RESOLUTION=1280x720,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="AUDIO"
https://dai.google.com/linear/pods/v1/hls/event/o35L8Xl8TFa2naph5beXsw/ad_break_id/ab-001/profile/media-ts-4628000bps.m3u8?pd=30000&stream_id=381c29ff-9015-4f9f-8a43-e2e13822473a%3AATL

DASH

يستخدم المثال التالي رمز HMAC مميّزًا لمصادقة طلب بيان مجموعة إعلانية بتنسيق DASH:

curl --include "https://dai.google.com/linear/pods/v1/dash/network/21775744923/custom_asset/dash-pod-serving-manifest-auth-stream-pod/stream/310b1882-4a62-436a-99b1-ca56435b48f6:TUL/ad_break_id/ab-001/manifest.mpd?pd=30000&auth-token=ad_break_id%3Dab-001~custom_asset_key%3Ddash-pod-serving-manifest-auth-stream-pod~exp%3D1774464830~network_code%3D21775744923~pd%3D30000~hmac%3D51ce9544b2f04a27d5a818bd982c262f97b7bc64d9e8ea07d13ae73e04062614"

في حال نجاح العملية، سيظهر لك الردّ التالي:

...
HTTP/2 200
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:_XMLSchema-instance="http://www.w3.org/2001/XMLSchema-instance" _XMLSchema-instance:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" id="201" profiles="urn:hbbtv:dash:profile:isoff-live:2012" type="static" mediaPresentationDuration="PT30S" minBufferTime="PT2S">
<Period id="1" duration="PT30S">
  <BaseURL>https://dai.google.com/linear/pods/v1/seg/event/310b1882-4a62-436a-99b1-ca56435b48f6:TUL/ad_break_id/ab-001/profile/</BaseURL>
  <SegmentTemplate startNumber="0" media="$RepresentationID$/$Number$.mp4?stream_id=310b1882-4a62-436a-99b1-ca56435b48f6:TUL&amp;sd=5000&amp;pd=30000" initialization="$RepresentationID$/init.mp4?stream_id=310b1882-4a62-436a-99b1-ca56435b48f6:TUL&amp;pd=30000">
    <SegmentTimeline>
      <S d="5" r="5"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet mimeType="video/mp4" scanType="progressive" contentType="video">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation width="1280" height="720" frameRate="25" codecs="avc1.64001f" id="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>

لفهم بنية الردّ ورموز الحالة، يُرجى الرجوع إلى الطريقة: بيان مجموعة إعلانية بتنسيق DASH.

في حال تعذُّر المصادقة، سيظهر لك التحذير x-ad-manager-dai-warning:

...
< HTTP/2 200
< access-control-allow-headers: Authorization
< x-ad-manager-dai-warning: Unable to create ad break due to Unauthorized error (skipping ad break creation)
<
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:_XMLSchema-instance="http://www.w3.org/2001/XMLSchema-instance" _XMLSchema-instance:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" id="201" profiles="urn:hbbtv:dash:profile:isoff-live:2012" type="static" mediaPresentationDuration="PT30S" minBufferTime="PT2S">
<Period id="1" duration="PT30S">
<BaseURL>https://dai.google.com/linear/pods/v1/seg/event/310b1882-4a62-436a-99b1-ca56435b48f6:TUL/ad_break_id/ab-001/profile/</BaseURL>
<SegmentTemplate startNumber="0" media="$RepresentationID$/$Number$.mp4?stream_id=310b1882-4a62-436a-99b1-ca56435b48f6:TUL&amp;sd=5000&amp;pd=30000" initialization="$RepresentationID$/init.mp4?stream_id=310b1882-4a62-436a-99b1-ca56435b48f6:TUL&amp;pd=30000">
<SegmentTimeline>
<S d="5" r="5"/>
</SegmentTimeline>
</SegmentTemplate>
<AdaptationSet mimeType="video/mp4" scanType="progressive" contentType="video">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
<Representation width="1280" height="720" frameRate="25" codecs="avc1.64001f" id="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>