סמני מודעות

במדריך הזה מתוארים סמני המודעות שנתמכים על ידי Video Stitcher API. ה-API של Video Stitcher מזהה את הגבולות של ההפסקות למודעות באמצעות סמני מודעות במניפסט HLS/DASH של מקור השידור החי, ומבצע שילוב של מודעות במהלך הפסקה למודעות בכל סשן של השידור החי.

לפני שמתחילים

חשוב להכיר את מושגי המבוא והטרמינולוגיה של Video Stitcher API. מידע נוסף זמין בסקירה הכללית הטכנית.

אפשר לעיין במפרט SCTE-35 בנושא הודעת רמז להוספת תוכנית דיגיטלית לשידור בכבלים.

פקודות SCTE-35

סמני מודעות בשידור חי מיוצגים על ידי אותות SCTE-35 רגילים. בתוך רשימת הפקודות של SCTE-35, ‏ Video Stitcher API תומך בשתי הפקודות הבאות:

  • splice_insert
  • time_signal

באמצעות time_signal, אפשר לספק מטא-נתונים שרירותיים נוספים להפסקה למודעה המשויכת במזהה התוכנית הייחודי (UPID) הראשון של הפילוח.

ב-Video Stitcher API, הערך של segmentation_upid_type צריך להיות 0x0C, כלומר MPU(). הערך private_data ב-MPU() צריך להיות מחרוזת JSON בקידוד base64, שבה מפתחות JSON מסוימים שמורים למטרות הספציפיות הבאות:

  • %%AD_TAG_ID%%: מציין את תג המודעה שבו יש להשתמש להפסקה למודעה. מזהה תג המודעה צריך להיות אחד מהמפתחות ב-adTagMacros של הסשן בשידור החי.
  • %%SLATE_ID%%: מציין את הלוח לשימוש בהפסקה למודעה. מזהה הלוח חייב להיות זהה למזהה של לוח שכבר נוצר באותו פרויקט ב- Google Cloud .

כל שאר זוגות מפתח/ערך במטען הייעודי (payload) של ה-UPID משמשים להחלפת מאקרו בתג המודעה.

לדוגמה, אם ה-URI של תג המודעה הוא https://example.com?key=[foo], וה-private_data הוא eyJmb28iOiJiYXIifQ==, שהוא ייצוג base64 של {"foo":"bar"},‏ Video Stitcher API מחליף את [foo] ב-bar, ושולח בקשה לתג מודעה אל https://example.com?key=bar.

בתהליך העבודה של השילוב עם Google Ad Manager, הודעות SCTE35 עשויות להכיל ערכים מסוימים שאפשר להחליף בתג המודעה. כאן אפשר לעיין ברשימת פקודות המאקרו הנתמכות.

מוודאים שהמאקרו שנבחר מופיע בadTagUri registered on the live config

לדוגמה, אם הודעת SCTE35 מעבירה ערך ל-%%SPLICE_INSERT_EVENT_ID%%, צריך לוודא שהמאקרו קיים ב-adTagUri, כמו בדוגמה הבאה:

AD_TAG_URI&macro=%%SPLICE_INSERT_EVENT_ID%%

כש-Video Stitcher API מבקש את המטא-נתונים של המודעה וההגדרה splice_insert SCTE35 message has splice_insert_event_id מוגדרת ל-123, הוא משתמש בתג המודעה הבא:

AD_TAG_URI&macro=123

סמני מודעות ב-HLS

EXT-X-DATERANGE

השימוש ב-#EXT-X-DATERANGE מפורט במפרט של HTTP Live Streaming:

  • תג #EXT-X-DATERANGE עם המאפיין SCTE35-OUT מציין את נקודת ההתחלה המיידית של הפסקה למודעה.
  • תג #EXT-X-DATERANGE עם המאפיין SCTE35-IN מציין את נקודת החיבור המיידית של סוף הפסקה למודעה.
  • הערכים של SCTE35-OUT ושל SCTE35-IN צריכים להיות בקידוד הקסדצימלי.

דוגמה:

