कॉन्टेंट रिकॉर्ड करने की सुविधा

टीवी इनपुट सेवाओं की मदद से, उपयोगकर्ता टाइम-शिफ़्टिंग एपीआई का इस्तेमाल करके, चैनल पर चल रहे कॉन्टेंट को रोक सकता है और फिर से शुरू कर सकता है. Android 7.0 में, टाइम-शिफ़्टिंग की सुविधा को बेहतर बनाया गया है. इसमें उपयोगकर्ता, रिकॉर्ड किए गए कई सेशन सेव कर सकता है.

उपयोगकर्ता, रिकॉर्डिंग को पहले से शेड्यूल कर सकते हैं या प्रोग्राम देखते समय रिकॉर्डिंग शुरू कर सकते हैं. सिस्टम में रिकॉर्डिंग सेव होने के बाद, उपयोगकर्ता सिस्टम टीवी ऐप्लिकेशन का इस्तेमाल करके रिकॉर्डिंग को ब्राउज़ कर सकता है, उसे मैनेज कर सकता है, और उसे वापस चला सकता है.

अगर आपको अपनी टीवी इनपुट सेवा के लिए रिकॉर्डिंग की सुविधा देनी है, तो आपको सिस्टम को यह बताना होगा कि आपका ऐप्लिकेशन रिकॉर्डिंग की सुविधा के साथ काम करता है. साथ ही, आपको प्रोग्राम रिकॉर्ड करने की सुविधा लागू करनी होगी. इसके अलावा, रिकॉर्डिंग के दौरान होने वाली किसी भी गड़बड़ी को ठीक करना होगा और उसके बारे में बताना होगा. साथ ही, आपको रिकॉर्ड किए गए सेशन मैनेज करने होंगे.

रिकॉर्डिंग की सुविधा के बारे में जानकारी देना

सिस्टम को यह बताने के लिए कि आपकी टीवी इनपुट सेवा, रिकॉर्डिंग की सुविधा देती है, अपनी सेवा के मेटाडेटा की XML फ़ाइल में android:canRecord एट्रिब्यूट को true पर सेट करें:

<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
  android:canRecord="true"
  android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />

सेवा के मेटाडेटा की फ़ाइल के बारे में ज़्यादा जानने के लिए, मेनिफ़ेस्ट में टीवी इनपुट सेवा के बारे में जानकारी देना लेख पढ़ें.

इसके अलावा, इन चरणों का पालन करके, अपने कोड में रिकॉर्डिंग की सुविधा के बारे में बताया जा सकता है:

  1. अपनी टीवी इनपुट सेवा onCreate तरीके में, TvInputInfo.Builder क्लास का इस्तेमाल करके नया TvInputInfo ऑब्जेक्ट बनाएं.
  2. नया TvInputInfo ऑब्जेक्ट बनाते समय, build को कॉल करने से पहले setCanRecord(true) को कॉल करें. इससे यह पता चलेगा कि आपकी सेवा में रिकॉर्डिंग की सुविधा उपलब्ध है.
  3. TvInputManager.updateTvInputInfo को कॉल करके, अपने TvInputInfo ऑब्जेक्ट को सिस्टम में रजिस्टर करें.

सेशन रिकॉर्ड करना

जब आपकी टीवी इनपुट सेवा यह रजिस्टर कर लेती है कि वह रिकॉर्डिंग की सुविधा के साथ काम करती है, तब सिस्टम आपके TvInputService.onCreateRecordingSession तरीके को कॉल करता है. ऐसा तब होता है, जब उसे आपके ऐप्लिकेशन की रिकॉर्डिंग की सुविधा को ऐक्सेस करना होता है. अपनी TvInputService.RecordingSession सबक्लास लागू करें और onCreateRecordingSession कॉलबैक फ़ंक्शन के ट्रिगर होने पर उसे वापस भेजें. यह सबक्लास, सही चैनल डेटा पर स्विच करने, अनुरोध किए गए डेटा को रिकॉर्ड करने, और सिस्टम को रिकॉर्डिंग की स्थिति और गड़बड़ियों के बारे में बताने के लिए ज़िम्मेदार होता है.

जब सिस्टम, चैनल यूआरआई पास करके RecordingSession.onTune को कॉल करता है, तब उस चैनल पर ट्यून करें जिसे यूआरआई में बताया गया है. सिस्टम को सूचना दें कि आपका ऐप्लिकेशन चुने गए चैनल पर ट्यून हो गया है. इसके लिए, notifyTuned को कॉल करें. अगर आपका ऐप्लिकेशन सही चैनल पर ट्यून नहीं हो सकता, तो notifyError को कॉल करें.

