ExoPlayer, लाइव और मांग पर उपलब्ध, दोनों तरह के RTSP का इस्तेमाल करता है. इस्तेमाल किए जा सकने वाले सैंपल फ़ॉर्मैट और नेटवर्क के टाइप नीचे दिए गए हैं.
इस्तेमाल किए जा सकने वाले सैंपल फ़ॉर्मैट
- H264 (एसडीपी मीडिया की जानकारी में एफ़एमटीपी में एसपीएस/पीपीएस डेटा शामिल होना चाहिए एट्रिब्यूट की मदद से डिकोडर शुरू करने के लिए कहा जाता है).
- AAC (ADTS बिटस्ट्रीम के साथ).
- AC3.
इस्तेमाल किए जा सकने वाले नेटवर्क टाइप
- यूडीपी यूनिकास्ट पर आरटीपी (मल्टीकास्ट का इस्तेमाल नहीं किया जा सकता).
- टीसीपी का इस्तेमाल करके आरटीएसपी पर इंटरलीव किया गया आरटीएसपी, आरटीएसपी.
MediaItem का इस्तेमाल किया जा रहा है
आरटीएसपी स्ट्रीम चलाने के लिए, आपको आरटीएसपी मॉड्यूल पर निर्भर होना होगा.
Kotlin
implementation("androidx.media3:media3-exoplayer-rtsp:1.4.1")
ग्रूवी
implementation "androidx.media3:media3-exoplayer-rtsp:1.4.1"
इसके बाद, आरटीएसपी यूआरआई के लिए MediaItem
बनाया जा सकता है और उसे प्लेयर को दिया जा सकता है.
Kotlin
// Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(rtspUri)) // Prepare the player. player.prepare()
Java
// Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(rtspUri)); // Prepare the player. player.prepare();
पुष्टि करना
ExoPlayer पर RTSP BASIC और DIGEST प्रमाणीकरण के साथ वीडियो चलाया जा सकता है. चलाने के लिए
सुरक्षित RTSP कॉन्टेंट के लिए, MediaItem
के यूआरआई को
पुष्टि करने की जानकारी. खास तौर पर, यूआरआई इस फ़ॉर्मैट में होना चाहिए
rtsp://<username>:<password>@<host address>
.
RtspMediaSource का इस्तेमाल करना
पसंद के मुताबिक बनाने के ज़्यादा विकल्पों के लिए, RtspMediaSource
बनाएं और उसे पास करें
MediaItem
के बजाय, सीधे प्लेयर पर जाएं.
Kotlin
// Create an RTSP media source pointing to an RTSP uri. val mediaSource: MediaSource = RtspMediaSource.Factory().createMediaSource(MediaItem.fromUri(rtspUri)) // Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media source to be played. player.setMediaSource(mediaSource) // Prepare the player. player.prepare()
Java
// Create an RTSP media source pointing to an RTSP uri. MediaSource mediaSource = new RtspMediaSource.Factory().createMediaSource(MediaItem.fromUri(rtspUri)); // Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media source to be played. player.setMediaSource(mediaSource); // Prepare the player. player.prepare();
एनएटी (आरटीपी/टीसीपी सपोर्ट) की मदद से आरटीएसपी का इस्तेमाल करना
ExoPlayer, आरटीपी ट्रांसपोर्ट के लिए डिफ़ॉल्ट प्रोटोकॉल के तौर पर यूडीपी का इस्तेमाल करता है.
एक NAT लेयर के पीछे RTSP स्ट्रीम करते समय, हो सकता है कि NAT डिवाइस पर आने वाले आरटीपी/यूडीपी पैकेट. ऐसा तब होता है, जब NAT में ज़रूरी यूडीपी पोर्ट मैपिंग. अगर ExoPlayer को यह पता चलता है कि कोई इनकमिंग इनकमिंग कॉल नहीं किया गया है, तो कुछ समय के लिए RTP पैकेट, और प्लेबैक अभी तक शुरू नहीं हुआ है, ExoPlayer रोते हुए मौजूदा RTSP प्लेबैक सत्र को कम करें, और RTP-over-RTSP का इस्तेमाल करके फिर से वीडियो चलाने की कोशिश करें (RTSP के लिए खोले गए टीसीपी कनेक्शन का इस्तेमाल करके आरटीपी पैकेट ट्रांसमिट करना).
टीसीपी से फिर से कोशिश करने के टाइम आउट को, तरीके को कॉल करके पसंद के मुताबिक बनाया जा सकता है
RtspMediaSource.Factory.setTimeoutMs()
. उदाहरण के लिए, अगर टाइम आउट
चार सेकंड के बाद, प्लेयर यूडीपी के चार सेकंड के बाद टीसीपी का इस्तेमाल करके फिर से कोशिश करेगा
कोई गतिविधि नहीं हुई है.
टाइम आउट सेट करने से, स्ट्रीम के खत्म होने के लॉजिक पर भी असर पड़ता है. इसका मतलब है कि कोई पॉइंट नहीं मिलने पर ExoPlayer, वीडियो खत्म होने की सूचना देगा टाइम आउट सेट करने का कुल समय. इस वैल्यू को बहुत कम पर सेट करने से, नेटवर्क की खराब स्थिति के तहत स्ट्रीम-ऑफ़-स्ट्रीम सिग्नल.
आरटीपी/टीसीपी, कुछ नेटवर्क सेटअप के साथ बेहतर तरीके से काम करता है. कॉन्फ़िगर किया जा सकता है
ExoPlayer, डिफ़ॉल्ट रूप से आरटीपी/टीसीपी का इस्तेमाल
RtspMediaSource.Factory.setForceUseRtpTcp()
.
कस्टम Socketफ़ैक्ट्री पास करना
कस्टम SocketFactory
इंस्टेंस तब काम आ सकते हैं, जब खास रूटिंग
(उदाहरण के लिए, जब आरटीएसपी ट्रैफ़िक को कोई खास इंटरफ़ेस पास करना हो या
सॉकेट को अतिरिक्त कनेक्टिविटी फ़्लैग की ज़रूरत है).
डिफ़ॉल्ट रूप से, RtspMediaSource
Java की स्टैंडर्ड सॉकेट फ़ैक्ट्री का इस्तेमाल करेगा
(SocketFactory.getDefault()
) रिमोट एंडपॉइंट से कनेक्शन बनाने के लिए.
इस व्यवहार को इसका इस्तेमाल करके बदला जा सकता है
RtspMediaSource.Factory.setSocketFactory()
.
Kotlin
// Create an RTSP media source pointing to an RTSP uri and override the socket // factory. val mediaSource: MediaSource = RtspMediaSource.Factory() .setSocketFactory(...) .createMediaSource(MediaItem.fromUri(rtspUri))
Java
// Create an RTSP media source pointing to an RTSP uri and override the socket // factory. MediaSource mediaSource = new RtspMediaSource.Factory() .setSocketFactory(...) .createMediaSource(MediaItem.fromUri(rtspUri));