#EXT-X-DATERANGE:ID="111",START-DATE=START_DATE,SCTE35-OUT=0xFC302000000000000000FFF00F050000006F7FFF7E002932E0000000000000235EE5EF
...
#EXT-X-DATERANGE:ID="111",START-DATE=START_DATE,END-DATE=END_DATE,SCTE35-IN=0xFC302000000000000000FFF00F050000006F7F7F7E002932E0000000000000D56C4036

התג #EXT-X-DATERANGE רלוונטי רק לקטע הבא ברשימת ההשמעה של הווריאנט, גם אם התג START-DATE לא תואם לחותמת הזמן של הקטע.

‫EXT-X-CUE-OUT ו-EXT-X-CUE-IN

תג #EXT-X-CUE-OUT מציין את ההתחלה המיידית של הפסקה למודעה, ותג #EXT-X-CUE-IN מציין את הסיום המיידי של הפסקה למודעה.

אפשר להשתמש בתג #EXT-OATCLS-SCTE35 להודעת SCTE-35, והערך צריך להיות מקודד בפורמט Base64.

דוגמה (ללא הודעת SCTE-35):

#EXT-X-CUE-OUT:DURATION=30
...
#EXT-X-CUE-IN

דוגמה (עם הודעת SCTE-35):

#EXT-OATCLS-SCTE35:/DBBAAAAAAAAAP/wBQb+AAaXgAArAilDVUVJAAAAb3//AAApMuAMFXslJUFEX1RBR19JRCUlOnRhZy0xfTQAALOJefk=
#EXT-X-CUE-OUT:30
...
#EXT-X-CUE-IN

אם מציינים את משך הזמן של תג EXT-X-CUE-OUT, הערך הזה קודם גם אם משך ההפסקה לפרסומות בהודעת SCTE-35 לא תואם לו. אם לא מציינים את משך הזמן של התג EXT-X-CUE-OUT ומציינים אותו בהודעת SCTE-35 המשויכת, המערכת משתמשת בערך מההודעה SCTE-35.

סמני מודעות ב-DASH

בשלב הזה, Video Stitcher API תומך רק במניפסטים של DASH עם כמה תקופות. במניפסט DASH רב-תקופתי, הפסקת פרסום צריכה להיות מיוצגת על ידי תג Period עם זרם אירועים שמכיל סמן cue-out. לא נדרש סמן של נקודת חזרה לשידור, כי סוף תקופת ההפסקה למודעה מציין את סוף ההפסקה.

אם כמה אירועים של נקודת יציאה להפסקת פרסומות מוצגים בזרם האירועים של SCTE-35 של הפסקה למודעה, Video Stitcher API ישתמש רק באירוע הראשון. המערכת מתעלמת משעת ההצגה של אירוע היציאה, כי שעת ההתחלה של ההפסקה זהה לשעת ההתחלה של התקופה.

זו רשימה של ערכי schemeIdUri נתמכים לזרם אירועים מסוג SCTE-35:

  • urn:scte:scte35:2014:xml+bin
  • urn:scte:scte35:2013:xml

urn:scte:scte35:2014:xml+bin

זרם אירועים שהערך של schemeIdUri שלו מוגדר ל-urn:scte:scte35:2014:xml+bin מכיל אירועים שמייצגים הודעות SCTE-35 בפורמט בינארי בקידוד base64.

דוגמה:

  <Period start="PT444334H55M0.010S" id="break-1">
    <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="90000">
      <Event presentationTime="0" duration="5400000" id="1">
        <Signal xmlns="urn:scte:scte35:2014:xml+bin">
          <Binary xmlns="urn:scte:scte35:2014:xml+bin">/DBTAAAAAAAAAP/wBQb+AAaXgAA9AjtDVUVJAAAAAH//AABSZcAMJ3siJSVBRF9UQUdfSUQlJSI6InRhZy0xIiwiZGFzaCI6InRydWUifTQAABxkspA=</Binary>
        </Signal>
      </Event>
    </EventStream>
    ...
  </Period>

urn:scte:scte35:2013:xml

זרם אירועים שבו schemeIdUri מוגדר ל-urn:scte:scte35:2013:xml כולל אירועים שמייצגים הודעות SCTE-35 ב-XML ברור.

