एक एंड्रॉइड फोन से दूसरे वाईफाई पर लाइव-स्ट्रीम वीडियो


115

मैंने इंटरनेट पर दिनों के लिए खोजा है कि कैसे एक एंड्रॉइड फोन से वाईफाई कनेक्शन पर एक एंड्रॉइड फोन से दूसरे एंड्रॉइड फोन पर वीडियो स्ट्रीमिंग सुविधा लागू की जाए लेकिन मुझे कुछ भी उपयोगी नहीं मिल सकता है। मैंने नमूना कोड, स्टैकओवरफ़्लो, गूगल, एंड्रॉइड ब्लॉग्स के लिए एंड्रॉइड डेवलपर्स को देखा लेकिन कुछ भी नहीं। सभी मैं पा सकते हैं स्ट्रीमिंग के लिए किसी तरह का फोन-टू-डेस्कटॉप या डेस्कटॉप-टू-फोन समाधान, लेकिन कुछ भी नहीं जिसे मैं अपने कार्यान्वयन में उधार ले सकता हूं।

मुझे एक arduino ADK का उपयोग करके रोबोट को नियंत्रित करने की आवश्यकता है, इसलिए मैं 2 फोन का उपयोग कर रहा हूं, एक जो रोबोट पर लगाया जाएगा और दूसरा जो रोबोट से वीडियो स्ट्रीम प्राप्त करेगा। मैं इसका उल्लेख कर रहा हूं क्योंकि मैं प्रसारण समय और देखने के समय के बीच सबसे छोटी देरी को प्राप्त करने की कोशिश कर रहा हूं।

मैं रोबोट को नियंत्रित करने के लिए 2 ऐप, एक मास्टर ऐप लिख रहा हूं (हैंडहेल्ड फोन से) जो कि स्लेव ऐप को नियंत्रित करेगा और स्ट्रीम प्राप्त करेगा, और दूसरा स्लेव ऐप जो रोबोट-स्ट्रैप्ड फोन पर चलेगा, मोटरों / एक्ट्यूएटर्स को नियंत्रित करेगा। / मास्टर ऐप के लिए स्ट्रीमिंग। मैं दुर्भाग्य से तीसरे पक्ष के ऐप का उपयोग नहीं कर सकता। मुझे अपने 2 ऐप्स में वीडियो स्ट्रीम कोड को एकीकृत करने की आवश्यकता है।

इसे प्राप्त करने के लिए क्या विकल्प हैं? इसके अलावा यह करना बहुत कठिन है क्योंकि मैंने कभी विडियोस्ट्रीमिंग के साथ काम नहीं किया, कठिन मैं जावा और एंड्रॉइड विकास दोनों में बहुत अच्छा कर रहा हूं। मुझे स्ट्रीम को कैसे एनकोड / डिकोड करना चाहिए, मैं कनेक्शन कैसे शुरू करूं, क्या मुझे टीसीपी / आईपी के बजाय यूडीपी के साथ काम करने की आवश्यकता होगी? मुझे वास्तव में नहीं पता है कि कहां से शुरू करना है, कहीं भी कोई नमूना कोड नहीं है। मुझे पूरा यकीन है कि यह हासिल किया जा सकता है। मुझे सिर्फ सही दिशा में शुरुआत करने के लिए कुछ उपयोगी नहीं मिल सकता है।

मैं स्पाइड्रॉइड में ठोकर खाई लेकिन यह वीएलसी का उपयोग डेस्कटॉप पर कर रहा है, इसलिए यह मेरे लिए अच्छा नहीं है।


EDIT: Cagney Moreau के ब्लॉग की जाँच करें । वह इसे लागू करने के बारे में विवरण में जाता है।


1
क्या आप अपने प्रोजेक्ट को साझा कर सकते हैं, मैं इसी तरह का काम कर रहा हूं, लेकिन एंड्रॉइड और डेस्कटॉप (वेबक्लाइंट) के बीच वीडियो स्ट्रीमिंग कर रहा हूं ... मैंने html5 + वेबसोकेट्स के बारे में सोचा था लेकिन मैं कई समस्याओं का सामना कर रहा हूं ...
Buksy

