סנכרון של תהליכי עבודה עם מדיה באמצעות תוכן של שידור חי עם קוד זמן

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

נתוני קוד הזמן צריכים להיות תואמים למפרט SMPTE 12M (ראו ST 12-2:2008). ב-H264, נתוני קוד הזמן מועברים בהודעת מידע משלים על תזמון התמונה (SEI). ב-H265, נתוני קוד הזמן מועברים בהודעת ה-SEI של קוד הזמן.

שימוש בטיימקוד מוטמע

כדי להשתמש בטיימקוד שמוטמע בזרם קלט, מוסיפים את timecodeConfig הבא למשאב Channel:

"timecodeConfig": {
  "source": "EMBEDDED_TIMECODE"
}

ערך ברירת המחדל של השדה source הוא MEDIA_TIMESTAMP.

כברירת מחדל, אזור הזמן UTC משמש לפרש את קוד הזמן. כדי להשתמש באזור זמן אחר, מגדירים את השדה timeZone או את השדה utcOffset:

"timecodeConfig": {
  "source": "EMBEDDED_TIMECODE",

  "timeZone": {"id": "America/Los_Angeles"}
  // or
  "utcOffset": "-28800s" // -8 hours from UTC
}

שעון הקיץ נלקח בחשבון כשמגדירים את השדה timeZone. פרטים נוספים זמינים במאמר בנושא איך מתבצעת הפרשנות של קוד הזמן של הקלט.

הכללת קוד זמן במניפסטים של הפלט

אפשר להגדיר את השדה useTimecodeAsTimeline לערך true כדי לכלול קוד זמן לכל מניפסט פלט:

"manifests": [
  {
    "key": "manifest_hls",
    "file_name": "manifest.m3u8",
    "type": "HLS",
    "muxStreams": ["mux_720p", "mux_540p"],
    "useTimecodeAsTimeline": true
  },
  {
    "key": "manifest_dash",
    "file_name": "manifest.mpd",
    "type": "DASH",
    "muxStreams": ["mux_720p", "mux_540p"],
    "useTimecodeAsTimeline": true
  }
]

קובץ מניפסט של HLS

בשידורים חיים בפורמט HLS, חותמת הזמן מופיעה כתג #EXT-X-PROGRAM-DATE-TIME לכל פלח בקובץ המניפסט של המדיה M3U8, ונראית בערך כך:

#EXTM3U
#EXT-X-VERSION:7
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-DISCONTINUITY-SEQUENCE:0
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:25.529Z
#EXTINF:1.265922
720p60_h264_ts-0000000000.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:26.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000001.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:28.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000002.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:30.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000003.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:32.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000004.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:34.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000005.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:36.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000006.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:38.795Z

#EXT-X-PROGRAM-DATE-TIME מכיל נתוני קוד זמן שנוצרו לפי פורמט ISO8601 ‫YYYY-MM-DDThh:mm:ss[.mmm]TZD כאשר:

  • YYYY היא השנה בארבע ספרות
  • MM הוא החודש בשתי ספרות (לדוגמה, 03 הוא מרץ)
  • DD הוא היום בחודש, מספר דו-ספרתי (01 עד 31)
  • T הוא תו קבוצתי שמציין את ההתחלה של רכיב הזמן
  • hh הן שתי הספרות של השעה (00 עד 23, לא כולל AM/PM)
  • mm הן שתי הספרות של הדקה (00 עד 59)
  • ss הן שתי הספרות של השניות (00 עד 59)
  • mmm הן שלוש הספרות של אלפית השנייה (000 עד 999)
  • TZD הוא ייעוד אזור הזמן (Z, ‏ ‎±hh:mm). האות Z מייצגת את שעון UTC, והערכים עם הסימן + או – מציינים את ההפרש בין השעה המקומית לשעון UTC.

קובץ מניפסט של DASH

בשידורים חיים בפורמט DASH, המאפיין availabilityStartTime בקובץ המניפסט MPD מוגדר לטיימקוד הראשוני ונראה כך:

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" profiles="urn:mpeg:dash:profile:isoff-live:2011"
 type="dynamic" minBufferTime="PT4S" mediaPresentationDuration="PT0H0M473.262S"
 availabilityStartTime="2023-05-19T17:44:16.881Z">

