हम्म के माध्यम से रोबोट द्वारा भेजी गई छवियों से सर्वर (पीसी) पर लाइव वीडियो स्ट्रीम।यूडीपी
http://sourceforge.net/projects/mjpg-streamer/
ठीक है: मैं जो आशाजनक लगता है यह मिल गया। मैं यह बताने की कोशिश करूंगा कि मैं स्पष्ट रूप से और बहुत विस्तार से क्या करने की कोशिश कर रहा हूं।
मेरे पास कैमरा और वाईफ़ाई स्टिक (this is the robot) के साथ एक छोटा humanoid रोबोट है। रोबोट की वाईफाई स्टिक औसत वाईफाई स्थानांतरण दर 1769 केबी/एस है। रोबोट में 500 मेगाहट्र्ज सीपीयू और 256 एमबी रैम है, इसलिए यह किसी भी गंभीर गणना के लिए पर्याप्त नहीं है (इसके अलावा गति, दृष्टि, सोनार, भाषण इत्यादि के लिए रोबोट पर चल रहे कुछ मॉड्यूल पहले से ही हैं)।
मेरे पास एक पीसी है जिसमें से मैं रोबोट को नियंत्रित करता हूं। मैं रोबोट कमरे के चारों ओर घूमने की कोशिश कर रहा हूं और पीसी में रोबोट को क्या देखता है उसका लाइव स्ट्रीम वीडियो देख रहा हूं।
जो मैं पहले से ही काम कर रहा हूं। रोबोट चल रहा है क्योंकि मैं उसे करना चाहता हूं और कैमरे के साथ छवियां लेना चाहता हूं। छवियों को पीसी पर यूडीपी प्रोटोकॉल के माध्यम से भेजा जा रहा है जहां मैं उन्हें प्राप्त कर रहा हूं (मैंने डिस्क पर आने वाली छवियों को सहेजकर इसे सत्यापित किया है)।
कैमरा छवियों को वापस करता है जो YUV442 रंगस्थान में 640 x 480 पीएक्स हैं। मैं छवियों को हानिकारक संपीड़न (जेपीईजी) के साथ भेज रहा हूं क्योंकि मैं पीसी पर सबसे अच्छा संभव एफपीएस प्राप्त करने की कोशिश कर रहा हूं। मैं पीआईएल पुस्तकालय के साथ रोबोट पर जेपीईजी को संपीड़न कर रहा हूं।
मेरे सवालों का:
किसी ने मुझसे कैसे लाइव वीडियो स्ट्रीम को भेजे JPEG चित्रों में परिवर्तित करने के बारे में कुछ विचार दे सकते हैं? मैं समझता हूं कि इसके लिए मुझे कुछ वीडियो एन्कोडर की आवश्यकता होगी। आप कौन सी वीडियो एन्कोडर की सिफारिश करते हैं? एफएफएमपीईजी या कुछ और? मैं वीडियो स्ट्रीमिंग के लिए बहुत नया हूं इसलिए मैं जानना चाहता हूं कि इस कार्य के लिए सबसे अच्छा क्या है। मैं इसे लिखने के लिए पायथन का उपयोग करना पसंद करूंगा, इसलिए मैं कुछ वीडियो एन्कोडर या लाइब्रेरी पसंद करूंगा जिसमें पाइथन एपीआई है। लेकिन मुझे लगता है कि पुस्तकालय में कुछ अच्छी कमांड लाइन एपीआई है, इसे पायथन में नहीं होना चाहिए।
इससे सबसे अच्छा एफपीएस क्या प्राप्त हो सकता है? 1769 केबी/औसत औसत वाईफाई स्थानांतरण दर और छवियों के आयामों को देखते हुए? क्या मुझे जेपीईजी की तुलना में अलग संपीड़न का उपयोग करना चाहिए?
मुझे कोई कोड उदाहरण देखने में खुशी होगी। यह कैसे करना है यह समझाने वाले लेखों के लिंक भी ठीक होंगे।
कुछ कोड नमूने। यहां बताया गया है कि मैं रोबोट से पीसी तक जेपीईजी छवियां कैसे भेज रहा हूं (संक्षिप्त सरलीकृत स्निपेट)। यह रोबोट पर चलता है:
# lots of code here
UDPSock = socket(AF_INET,SOCK_DGRAM)
while 1:
image = camProxy.getImageLocal(nameId)
size = (image[0], image[1])
data = image[6]
im = Image.fromstring("YCbCr", size, data)
s = StringIO.StringIO()
im.save(s, "JPEG")
UDPSock.sendto(s.getvalue(), addr)
camProxy.releaseImage(nameId)
UDPSock.close()
# lots of code here
यहां बताया गया है कि मैं पीसी पर छवियां कैसे प्राप्त कर रहा हूं। यह पीसी पर चलता है:
# lots of code here
UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.bind(addr)
while 1:
data, addr = UDPSock.recvfrom(buf)
# here I need to create a stream from the data
# which contains JPEG image
UDPSock.close()
# lots of code here
कैमरा स्वयं जेपीईजी वापस नहीं कर रहा है, वहां कुछ कोडेक में एक वीडियो स्ट्रीम पहले से ही एन्कोड किया गया है। अन्य कोड होना चाहिए जो उस स्ट्रीम से एक फ्रेम खींचता है, हां? यदि ऐसा है, तो क्या आप कैमरे से कच्ची धारा प्राप्त करने और इसे भेजने पर ध्यान केंद्रित कर सकते हैं? मुझे संदेह है कि आपके पास पर्याप्त बैंडविड्थ से अधिक होगा। – Brad
@ ब्रैड कैमरा बिना किसी संपीड़न के कच्चे बाइनरी छवियों को लौटाता है। अगर मैं उन्हें जेपीईजी में परिवर्तित करता हूं, तो वे बहुत छोटे होते हैं। वह बैंडविड्थ बचाता है, नहीं? –
@ ब्रैड यह कैमरे से किसी भी संपीड़न/परिवर्तन के बिना कच्चे आउटपुट का उदाहरण है: http://richardknop.com/log.txt –