תמיכה בהזזת זמן

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

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

איור 1. פקדי הפעלה ב-Android TV שמשמשים להזזת זמן.

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

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

הוספת תמיכה בהזזת זמן

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

השיטות של TvInputService.Session שמטמיעים הן הבאים:

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

אם אתם משתמשים בספרייה הנלווית של TIF כדי להטמיע את כיתה אחת (TvInputService.Session), מקבלים באופן אוטומטי של העברת זמן באמצעות ExoPlayer. אפשר להשתמש או לעקוף את השיטות של API לשינוי זמן BaseTvInputService.Session ולספק משאב משלך יישום בפועל. למידע נוסף על השימוש בספרייה הנלווית של TIF, ראו יצירת שירות קלט לטלוויזיה באמצעות הספרייה הנלווית של TIF.

הקלטת תוכן בתחילת סשן

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

מאחר שהמשתמש יכול להשתמש בהזזת זמן בכל שלב בזמן הצפייה בתוכן של תוכניות, בטלוויזיה שירות הקלט חייב להתחיל להקליט תוכן בהזזת-זמן ברגע שהמשתמש שירים לערוץ onTune() יישום בפועל. צריך גם להודיע למערכת שניתן להקליט באמצעות שיחה notifyTimeShiftStatusChanged(int), כפי שמתואר שליחת התראה למערכת לגבי סטטוס העברת הזמן .

ניהול האחסון של תוכן מוקלט

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

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

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

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

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

שליחת התראה למערכת לגבי סטטוס העברת הזמן

אם שירות הקלט של הטלוויזיה תומך בהקלטה תוך כדי צפייה, התקשר notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE) ב- יישום של onTune() כשמשתמש מכוונן לערוץ.

כדי להודיע למערכת אם יש אפשרות להזזת זמן של שירות הקלט שינוי, שימוש notifyTimeShiftStatusChanged(int) לדוגמה, אם שירות הקלט של הטלוויזיה לא יכול לתמוך בהזזת זמן עקב מגבלות מקום אחסון או מסיבות אחרות, אפשר להתקשר notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE)

אם שירות הקלט של הטלוויזיה לא תומך בכלל בהזזת זמן, התקשר notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED) כשנוצר סשן הפעלה. המערכת מתייחסת לכל שירות קלט אף פעם לא מתקשר notifyTimeShiftStatusChanged() בתור שירות קלט שלא יכול תמיכה בהקלטה תוך כדי צפייה. זה מתייחס לשירותי קלט באמצעות API ברמה 22 וגם מוקדם יותר.

מעקב אחר זמני ההפעלה

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

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

Kotlin

override fun onTimeShiftGetCurrentPosition(): Long =
        tvPlayer?.run {
            currentProgram?.let { program ->
                currentPosition + program.startTimeUtcMillis
            }
        } ?: TvInputManager.TIME_SHIFT_INVALID_TIME

Java

@Override
public long onTimeShiftGetCurrentPosition() {
  if (getTvPlayer() != null && currentProgram != null) {
    return getTvPlayer().getCurrentPosition() +
      currentProgram.getStartTimeUtcMillis();
  }
  return TvInputManager.TIME_SHIFT_INVALID_TIME;
}

חשוב לוודא ששעת ההתחלה שציינתם כשהמערכת מתקשרת אל onTimeShiftGetStartPosition() אף פעם לא גדול יותר ממיקום הזמן הנוכחי שציינתם onTimeShiftGetCurrentPosition(). המערכת משתמשת בקריאות האלה כדי לעדכן את משך זמן ההקלטה בממשק המשתמש של פקדי ההפעלה.

תמיכה בפרמטרים של הפעלה

כדי לשנות את מהירות ההפעלה במהלך הזזת זמן, המערכת משתמשת בפרמטרים של הפעלה. עבור לדוגמה, אם המשתמש מחליט להריץ אחורה את ההפעלה הנוכחית, הפעלה חדשה הפרמטרים מועברים לאפליקציה שלך במהירות הפעלה שלילית. האפשרות 'הקלטה תוך כדי צפייה' תומכת גם בכמה רמות שונות, פי 2 או 3x של מהירות ההפעלה כדי להריץ אחורה או קדימה.

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

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

אחרי שהפרמטרים הוגדרו, אל תשנו את ההגדרות, אלא אם המשתמשים יוצרת פקודת הפעלה שדורשת פרמטר אחר או מתגים אחרים לערוץ חדש.