2016-04-08 23 views
1

Ağın iş akışı testi için eşler arası video akışı geliştiriyorum. İki eş arasındaki ağ düşük bit hızı transferini destekler.OpenCV MPEG Video Streaming

OpenCV kullanarak video akışı için basit bir python programı hazırladım.
Program, video karesini Webcam'ten yakalar ve JPEG'ye kodlar ve ardından byte-stream'e eş gönderir. İyi çalışıyor. Ama amacımla ilgili bir sorun var. Kodlanmış bir çerçevenin boyutu, daha düşük JPEG kalitesiyle kodlansa bile yaklaşık 5 Kbyte'dir.

Daha küçük kodlama sonuçları elde etmek ve daha iyi video kalitesi elde etmek için, H264 veya H263 gibi MPEG kodekleriyle kodlamayı kullanmaya çalışıyorum. Yakında kendimi zor durumda buldum. İnternet'te örnek yok.
Aşağıdaki kodları nasıl değiştirebilirim?

import cv2 
cap = cv2.VideoCapture(0) 
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320) 
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) 
success, image = cap.read() 
quality = 20 # quality 0 to 100. default:95 
ret, jpeg = cv2.imencode('.jpg', image, [int(cv2.IMWRITE_JPEG_QUALITY), quality]) 
# send(jpeg.tobytes()) 
+0

Hangi çözünürlükte akıyorsunuz? Çoğu zaman jpeg alabileceğiniz en yüksek sıkıştırma ile ilgilidir. (5 kilobayt kare başına azdır) –

+0

Çözünürlük 320x240'tır. Boyut, yukarıdaki kodda len (jpeg.tobytes()) şeklindedir. – Hill

+0

Gri ​​tonlama veya renk kullanıyor musunuz? Ayrıca ikili bir görüntü olarak gördünüz mü? (Ve sonra ikili görüntüyü gönderiyor musunuz?) Bkz. Http://answers.opencv.org/question/4423/how-to-create-a-binary-image-mat/ –

cevap

0

Bu web kamerasından gerçek zamanlı kodlama video kareleri için bir cevaptır !!
OpenCV, ham video karelerini MPEG dosyasına kaydedebilse de, OpenCV ile gerçek zamanlı MPEG kodlaması yapmanın bir yolu olmadığını farkettim.
Sorunumu ffmpeg opensource yardımcı programını kullanarak çözdüm. Ffmpeg'in bir video karesini kodlamasına ve UDP paketine göndermesine izin veriyorum. Ve uygulamam UDP paketlerini aldı ve test ağında yayınladı. Ortalama veri hızı 320x240 5 FPS, 25kbps'den (saniye başına bit) azdır.

ffmpeg -s 320x240 -f dshow -i video="USB HD Webcam" -r 5 -vcodec msmpeg4v2 -b:v 25k -an -f h263 udp://127.0.0.1:10000