2014-11-01 16 views
5

के साथ वीडियो स्ट्रीम कैप्चर कैसे करें मैं पाइथन का उपयोग करके ओपनसीवी के साथ एमएमएस वीडियो स्ट्रीम को संसाधित करना चाहता हूं। स्ट्रीम आईपी कैमरे से आती है जिसका मेरा कोई नियंत्रण नहीं है (यातायात मॉनीटर)। दोनों वीएलसी और विंडोज मीडिया प्लेयर परओपनसीवी (पायथन)

mms://194.90.203.111/cam2 

नाटकों - धारा एमएमएस या MMST योजनाओं के रूप में उपलब्ध है।

mmst://194.90.203.111/cam2 

केवल वीएलसी पर काम करता है। मैंने एफएफएमपीईजी और वीएलसी के साथ फिर से स्ट्रीमिंग करके इस योजना को HTTP में बदलने की कोशिश की है लेकिन यह काम नहीं कर सका।

जहां तक ​​मैं समझता हूं, एमएमएस स्ट्रीम को एन्कोड करने के लिए विंडोज मीडिया वीडियो का उपयोग कर रहा है। यूआरआई के अंत में '.mjpeg' जोड़ने में कोई भाग्य नहीं है। मुझे अभी तक पता नहीं चला है कि ओपनसीवी द्वारा किस प्रकार की स्ट्रीमिंग स्वीकार की जाती है।

import cv2, platform 
#import numpy as np 

cam = "mms://194.90.203.111/cam2" 
#cam = 0 # Use local webcam. 

cap = cv2.VideoCapture(cam) 
if not cap: 
    print("!!! Failed VideoCapture: invalid parameter!") 

while(True): 
    # Capture frame-by-frame 
    ret, current_frame = cap.read() 
    if type(current_frame) == type(None): 
     print("!!! Couldn't read frame!") 
     break 

    # Display the resulting frame 
    cv2.imshow('frame',current_frame) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

# release the capture 
cap.release() 
cv2.destroyAllWindows() 

मैं क्या याद आ रही है -

यहाँ मेरी कोड है? OpenCV कैप्चर कर सकते हैं किस प्रकार की वीडियो स्ट्रीम? योजना परिवर्तन या ट्रांसकोडिंग के बिना कोई सुरुचिपूर्ण समाधान है?

धन्यवाद!

पायथन वर्ड 2.7.8, ओपनसीवी का वर्क 2.4.9, दोनों x86। Win7 x64

+0

शायद यह मदद करेगा: http://petrkout.com/electronics/low-latency-0-4-s-video-streaming-from-raspberry-pi-mjpeg-streamer-opencv/ क्लाइंट अनुभाग – Ryan

+0

धन्यवाद @Ryan! लिंक में बहुत अच्छी जानकारी थी।अंत में पायथन भाग ने इसे दबा दिया। – NoamR

उत्तर

5

FFmpeg और FFserver का उपयोग करके हल किया गया। नोट FFserver केवल लिनक्स पर काम करता है। समाधान here से पाइथन कोड का उपयोग करता है जैसा कि Ryan द्वारा सुझाया गया है।

  • प्रारंभ FFserver पृष्ठभूमि प्रक्रिया (इस मामले में mjpeg) वांछित विन्यास का उपयोग कर -

    प्रवाह इस प्रकार है।

  • एफएफएमपीईजी इनपुट एमएमटी स्ट्रीम, आउटपुट स्ट्रीम लोकहोस्ट में है।
  • स्थानीयहोस्ट स्ट्रीम और फ्रेम द्वारा डीकोड फ्रेम खोलने के लिए पायथन स्क्रिप्ट चलाएं।

भागो FFserver

ffserver -d -f /etc/ffserver.conf 

चलाने FFmpeg

ffmpeg -i mmst://194.90.203.111/cam2 http://localhost:8090/cam2.ffm 

अजगर कोड एक दूसरे टर्मिनल पर। इस मामले में, कोड वीडियो स्ट्रीम के साथ एक विंडो खुल जाएगा।

import cv2, platform 
import numpy as np 
import urllib 
import os 

cam2 = "http://localhost:8090/cam2.mjpeg" 

stream=urllib.urlopen(cam2) 
bytes='' 
while True: 
    # to read mjpeg frame - 
    bytes+=stream.read(1024) 
    a = bytes.find('\xff\xd8') 
    b = bytes.find('\xff\xd9') 
    if a!=-1 and b!=-1: 
     jpg = bytes[a:b+2] 
     bytes= bytes[b+2:] 
    frame = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8),cv2.CV_LOAD_IMAGE_COLOR) 
    # we now have frame stored in frame. 

    cv2.imshow('cam2',frame) 

    # Press 'q' to quit 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

cv2.destroyAllWindows() 

ffserver.config -

Port 8090 
BindAddress 0.0.0.0 
MaxClients 10 
MaxBandWidth 50000 
CustomLog - 
#NoDaemon 

<Feed cam2.ffm> 
    File /tmp/cam2.ffm 
    FileMaxSize 1G 
    ACL allow 127.0.0.1 
    ACL allow localhost 
</Feed> 
<Stream cam2.mjpeg> 
    Feed cam2.ffm 
    Format mpjpeg 
    VideoFrameRate 25 
    VideoBitRate 10240 
    VideoBufferSize 20480 
    VideoSize 320x240 
    VideoQMin 3 
    VideoQMax 31 
    NoAudio 
    Strict -1 
</Stream> 
<Stream stat.html> 
    Format status 
    # Only allow local people to get the status 
    ACL allow localhost 
    ACL allow 192.168.0.0 192.168.255.255 
</Stream> 
<Redirect index.html> 
    URL http://www.ffmpeg.org/ 
</Redirect> 

ध्यान दें कि यह ffserver.config अधिक ट्यूनिंग की जरूरत है, लेकिन वे नहीं बल्कि अच्छी तरह से काम करते हैं और एक फ्रेम केवल एक छोटे से फ्रेम फ्रीज के साथ स्रोत के बहुत करीब का उत्पादन।

+0

मुझे बहुत खुशी है कि मुझे यह मिला। इसे साझा करने के लिए धन्यवाद! – sascha

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