אתם יכולים להשתמש בממשקי API של שינוי זמן בשירות קלט הטלוויזיה כדי לאפשר למשתמשים להשהות, להריץ אחורה ולהריץ קדימה תוכניות בשידור חי בערוצי השירות שלכם. אם האפליקציה תומכת בהזזת ציר הזמן, המשתמשים יכולים לצפות בתוכן שלכם בצורה גמישה יותר:
- משתמשים יכולים להשהות תוכניות בזמן טיפול בהפרעה לטווח קצר, כך שלעולם לא יפספסו רגעים חשובים.
- המשתמשים יכולים להריץ קדימה תוכן שהם כבר ראו או תוכן שלא מעניין אותם.
- משתמשים יכולים להריץ אחורה ולצפות שוב ברגעים אהובים בתוכן התוכנית.
הזזת ציר הזמן מתבצעת באמצעות פלחים קצרים, זמניים ומוקלטים של נתוני תוכניות כדי לאפשר הפעלה של תוכניות בשידור חי. המשתמשים לא יכולים להפעיל הקלטות של שידורים מושהים מחוץ לסשן ההפעלה הנוכחי. משמעות הדבר היא שהם לא יכולים להשתמש בהזזת זמן כדי להשהות תוכנית לצפייה למחרת או להשהות תוכנית לצפייה מאוחר יותר בזמן שהם עוברים לערוץ אחר.
אם רוצים לאפשר למשתמשים להקליט תוכן של תוכניות כדי לצפות בו מחוץ להפעלה הנוכחית, צריך להשתמש בממשקי ה-API להקלטת תוכניות לטלוויזיה.
הוספת תמיכה בהזזה של ציר הזמן
כדי להוסיף תמיכה בהזזת זמן לשירות קלט הטלוויזיה, צריך להטמיע את ממשקי ה-API של הזזת הזמן במחלקה TvInputService.Session, לטפל בהקלטה ובהפעלה של הקלטות של הזזת זמן באפליקציה ולהודיע למערכת ששירות הקלט מספק תמיכה בהזזת זמן.
ה-TvInputService.Session שיטות שאתה מיייש הן הבאות:
-
onTimeShiftGetCurrentPosition(): הפונקציה שנקראת על ידי המערכת כדי לקבל את מיקום ההפעלה הנוכחי באלפיות השנייה. פרטים נוספים זמינים בקטע מעקב אחר זמני ההפעלה. -
onTimeShiftGetStartPosition(): הפונקציה נקראת על ידי המערכת כדי לקבל את מיקום ההתחלה של ההקלטה הנוכחית של שידור מושהה באלפיות השנייה. פרטים נוספים זמינים בקטע מעקב אחר זמני ההפעלה. onTimeShiftPause(): נקרא כאשר המשתמש עוצר את ההפעלה.-
onTimeShiftResume(): מופעלת כשהמשתמש מפעיל מחדש את ההפעלה. -
onTimeShiftSeekTo(long): מופעלת כשהמערכת צריכה לחפש מיקום זמן חדש. בדרך כלל, המיקום החדש הוא בין מיקום ההתחלה למיקום הנוכחי. -
onTimeShiftSetPlaybackParams(PlaybackParams): מופעל על ידי המערכת כדי לספק פרמטרים של הפעלה, כמו מהירות הפעלה, עבור הסשן הנוכחי. פרטים נוספים זמינים בקטע פרמטרים של הפעלה.
מידע נוסף על האופן שבו מודיעים למערכת ששירות הקלט תומך בהזזה של ציר הזמן זמין בקטע הודעה למערכת על סטטוס ההזזה של ציר הזמן.
אם אתם משתמשים בספריית TIF Companion כדי להטמיע את המחלקה TvInputService.Session, אתם מקבלים באופן אוטומטי הטמעה של שינוי מיקום בזמן שמשתמשת ב-ExoPlayer. אתם יכולים להשתמש בהטמעה הזו או לבטל את השיטות של Time-Shifting API ב-BaseTvInputService.Session ולספק הטמעה משלכם. מידע נוסף על שימוש בספריית העזר של TIF זמין במאמר יצירת שירות קלט לטלוויזיה באמצעות ספריית העזר של TIF.
הקלטת תוכן כשסשן מתחיל
משתמש יכול להשהות, להריץ אחורה ולהריץ קדימה תוכן של תוכנית על ידי גישה ללחצני השליטה בהפעלה של הערוץ. אפשר לעשות זאת על ידי לחיצה על Select בזמן הצפייה בתוכן ומעבר ללחצני השליטה בהפעלה, או על ידי שימוש בלחצני שליטה בהפעלה ייעודיים במכשיר שמחובר לרשת אחרת.
מכיוון שהמשתמש יכול להשתמש בהזזת זמן בכל שלב בזמן הצפייה בתוכן של התוכנית, שירות קלט הטלוויזיה שלכם חייב להתחיל להקליט תוכן של הזזת זמן ברגע שהמשתמש עובר לערוץ בהטמעה שלכם ב-onTune(). בנוסף, צריך להודיע למערכת שאתם יכולים להקליט. לשם כך, צריך להתקשר אל notifyTimeShiftStatusChanged(int), כמו שמתואר בקטע הודעה למערכת על סטטוס ההזזה של ציר הזמן.
ניהול האחסון של תוכן מוקלט
שירות קלט הטלוויזיה אחראי לאחסון הקלטות של שידורים מושהים באחסון הפרטי של האפליקציה ולהפעלת התוכן כשהמערכת קוראת לשיטות ההשהיה שלכם, כמו onTimeShiftResume().
אם התוכן שלכם כבר מאוחסן בענן והאפליקציה יכולה לנהל הקלטות של שידורים מושהים בענן, אתם יכולים להשתמש באחסון בענן במקום באחסון באפליקציה.
אם התוכן שלכם כולל תוכן מוגן, שירות הקלט בטלוויזיה אחראי להצפנה נכונה של תוכן מוקלט ולפענוח של תוכן במהלך ההפעלה.
תוכן וידאו מוקלט יכול לתפוס נפח אחסון גדול, ולכן צריך לנהל אותו בקפידה במהלך הפעלת הסשן. אם משך ההפעלה של התוכן חורג ממשך הזמן שאפשר להקליט ולאחסן לצורך צפייה בתוכניות במועד שנוח לכם, צריך לשנות את ההקלטה של התוכן לצפייה במועד שנוח לכם כדי לשמור את המאגר הנוכחי, אבל לוודא שהשעה הנוכחית מתועדת. לדוגמה, אם המשתמש צופה בתוכן במשך 31 דקות והגודל המקסימלי של ההקלטה עם הזזת זמן הוא 30 דקות, צריך לשנות את ההקלטה ואת זמן ההתחלה כדי שההקלטה תכלול תוכן מדקה 1 עד דקה 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 ומטה.
מעקב אחר זמני ההפעלה
מיקום ההתחלה של הקלטה עם הזזה בזמן הוא המיקום המוקדם ביותר בזמן מוחלט, באלפיות השנייה מאז תקופת ה-Epoch, שאליו המשתמש יכול לעבור. בדרך כלל זה הזמן שבו הפעלת הסרטון מתחילה אחרי שמתבצעת קריאה ל-onTune().
עם זאת, אם המשתמש צופה בכמות תוכן שגדולה מהכמות שהאפליקציה יכולה להקליט, צריך להתחיל להקליט פלח חדש של תוכן לצפייה בשידור חי עם אפשרות להשהיה והרצה, ולעדכן את שעת ההתחלה בהתאם.
המיקום הנוכחי של הקלטה בהשהיה הוא מיקום ההפעלה הנוכחי, באלפיות שנייה מאז ראשית זמן יוניקס. המיקום הזה משתנה כל הזמן במהלך ההפעלה. בדרך כלל, אפשר להשתמש במנוע ההפעלה כדי לקבוע את הערך הזה, כמו בדוגמה הבאה:
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().
המערכת משתמשת בשיחות האלה כדי לעדכן את משך ההזזה בזמן בממשק המשתמש של אמצעי השליטה בהפעלה.
תמיכה בפרמטרים של הפעלה
כדי לשנות את מהירות ההפעלה במהלך הזזת ציר הזמן, המערכת משתמשת בפרמטרים של ההפעלה. לדוגמה, אם המשתמש מחליט להריץ אחורה את ההפעלה הנוכחית, פרמטרים חדשים של הפעלה מועברים לאפליקציה שלך עם מהירות הפעלה שלילית. הזזת ציר הזמן תומכת גם בכמה רמות שונות של מהירות הפעלה, כמו x2 או x3, להרצה אחורה או קדימה.
המערכת קוראת לשיטה onTimeShiftSetPlaybackParams(PlaybackParams) עם אובייקט PlaybackParams שמכיל פרמטרים של הסשן הנוכחי. השתמש במידע זה כדי להגדיר את מנוע הפעלת המדיה שלך כראוי.
אם מנוע ההפעלה לא תומך בפרמטר, צריך לחקות את ההתנהגות הצפויה בצורה הכי טובה שאפשר. לדוגמה, אם מנוע ההפעלה לא תומך במהירות x2, אפשר להשתמש בפעולות חוזרות של חיפוש במנוע ההפעלה כדי להשיג מהירות הפעלה כפולה בערך.
אחרי שמגדירים את הפרמטרים, לא משנים את ההגדרות אלא אם המשתמש מנפיק פקודת הפעלה שדורשת פרמטר אחר או עובר לערוץ חדש.