OpenCV를 사용한 M3U8 파일 스트리밍
문제
다음 코드를 사용하여 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에서 작동하며 코드는 웹캠에서 작동하므로 OpenCV는 .m3u8 형식을 좋아하지 않는다는 것입니다.이것을 고치는 방법에 대한 어떤 아이디어 / 제안은 크게 감사 할 것입니다.고마워.
해결책
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()
.
여전히 코드가 땜질 켜져 있으므로 어떤 제안을 환영합니다.
다른 팁
VLC를 사용합니다. VLC (http://10.5.5.9:8080/live/amba.m3u8
)에서 스트림을 열고 RestReam을 눌러 원하는대로 사용할 수 있습니다.VLC는 매우 강력합니다.인터넷에 내 GoPro 콘텐츠를 찍을 수 있습니다
제휴하지 않습니다 StackOverflow