11

次のコードを使用して、Python で cv2 を使用して GoPro からライブ ストリームをキャプチャしようとしています。

VIDEO_URL = "http://10.5.5.9:8080/live/amba.m3u8"
cam = cv2.VideoCapture(VIDEO_URL)
cv2.namedWindow("GoPro",cv2.CV_WINDOW_AUTOSIZE)
while True:
    f, im = cam.read()
    cv2.imshow("GoPro",im)
    if cv2.waitKey(5) == 27:
        break
cam.release()
cv2.destroyAllWindows()

しかし、次のエラーが表示されます。

WARNING: Couldn't read movie file http://10.5.5.9:8080/live/amba.m3u8
OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file     /tmp/opencv-MRl1/opencv-2.4.7.1/modules/highgui/src/window.cpp, line 261
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "gopro_simple.py", line 167, in live_stream
    cv2.imshow("GoPro",im)
cv2.error: /tmp/opencv-MRl1/opencv-2.4.7.1/modules/highgui/src/window.cpp:261: error: (-215) size.width>0 && size.height>0 in function imshow

ストリームは vlc で動作し、コードは Web カメラで動作するため、opencv が .m3u8 形式を好まないことが問題のようです。これを修正する方法についてのアイデア/提案は大歓迎です。ありがとう。

4

2 に答える 2

11

ここでffmpegを呼び出すソリューションを見つけました-うまく機能します(ffmpegオプションにいくつかの小さな変更を加えます):

VIDEO_URL = WEBURL + "live/amba.m3u8"

cv2.namedWindow("GoPro",cv2.CV_WINDOW_AUTOSIZE)

pipe = sp.Popen([ FFMPEG_BIN, "-i", VIDEO_URL,
           "-loglevel", "quiet", # no text output
           "-an",   # disable audio
           "-f", "image2pipe",
           "-pix_fmt", "bgr24",
           "-vcodec", "rawvideo", "-"],
           stdin = sp.PIPE, stdout = sp.PIPE)
while True:
    raw_image = pipe.stdout.read(432*240*3) # read 432*240*3 bytes (= 1 frame)
    image =  numpy.fromstring(raw_image, dtype='uint8').reshape((240,432,3))
    cv2.imshow("GoPro",image)
    if cv2.waitKey(5) == 27:
        break
cv2.destroyAllWindows()

まだコードをいじっているので、提案は大歓迎です。

于 2014-02-25T20:56:01.437 に答える
0

VLC をhttp://10.5.5.9:8080/live/amba.m3u8使用している可能性があります。VLC ( ) でストリームを開き、必要に応じて再ストリームしたり使用したりできます。VLC は非常に強力です。GoPro コンテンツをインターネットにストリーミングできます

于 2014-05-24T08:17:24.147 に答える