1
मैं इस तरह के समाधान विकसित कर रहा हूं, जो कि 80% वही है जो आप करने की कोशिश कर रहे हैं। आपको एक वीओआइपी सर्वर को कॉन्फ़िगर करने की आवश्यकता है और फिर उस वीओआइपी के लिए ग्राहक बनाएं जो आपकी आवाज और वीडियो को स्थानांतरित कर देगा। मैं भी इसकी तलाश में हूं। अगर कोई जानता है तो कृपया मुझे बताएं।
अजे_ १

1
ईमेल मेरी प्रोफाइल पर दिया गया है
AZ_

1
मेरा प्रोजेक्ट देखें। Java में सब कुछ और विस्तार से बताया cagneymoreau.com/stream-video-android
cagney

1
धन्यवाद मैं रोबोट पर भी काम कर रहा हूं। मज़ा सामान
cagney

जवाबों:


55

यदि आपको अपने ऐप में रिकॉर्डिंग और प्लेबैक कार्यक्षमता की आवश्यकता नहीं है, तो ऑफ-द-शेल्फ स्ट्रीमिंग ऐप और प्लेयर का उपयोग करना एक उचित विकल्प है।

यदि आपको उन्हें अपने ऐप में होना चाहिए, हालाँकि, आपको MediaRecorder API (सर्वर / कैमरा ऐप के लिए) और MediaPlayer (क्लाइंट / प्लेयर ऐप के लिए) में देखना होगा ।

सर्वर के लिए त्वरित नमूना कोड:

// this is your network socket
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
mCamera = getCameraInstance();
mMediaRecorder = new MediaRecorder();
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// this is the unofficially supported MPEG2TS format, suitable for streaming (Android 3.0+)
mMediaRecorder.setOutputFormat(8);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
mediaRecorder.setOutputFile(pfd.getFileDescriptor());
mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());
mMediaRecorder.prepare();
mMediaRecorder.start();

खिलाड़ी की ओर से यह थोड़ा मुश्किल है, आप यह कोशिश कर सकते हैं:

// this is your network socket, connected to the server
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(pfd.getFileDescriptor());
mMediaPlayer.prepare();
mMediaPlayer.start();

दुर्भाग्य से मध्यस्थता ऐसा नहीं करने के लिए जाती है, इसलिए आपके पास कुछ विकल्प हैं: या तो () सॉकेट से डेटा को फ़ाइल में सहेजें और (आपके पास थोड़ा सा डेटा होने के बाद) फ़ाइल से मीडियापेयर के साथ खेलें, या (b) एक छोटा http बनाएं प्रॉक्सी जो स्थानीय रूप से चलता है और मीडियापेयर के GET अनुरोध को स्वीकार कर सकता है, HTTP हेडर के साथ उत्तर दे सकता है, और फिर रिमोट सर्वर से डेटा कॉपी कर सकता है। (ए) के लिए आप एक फ़ाइल पथ या फ़ाइल यूआरएल के साथ मीडियापेयर बनाएंगे, (बी) के लिए यह आपके प्रॉक्सी को इंगित करने वाला http यूआरएल दे।

यह सभी देखें:

सॉकेट fd का उपयोग कर फोन से फोन पर लाइव वीडियो स्ट्रीम करें

एमपी प्लेबैक की शुरुआत में MediaPlayer स्टूटर्स


2
हैलो एलेक्स, क्या आपके पास आरटीपी के माध्यम से एक एंड्रॉइड फोन से एक स्थानीय संग्रहीत ऑडियो फ़ाइल भेजने के साथ कोई अनुभव है?
B770

नमस्ते क्या आप कृपया मुझे इसकी पूरी परियोजना भेज सकते हैं?
उमर असगर

1
क्या आप अपना पूरा प्रोजेक्ट पोस्ट कर सकते हैं?
यजहिनी मुरुगैया

जो एक सर्वर सॉकेट और क्लाइंट सॉकेट है
यज़्हिनी मुरुगैया

1
@ अहमद हाम्डी वास्तव में: एपीआई स्तर 23 (एंड्रॉइड 6.0) के setDataSource(MediaDataSource)बजाय आप का उपयोग कर सकते हैं FileDescriptor। लागू MediaDataSourceकरने से आप अपना नेटवर्क रीडिंग और बफरिंग कर सकते हैं, बिना किसी टेम्प फाइल में लिखे।
एलेक्स I

