VideoCaptureはネットワーク処理を選択したバックエンドに委ねます。FFmpegを提供するOpenCVビルドでは、HTTP動画URLはキャプチャオプションの環境変数を通じてFFmpegのhttp_proxyオプションを受け取れます:

import os
os.environ['OPENCV_FFMPEG_CAPTURE_OPTIONS'] = (
    'http_proxy;http://proxy.example:8080'
)

import cv2
capture = cv2.VideoCapture(
    'http://media.example/video.mp4',
    cv2.CAP_FFMPEG,
)
try:
    if not capture.isOpened():
        raise RuntimeError('Video input did not open')
    ok, frame = capture.read()
finally:
    capture.release()

OpenCVのFFmpegバックエンドはオプション文字列をkey;valueの組として解析し、複数の組の間は縦棒で区切ります。この例ではOpenCVをインポートする前に環境変数を設定し、CAP_FFMPEGを明示的に要求しています。

FFmpegはhttp_proxyをHTTPプロトコルのプロキシURLとして文書化しています。HTTPプロキシ一覧は公開HTTPメディアルートの候補を提供しますが、無関係なキャプチャバックエンドやローカルカメラ、任意のRTSP/UDPトラフィックを設定するものではありません。

実際のOpenCVビルドのバックエンドとFFmpegの機能を確認してください。プロキシの値で不足しているバックエンドやデコーダーを追加することはできません。

メディア入力のオープンとフレームのデコードも別々の結果です。ダウンロードが成功した後のコーデック障害を、プロキシに到達できなかった証拠として報告すべきではありません。

関連記事