דוגמה:

  <Period start="PT444334H55M0.010S" id="break-1">
    <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
      <Event duration="5400000">
        <scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="140429" tier="4095">
          <scte35:SpliceInsert spliceEventId="1" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="1" availNum="1" availsExpected="1">
            <scte35:Program><scte35:SpliceTime ptsTime="5672624400"/></scte35:Program>
            <scte35:BreakDuration autoReturn="true" duration="5400000"/>
          </scte35:SpliceInsert>
        </scte35:SpliceInfoSection>
      </Event>
    </EventStream>
    ...
  </Period>

התראה מוקדמת על הפסקת פרסום בשידורים חיים

במקרה של שילוב מודעות בשידור חי, תגי המודעות מעובדים באופן סינכרוני כש-Video Stitcher API מקבל את סמן המודעה נקודת יציאה להפסקת פרסומות במניפסט של שידור חי. העיבוד הסינכרוני הזה מפעיל מספר גדול של בקשות לתגי מודעות וגורם לעיכובים ארוכים בבקשות להפעלת השידור החי אם השידור עמוס מאוד.

התראה מוקדמת על הפסקת פרסום (EABN) מאפשרת ל-Video Stitcher API יותר זמן להכין מודעות, כי היא מודיעה ל-API על הפסקת פרסום שעומדת להתחיל.

התראה על הפסקה למודעה ב-HLS

כדי להודיע ל-API על הפסקת פרסום קרובה כדי שה-API יוכל להכין מודעות מראש, רשימת ההשמעה בפורמט HLS של שידור חי צריכה:

  • שימוש ב-#EXT-X-DATERANGE או ב-EXT-X-CUE-OUT כסמן המודעה
  • חזרה על סמן מודעה להפסקת שידור במניפסט המקור של השידור החי

#EXT-X-DATERANGE

כשמקודד המקור מתזמן הפסקה למודעות שצפויה להתחיל בקרוב, הוא יכול להוסיף סמן #EXT-X-DATERANGE cue-out למניפסט המקור. המאפיין X-TYPE של הסמן מציין את סוג סמן המודעה. כדי לקבל התראה על הפסקת פרסום מוקדמת, הערך של X-TYPE צריך להיות EABN. המאפיין START-TIME של הסמן מציין את זמן ההתחלה בפועל או המתוכנן של הפסקת הפרסומות. חובה לציין את המאפיין DURATION של סמן ההפסקה כדי לציין את משך ההפסקה למודעה. הסמן הזה נקרא EABN נקודת יציאה להפסקת פרסומות.

בתחילת ההפסקה למודעה בפועל, המקודד של המקור צריך להוסיף סמן #EXT-X-DATERANGE נקודת יציאה להפסקת פרסומות למניפסט המקור. מאפיין ID הסמן חייב להיות זהה לסימן היציאה המתאים של EABN. הערך של מאפיין START-TIME של הסמן צריך להיות זהה לזמן המדיה של הקטע שבו הסמן מוכנס. הסמן הזה נקרא הפסקת שידור מיידית.

קובץ המניפסט לדוגמה הבא מכיל אות יציאה אחד של EABN, אות יציאה מיידי אחד ואות כניסה אחד:

#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:7
#EXT-X-PROGRAM-DATE-TIME:2020-11-08T21:11:20.976Z
#EXT-X-MEDIA-SEQUENCE:239959
#EXT-X-DISCONTINUITY-SEQUENCE:2
#EXT-X-DATERANGE:ID="2415919105",X-TYPE="EABN",START-DATE="2020-11-08T21:11:28.976Z",DURATION=29.988,SCTE35-OUT=0xFC303...
#EXTINF:4.000,
1028/segment_239959.ts
#EXTINF:4.000,
1028/segment_239960.ts
#EXT-X-DATERANGE:ID="2415919105",START-DATE="2020-11-08T21:11:28.976Z",DURATION=29.988,SCTE35-OUT=0xFC303...
#EXTINF:4.000,
1028/segment_239961.ts
#EXTINF:4.000,
1028/segment_239962.ts
#EXTINF:4.000,
1028/segment_239963.ts
...
#EXT-X-DATERANGE:ID="2415919105",END-DATE="2020-11-08T21:11:48.976Z",SCTE35-IN=0xFC303...
#EXTINF:4.000,
1028/segment_239968.ts

