2012-05-23 19 views
8

मैं चाहता हूं कि broadcast दूरस्थ स्थानों पर एक एंड्रॉइड कैमरा वीडियो है, किसी को भी उस वीडियो को उनके मोबाइल या वेबसाइट पर देखने के लिए। मैं अपने पीसी पर वीएलसी प्लेयर के लिए unicast पर सफल रहा हूं। मैंने red5 सर्वर, Adobe media server, ffmpeg सर्वर पर सभी की कोशिश की लेकिन सभी की जय हो गई। उनमें से प्रत्येक केवल पूर्ववर्ती फ़ाइल से broadcast वीडियो करने में सक्षम था लेकिन किसी भी लाइव स्ट्रीम से नहीं। क्या कोई मुझे बता सकता है कि मैं क्या करता हूं।ब्रॉडकास्टिंग एंड्रॉइड कैमरा वीडियो

उत्तर

7

मैंने पढ़ा (मुझे लगता है कि यह स्टैक ओवरफ्लो पर भी था) कि आप मीडियाआरकॉर्डर को एक टीसीपी-कनेक्शन के फाइलहैंडल के साथ प्रदान कर सकते हैं। फिर आप उस कनेक्शन को सुन सकते हैं, डेटा पढ़ सकते हैं, इसे पैकेट कर सकते हैं और इसे आरटीएसपी/आरटीपी-स्ट्रीम के रूप में भेज सकते हैं।

यदि मुझे मूल पोस्ट मिलती है, तो मैं इसे यहां संदर्भित करूंगा।

संपादित करें:

मूल पोस्ट किया गया था: Streaming Video From Android

और Filedescriptor के बारे में हिस्से से है: http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system

शायद ज़रुरत पड़े, मैं ब्लॉग से अनुसार उदाहरण का हवाला देते हैं:

String hostname = "your.host.name"; 
int port = 1234; 
Socket socket = new Socket(InetAddress.getByName(hostname), port); 
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); 
MediaRecorder recorder = new MediaRecorder(); // Additional MediaRecorder setup (output format ... etc.) omitted 
recorder.setOutputFile(pfd.getFileDescriptor()); 
recorder.prepare(); 
recorder.start(); 

हालांकि यह केवल वीडियो फाई भेजता है तार पर ले डेटा। आप इसे बचा सकते हैं और फिर इसे वापस चला सकते हैं। लेकिन जैसा कि बताया गया है, यह अभी तक एक धारा नहीं है।

अद्यतन: आपको पहले चरण के लिए एक टीसीपी सॉकेट का उपयोग भी नहीं करना है। मैंने बस "लोकलसेट" (1) पर ट्राइप किया, जो आपको MediaRecorder को खिलाने के लिए फ़ाइलहेंडल भी प्राप्त करता है। वे स्थानीय सॉकेट "AF_LOCAL/यूनिक्स डोमेन स्ट्रीम सॉकेट" हैं। http://developer.android.com/reference/android/net/LocalSocket.html

मैंने अपने ऊपर से ऊपर की सभी कोशिश नहीं की है, लेकिन जल्द ही बहुत जल्द। तो हो सकता है कि मैं निकट भविष्य में और अधिक सहायता प्राप्त कर सकूं :)

(1) लोकलसेट सुरक्षा कारणों से नए एंड्रॉइड संस्करणों पर उपयोग करने योग्य नहीं है! 2015-11-25 से अपडेट देखें।

अद्यतन 2: बस एंड्रॉयड सूत्रों का कहना है "OUTPUT_FORMAT_RTP_AVP" में देखा था। लेकिन यह :(छिपा हुआ है तो मुझे लगता है कि यह एंड्रॉयड के भविष्य के API संस्करण में उपलब्ध हो जाएगा https://github.com/android/platform_frameworks_base/blob/master/media/java/android/media/MediaRecorder.java लाइन 219:।

public static final int OUTPUT_FORMAT_RTP_AVP = 7; 

मैं सिर्फ एक हार्डकोडेड 7 प्रदान करके छिपाने को धोखा देना प्रयास नहीं किया है ... तो किसी को भी, एक टिप्पणी यहाँ छोड़ दें करता

अद्यतन 2015-11-25

मैं सिर्फ libstreaming में भाग: https://github.com/fyhertz/libstreaming मैंने किया इसे बहुत गहराई से न देखें, लेकिन ऐसा लगता है कि इस परियोजना से एंड्रॉइड से स्ट्रीमिंग के बारे में बहुत कुछ सीखना है (अगर इसका उपयोग न केवल)।मैं वहाँ पढ़ा है कि LocalSocket समाधान नए Android संस्करणों के लिए अवैध है :(लेकिन वे एक विकल्प मौजूद:। ParcelFileDescriptor

+0

मैं से बाहर कोई मतलब करने में सक्षम सर्वर से इस तरह से कच्चे धारा धक्का करने में सक्षम था, लेकिन कभी नहीं किया गया यह आप क्लाइंट सॉकेट के हैंडल दे सकते हैं और सबकुछ सर्वर –

+0

पर धक्का दे सकते हैं। मुझे लगता है कि यह कुछ फ़ाइल पैकेटिज़ेशन में होगा। इसलिए आपको इसे कच्चे डेटा प्राप्त करने के लिए पहले इसे डिमैकेट करना होगा और फिर इसे आरटीपी पैकेट में दोबारा डालना होगा। ध्यान दें: H264 फ़ाइलफॉर्मैट में एमपीईजी_4_एसपी से अलग है। – Fildor

+0

यह मेरे एंड्रॉइड पर लॉकल संग्रहीत ऑडियो फ़ाइल लेने के लिए बहुत अंतरंग होगा और इसे मेरे पीसी (उसी वलान) में आरटीपी के माध्यम से भेज देगा जहां मैं इसे सुन सकता हूं। कोई विचार मैं कैसे कर सकता हूं यह करें? – B770

संबंधित मुद्दे