availabilityStartTime מכיל נתוני קוד זמן שנוצרו לפי פורמט ISO8601 ‫YYYY-MM-DDThh:mm:ss[.mmm]TZD כאשר:

  • YYYY היא השנה בארבע ספרות
  • MM הוא החודש בשתי ספרות (לדוגמה, 03 הוא מרץ)
  • DD הוא היום בחודש, מספר דו-ספרתי (01 עד 31)
  • T הוא תו קבוצתי שמציין את ההתחלה של רכיב הזמן
  • hh הן שתי הספרות של השעה (00 עד 23, לא כולל AM/PM)
  • mm הן שתי הספרות של הדקה (00 עד 59)
  • ss הן שתי הספרות של השניות (00 עד 59)
  • mmm הן שלוש הספרות של אלפית השנייה (000 עד 999)
  • TZD הוא ייעוד אזור הזמן (Z, ‏ ‎±hh:mm). האות Z מייצגת את שעון UTC, והערכים עם הסימן + או – מציינים את ההפרש בין השעה המקומית לשעון UTC.

איך נתוני קוד הזמן מנותחים

קוד הזמן המוטמע מנותח מתוך הפריימים הראשונים של הסרטון. חותמות הזמן של המדיה בפלט מוזזות קדימה לאחר מכן, פריים אחרי פריים. אין סנכרון מחדש בין זמני הקלט והפלט עד לניתוק של זרם הקלט וחיבורו מחדש.

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

אפשר לסנכרן את התזמון בסטרימינג כפול אם מחולל קוד הזמן בצינור ההפקה זהה או נעול במקודדי התוכן הראשיים והמשניים (ראו את הסרטון What is Output Locking?‎).

איך קוד הזמן של הקלט מפורש

קוד הזמן בהודעת SEI של תזמון תמונה מכיל רק שעה (16:30:00;10). כדי לכלול קוד זמן במניפסטים של פלט, נדרשים גם תאריך וגם שעה, כמו התאריך והשעה המלאים (2021-12-06T16:30:00.333Z) או זמן ראשית יוניקס (1638837000333).

כשמפרשים את חותמת הזמן של SEI כפורמט של תאריך ושעה, Live Stream API תמיד מניח שזרם הקלט הנכנס הוא שידור חי או כמעט שידור חי. ב-Live Stream API נעשה שימוש באזור הזמן שצוין ב-timecodeConfig של הערוץ כדי לפרש את חותמת הזמן של SEI כך שתהיה קרובה ככל האפשר לזמן הנוכחי, אבל לא מאוחרת ממנו.

לדוגמה, נניח שממשק Live Stream API מקבל זרם קלט בשעה הנוכחית 2021-12-06T21:00:00Z ב-UTC. בטבלה הבאה מוצג אופן ההמרה של חותמת הזמן של SEI לפורמט של תאריך ושעה:

מזהה אזור זמן קוד זמן של SEI הזמן מתורגם לפורמט שעון מקומי הפירוש הוא לפי שעון UTC
UTC 16:30:00;10 2021-12-06T16:30:00.333+00:00 2021-12-06T16:30:00.333Z
America/Los_Angeles 16:30:00;10 2021-12-05T16:30:00.333-08:00 2021-12-06T00:30:00.333Z
America/New_York 16:30:00;10 2021-12-05T16:30:00.333-05:00 2021-12-05T21:30:00.333Z
Asia/Bangkok 16:30:00;10 2021-12-06T16:30:00.333+07:00 2021-12-06T09:30:00.333Z
America/Los_Angeles 03:30:00;10 2021-12-06T03:30:00.333-08:00 2021-12-06T11:30:00.333Z
Asia/Bangkok 03:30:00;10 2021-12-07T03:30:00.333+07:00 2021-12-06T20:30:00.333Z

חשוב לדעת שהזמנים המפורשים אף פעם לא מאוחרים יותר מהזמן הנוכחי ב-UTC של 2021-12-06T21:00:00Z.