9

मैंने एक बार कुछ इस तरह से काम किया था, लेकिन वीडियो भेजना और वास्तविक समय में इसे खेलना वास्तव में एक जटिल बात है। मेरा सुझाव है कि आप पीएनजी के साथ ही काम करें। मेरे कार्यान्वयन में मैंने क्या किया, मेजबान कैमरे का उपयोग करके PNG को कैप्चर किया गया और फिर उन्हें क्लाइंट को नेटवर्क पर भेजा गया, जो छवि को जल्द से जल्द प्रदर्शित करेगा और मेजबान से अगली छवि का अनुरोध करेगा। चूँकि आप वाईफाई पर हैं कि संचार प्रति सेकंड लगभग 8-10 चित्र प्राप्त करने के लिए काफी तेज होगा (केवल सन्निकटन, मैंने ब्लूटूथ पर काम किया)। तो यह एक निरंतर वीडियो की तरह दिखेगा लेकिन बहुत कम प्रयास के साथ। संचार के लिए आप यूडीपी सॉकेट (तेज़ और कम जटिल) या डीएलएनए का उपयोग कर सकते हैं (यह सुनिश्चित नहीं है कि यह कैसे काम करता है)।


हाँ, यह मेरा अंतिम उपाय होने जा रहा था। प्रतिक्रिया के लिए धन्यवाद!
21

3
निश्चित रूप से एक jpeg स्ट्रीम png स्ट्रीम से अधिक कुशल होगी?
स्टील्थोप्टर

मैं सिर्फ एक छवि का उपयोग करने का सुझाव दे रहा था, आप अपनी इच्छानुसार किसी भी प्रारूप का उपयोग कर सकते हैं
२३'१४

@krossreg> क्या आप सुझाव के लिए नमूना कोड पेस्ट कर सकते हैं?
जैस्पर

8

आप IP वेबकैम का उपयोग कर सकते हैं , या शायद DLNA का उपयोग कर सकते हैं । उदाहरण के लिए सैमसंग डिवाइस AllShare नामक एक ऐप के साथ आते हैं जो नेटवर्क पर DLNA सक्षम डिवाइसों को साझा और एक्सेस कर सकता है। मुझे लगता है कि IP Webcam आपकी सबसे अच्छी शर्त है, हालांकि। आपको एमएक्स वीडियो प्लेयर या ऐसा कुछ बनाने के लिए इसे स्ट्रीम खोलने में सक्षम होना चाहिए।


2
मैं 2 एप्लिकेशन लिख रहा हूं, एक मास्टर ऐप जो रोबोट को नियंत्रित करने के लिए (हैंडहेल्ड फोन से) और यह देखने के लिए कि रोबोट क्या देखता है, और दूसरा दास ऐप जो रोबोट / स्ट्रैप्ड फोन पर चलेगा, मोटर्स / एक्ट्यूएटर्स / स्ट्रीमिंग को नियंत्रित करेगा। मैं दुर्भाग्य से तीसरे पक्ष के ऐप का उपयोग नहीं कर सकता। मुझे अपने 2 ऐप्स में वीडियो स्ट्रीम कोड को एकीकृत करने की आवश्यकता है।
15

शायद आप DLNA कल्पना पर कुछ शोध कर सकते हैं और अपने खुद के लिए एक ऐप बनाने के लिए एक स्टैब ले सकते हैं या शायद IP Webcam के डेवलपर को ईमेल कर सकते हैं और कुछ मदद मांग सकते हैं।
ldam

1
रिवर्स इंजीनियर इसे? : पी
mgibson

हाँ, मुझे कोई और पसंद नहीं है जो मुझे लगता है।
androidu

5

आप एंड्रॉइड VLC की जांच कर सकते हैं यह वीडियो स्ट्रीम और प्ले कर सकता है, यदि आप अधिक इंडैगेट करना चाहते हैं, तो आप उनके GIT की जांच कर सकते हैं कि उनका क्या विश्लेषण है। सौभाग्य!


3
मैं Android VLC में देख रहा हूं। क्या आप मुझे बताएंगे कि किसी वीडियो को स्ट्रीम करने के लिए इसका उपयोग कैसे करें?
user1914692
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.