#EXT-X-CUE-OUT

  • שימוש ב-#EXT-X-CUE-OUT כסמן המודעה
  • חזרה על סמן מודעה להפסקת שידור במניפסט המקור של השידור החי

כשמקודד המקור מתזמן הפסקה למודעה עתידית, הוא יכול גם להוסיף #EXT-X-CUE-OUTסמן של נקודת יציאה להפסקת פרסומות למניפסט המקור. המאפיין X-TYPE של הסמן מציין את סוג סמן המודעה. כדי לקבל התראה על הפסקת פרסום מוקדמת, הערך של X-TYPE צריך להיות EABN. במאפיין DURATION של סמן המודעה צריך לציין את משך ההפסקה למודעה. הסמן הזה נקרא EABN נקודת יציאה להפסקת פרסומות.

בתחילת ההפסקה למודעה בפועל, המקודד של המקור צריך להוסיף סמן #EXT-X-CUE-OUT נקודת יציאה להפסקת פרסומות למניפסט המקור. מאפיין ID הסמן חייב להיות זהה לסימן היציאה המתאים של EABN. הסמן הזה נקרא הפסקת פרסום מיידית.

קובץ המניפסט לדוגמה הבא מכיל נקודת יציאה להפסקת פרסומות אחת של EABN, נקודת יציאה להפסקת פרסומות מיידית אחת ונקודת חזרה לשידור אחת:

#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:7
#EXT-X-PROGRAM-DATE-TIME:2020-11-08T21:11:20.976Z
#EXT-X-MEDIA-SEQUENCE:239959
#EXT-X-DISCONTINUITY-SEQUENCE:2
#EXT-OATCLS-SCTE35:0xFC303...
#EXT-X-CUE-OUT:ID="2415919105",X-TYPE="EABN",DURATION=29.988
#EXTINF:4.000,
1028/segment_239959.ts
#EXTINF:4.000,
1028/segment_239960.ts
#EXT-OATCLS-SCTE35:0xFC303...
#EXT-X-CUE-OUT:ID="2415919105",DURATION=29.988
#EXTINF:4.000,
1028/segment_239961.ts
#EXTINF:4.000,
1028/segment_239962.ts
#EXTINF:4.000,
1028/segment_239963.ts
...
#EXT-X-CUE-IN:ID="2415919105"
#EXTINF:4.000,
1028/segment_239968.ts

התראה מוקדמת על הפסקה למודעות ב-DASH

כדי להודיע ל-API על הפסקת פרסום קרובה, כדי שה-API יוכל להכין מודעות מראש, צריך לחזור על אירוע סמן המודעה במניפסט של שידור חי ב-DASH ב-Main Period וב-Ad Break Period.

ההופעה הראשונה של התג Main Period מודיעה לממשק ה-API על הפסקה למודעות שעומדת להתחיל, וההופעה השנייה של התג Ad Break Period מציינת שההפסקה למודעות מתחילה באופן מיידי.

דוגמה לקובץ מניפסט:

<MPD>
<Period id="1">
   <!-- Main Period -->
   <EventStream timescale="90000"  schemeIdUri="urn:scte:scte35:2013:xml">
     <Event duration="5400000" presentationTime="53460000" id="1">
       <scte35:SpliceInfoSection>
          <scte35:SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
            <scte35:BreakDuration autoReturn="true" duration="5400000"/>
            </scte35:SpliceInsert>
        </scte35:SpliceInfoSection>
      </Event>
    </EventStream>
   ...
</Period>

<Period start="PT9M54S" id="2">
    <!-- Ad Break Period -->
   <EventStream timescale="90000"  schemeIdUri="urn:scte:scte35:2013:xml">
     <Event duration="5400000" id="1">
       <scte35:SpliceInfoSection>
          <scte35:SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
            <scte35:BreakDuration autoReturn="true" duration="5400000"/>
            </scte35:SpliceInsert>
        </scte35:SpliceInfoSection>
      </Event>
    </EventStream>
   ...
</Period>

<Period start="PT10M54S" id="3">
    <!-- Main Period -->
    ...
</Period>
</MPD>

המאמרים הבאים

איך מבצעים משימות ספציפיות ב-Video Stitcher API