במדריך הזה מתוארים סמני המודעות שנתמכים על ידי Video Stitcher API. ה-API של Video Stitcher מזהה את הגבולות של ההפסקות למודעות באמצעות סמני מודעות במניפסט HLS/DASH של מקור השידור החי, ומבצע שילוב של מודעות במהלך הפסקה למודעות בכל סשן של השידור החי.
לפני שמתחילים
חשוב להכיר את מושגי המבוא והטרמינולוגיה של Video Stitcher API. מידע נוסף זמין בסקירה הכללית הטכנית.
אפשר לעיין במפרט SCTE-35 בנושא הודעת רמז להוספת תוכנית דיגיטלית לשידור בכבלים.
פקודות SCTE-35
סמני מודעות בשידור חי מיוצגים על ידי אותות SCTE-35 רגילים. בתוך רשימת הפקודות של SCTE-35, Video Stitcher API תומך בשתי הפקודות הבאות:
splice_inserttime_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
בתהליך העבודה של השילוב עם Google Ad Manager, הודעות SCTE35 עשויות להכיל ערכים מסוימים שאפשר להחליף בתג המודעה. כאן אפשר לעיין ברשימת פקודות המאקרו הנתמכות.
מוודאים שהמאקרו שנבחר מופיע בadTagUri registered on the live config
לדוגמה, אם הודעת SCTE35 מעבירה ערך ל-%%SPLICE_INSERT_EVENT_ID%%, צריך לוודא שהמאקרו קיים ב-adTagUri, כמו בדוגמה הבאה:
AD_TAG_URI¯o=%%SPLICE_INSERT_EVENT_ID%%
כש-Video Stitcher API מבקש את המטא-נתונים של המודעה וההגדרה splice_insert
SCTE35 message has splice_insert_event_id מוגדרת ל-123, הוא משתמש בתג המודעה הבא:
AD_TAG_URI¯o=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+binurn: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