इसके बाद, सिस्टम RecordingSession.onStartRecording कॉलबैक को शुरू करता है. आपका ऐप्लिकेशन तुरंत रिकॉर्डिंग शुरू कर दे. जब सिस्टम इस कॉलबैक को शुरू करता है, तो वह एक यूआरआई दे सकता है. इसमें उस प्रोग्राम के बारे में जानकारी होती है जिसे रिकॉर्ड किया जाना है. रिकॉर्डिंग पूरी होने के बाद, इस डेटा को RecordedPrograms डेटा टेबल में कॉपी करें.

आखिर में, सिस्टम RecordingSession.onStopRecording को कॉल करता है. इस समय, आपके ऐप्लिकेशन को तुरंत रिकॉर्डिंग बंद कर देनी चाहिए. आपको RecordedPrograms टेबल में एक एंट्री भी बनानी होगी. इसमें RecordedPrograms.COLUMN_RECORDING_DATA_URI कॉलम में रिकॉर्ड किए गए सेशन के डेटा का यूआरआई और onStartRecording को किए गए शुरुआती कॉल में सिस्टम की ओर से दी गई प्रोग्राम की कोई भी जानकारी शामिल होनी चाहिए.

RecordedPrograms टेबल को ऐक्सेस करने के तरीके के बारे में ज़्यादा जानने के लिए, रिकॉर्ड किए गए सेशन मैनेज करना सेक्शन देखें.

रिकॉर्डिंग से जुड़ी गड़बड़ियां ठीक करना

अगर रिकॉर्डिंग के दौरान कोई गड़बड़ी होती है और रिकॉर्ड किया गया डेटा इस्तेमाल नहीं किया जा सकता, तो सिस्टम को इसकी सूचना देने के लिए notifyError को कॉल करें. रिकॉर्डिंग सेशन बनाने के बाद, notifyError को भी कॉल किया जा सकता है. इससे सिस्टम को यह पता चल जाएगा कि आपका ऐप्लिकेशन अब सेशन रिकॉर्ड नहीं कर सकता.

अगर रिकॉर्डिंग के दौरान कोई गड़बड़ी होती है, लेकिन आपको उपयोगकर्ताओं को रिकॉर्डिंग का कुछ हिस्सा दिखाना है, तो notifyRecordingStopped को कॉल करें, ताकि सिस्टम रिकॉर्डिंग के कुछ हिस्से का इस्तेमाल कर सके.

रिकॉर्ड किए गए सेशन मैनेज करना

सिस्टम, रिकॉर्डिंग की सुविधा वाले सभी चैनल ऐप्लिकेशन के रिकॉर्ड किए गए सभी सेशन की जानकारी को RecordedProgramsकॉन्टेंट प्रोवाइडर टेबल में सेव करता है. इस जानकारी को RecordedPrograms कॉन्टेंट रिकॉर्डिंग यूआरआई के ज़रिए ऐक्सेस किया जा सकता है. कॉन्टेंट उपलब्ध कराने वाले एपीआई का इस्तेमाल करके, इस टेबल से एंट्री पढ़ी जा सकती हैं, जोड़ी जा सकती हैं, और मिटाई जा सकती हैं.

कॉन्टेंट देने वाली कंपनी के डेटा को इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, कॉन्टेंट देने वाली कंपनी के बारे में बुनियादी जानकारी लेख पढ़ें.

सबसे सही तरीके

टीवी डिवाइसों में स्टोरेज सीमित हो सकता है. इसलिए, रिकॉर्ड किए गए सेशन सेव करने के लिए स्टोरेज का इस्तेमाल सोच-समझकर करें. रिकॉर्ड किए गए सेशन को सेव करने के लिए, डिवाइस में जगह कम होने पर RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) का इस्तेमाल करें.

जब उपयोगकर्ता रिकॉर्डिंग शुरू करे, तब डेटा को जल्द से जल्द रिकॉर्ड करना शुरू करें. इसके लिए, समय लेने वाले सभी टास्क पहले ही पूरे कर लें. जैसे, स्टोरेज स्पेस को ऐक्सेस करना और उसे असाइन करना. ऐसा तब करें, जब सिस्टम onCreateRecordingSession कॉलबैक को शुरू करे. ऐसा करने से, onStartRecording कॉलबैक के ट्रिगर होने पर, रिकॉर्डिंग तुरंत शुरू की जा सकती है.