2016-04-08 18 views
1

私はネットワークスループットテスト用のピアツーピアビデオストリーミングを開発中です。 2つのピア間のネットワークは、低ビットレート転送をサポートします。OpenCV MPEGビデオストリーミング

私はOpenCVを使用してビデオストリーミングのための簡単なpythonプログラムを作った。
Webcamからビデオフレームを取得し、それをJPEGにエンコードし、バイトストリームをピアに送信します。それはうまくいく。しかし、私の目的には問題があります。 1つの符号化フレームのサイズは、より低いJPEG品質で符号化しても、約5Kバイトです。

エンコード結果が小さくなり、ビデオの画質が向上するように、私はH264やH263などのMPEGコーデックでエンコードを使用しようとしています。まもなく私は自分が難しかったことが分かりました インターネットには例がありません。
次のコードはどのように変更できますか?

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

何の解像度でストリーミングしていますか?多くの場合、jpegは最高の圧縮率です。 (フレームあたり5キロバイトが極端に小さい) –

+0

解像度は320x240です。上記のコードでは、サイズはlen(jpeg.tobytes())です。 – Hill

+0

グレースケールまたはカラーを使用していますか?また、バイナリイメージを考えましたか? (バイナリイメージを送信していますか?)http://answers.opencv.org/question/4423/how-to-create-a-binary-image-mat/ –

答えて

0

これは、ウェブカメラからビデオフレームを符号化するリアルタイムのための答えです!
OpenCVでリアルタイムのMPEGエンコードを行う方法がないことに気づきました.OpenCVは、生のビデオフレームをMPEGファイルに保存できます。
私はffmpeg opensourceユーティリティを使用して私の問題を解決しました。 私はffmpegをビデオフレームをエンコードさせ、UDPパケットで送信させます。 私のアプリケーションはUDPパケットを受信し、テストネットワーク上でストリームします。データの平均ビットレート(320x240 5 FPS)は、25kbps(ビット/秒)未満です。

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 
関連する問題