2016-04-12 18 views
11

Điều này đã khiến tôi bận rộn cho một phần tốt của buổi chiều và tôi đã không thể làm cho nó hoạt động nhưng tôi cảm thấy như tôi thực sự thân thiết.Gửi đầu ra OpenCV tới dòng VLC

Tôi đã thiết lập OpenCV để nhận video từ webcam. Để có thể truy cập nguồn cấp dữ liệu video này (với lớp phủ openCV), tôi muốn đặt đầu ra của tập lệnh python openCV thành luồng VLC. Tôi đã quản lý để có được luồng và chạy và có thể kết nối với nó. VLC thay đổi kích thước tỉ lệ và độ phân giải chính xác để nó nhận được một số dữ liệu chính xác nhưng hình ảnh tôi nhận được chỉ là Jitter;

python opencv.py | cvlc --demux=rawvideo --rawvid-fps=30 --rawvid-width=320 --rawvid-height=240 --rawvid-chroma=RV24 - --sout "#transcode{vcodec=h264,vb=200,fps=30,width=320,height=240}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=:8081/stream.flv}" & 

Đầu ra của kịch bản là một cấp dữ liệu video liên tục gửi đến thiết bị xuất chuẩn như sau

from imutils.video import WebcamVideoStream 

vs = WebcamVideoStream(src=0) 

while True: 
    frame = vs.read() 
    sys.stdout.write(frame.tostring()) 

Ví dụ ở trên là một phiên bản dumbed xuống của kịch bản tôi đang sử dụng; Cũng như tôi thấy việc sử dụng thư viện imutils; https://github.com/jrosebr1/imutils

Nếu có ai có thể cho tôi một cú huých đi đúng hướng, tôi sẽ đánh giá cao điều đó. Đoán của tôi là stdout.write (frame.tostring()) không phải là những gì vlc mong đợi nhưng tôi đã không thể tìm ra nó.

+0

ý của bạn là hình ảnh chỉ là jitter? – incBrain

+0

Về cơ bản một hình ảnh thực sự bị méo di chuyển lên trên theo đường chéo. Không thực sự liên quan đến nguồn cấp dữ liệu video thực tế từ webcam như xa như tôi có thể tìm ra. (Nó không thay đổi khi tôi di chuyển đối tượng ở phía trước của webcam) Vì vậy, tôi đoán VLC không thể interpet dữ liệu frame.tostring(). –

+0

có thể không phù hợp với định dạng video. Bạn có chắc chắn rằng RV24 là định dạng đầu ra chính xác không? Cũng đảm bảo rằng các kích thước phù hợp với – incBrain

Trả lời

1

này làm việc cho tôi, mặc dù tôi đang gửi đến dòng RTSP và không sử dụng imutils thư viện:

import numpy as np 
import sys 
import cv2 

input_rtsp = "rtsp://10.10.10.9:8080" 
cap = cv2.VideoCapture(input_rtsp) 

while(cap.isOpened()): 
    ret, frame = cap.read() 
    if ret==True:   
     sys.stdout.write(frame.tostring()) 
    else: 
     break 

cap.release() 

Sau đó, trong dòng lệnh:

python opencv.py | cvlc --demux=rawvideo --rawvid-fps=25 --rawvid-width=1280 --rawvid-height=720 --rawvid-chroma=RV24 - --sout "#transcode{vcodec=h264,vb=200,fps=25,width=1280,height=720}:rtp{dst=10.10.10.10,port=8081,sdp=rtsp://10.10.10.10:8081/test.sdp}" 

Lưu ý rằng bạn không cần phải chuyển đổi opencv Đổi BGR sang RGB.

Các vấn đề liên quan