एक पीआई-कैम के साथ एक निगरानी कैमरे के रूप में एक साथ पाई का उपयोग करते समय 5 सेकंड के विलंबता से छुटकारा पाने के बारे में मंचों और थ्रेड्स के गजिलियन होते हैं। कई ट्यूटोरियल दिखाते हैं कि आरटीपी प्रोटोकॉल का उपयोग करके छवियों को एन्कोड और स्ट्रीम करने के लिए vlc का उपयोग कैसे किया जाता है जिसके परिणामस्वरूप ~ 5 सेकंड का अंतराल होता है।
मेरे अनुसार, इसका कारण यह है कि Raspivid H264 पर स्ट्रीम को एन्कोडिंग कर रहा है, जबकि VLC को इसे फिर से डिकोड करना होगा और जो भी RTP है उसे फिर से एनकोड करना होगा। कमांडलाइन इस तरह दिखता है:
raspivid -w 640 -h 480 -o - -t 0 |cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
पहला भाग मानक उत्पादन के लिए वीडियो स्ट्रीम करने के लिए raspivid बताता है:
raspivid -w 640 -h 480 -o - -t 0
पाइप के बाद का हिस्सा, VLC को इसे लेने के लिए कहता है, और h264 का उपयोग करके इसे डीकोड करता है:
cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
यह mux-ing और demux-ing काफी संसाधनों की एक कमर है!
मुझे github पर raspicam के स्रोत मिले , और मुझे लगता है कि एन्कोडर को छोड़ने के लिए एनकोडर_buffer_callback विधि (वर्तमान में लाइन 848) में कुछ किया जा सकता है। हालाँकि, मैं ग में अच्छा नहीं हूं, और वीडियो एन्कोडिंग से बिल्कुल भी परिचित नहीं हूं, इसलिए मेरे पास कोई सुराग नहीं है कि कहां से शुरू करें।
जीथुब पर मैं 330 कांटे देख सकता हूं, लेकिन वे विशेष रूप से रास्पिकैम के लिए नहीं लगते हैं (बल्कि पूरे उपयोगकर्ता प्रोजेक्ट के लिए)। मैं एक कांटा है कि एन्कोडिंग को हटाने या mjpeg की तरह कुछ सरल लागू करने की कोशिश कर खो गया।
क्या सी और वीडियो कोडेक ज्ञान वाले कोई व्यक्ति मुझे और अन्य गज़िलियन उपयोगकर्ताओं को विलंबता से छुटकारा पाने में मदद कर सकता है? संभवत: समाधान उन कांटों में से एक में पहले से ही है, लेकिन मैंने बिना किसी भाग्य के इसे खोजने में घंटों बिताए हैं।
पीएस मैं एक ब्राउज़र समाधान की तलाश में नहीं हूं , लेकिन मैं अंततः इसे एक Synology में स्ट्रीम करना चाहता हूं, अधिमानतः mjpeg स्ट्रीमिंग का उपयोग करके (लेकिन एक वेबपेज के माध्यम से नहीं, बल्कि एक मानक mjpeg स्ट्रीम जो अधिकांश वाणिज्यिक आईपी-कैम में निर्मित होता है)। पहला कदम h264 से छुटकारा पा रहा है।