在整个流媒体和捕获世界中,我还很新(只有两天大)。我正在尝试使用OpenCV和Python从UDP端口捕获视频流。我希望我的脚本在Docker容器中运行。我创建了一个基于Fedora的docker容器,并在其中安装了Python3.6.5,OpenCV。 OpenCV已使用以下选项从源代码进行编译-
cmake -DBUILD_TIFF=ON \
-DBUILD_WEBP=ON \
-DBUILD_opencv_java=OFF \
-DWITH_CUDA=OFF \
-DENABLE_AVX=ON \
-DWITH_OPENGL=ON \
-DWITH_OPENCL=ON \
-DWITH_IPP=ON \
-DWITH_TBB=ON \
-DWITH_GSTREAMER=ON \
-DWITH_EIGEN=ON \
-DWITH_V4L=ON \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
-DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=$(python -c "import sys; print(sys.prefix)") \
-DPYTHON_EXECUTABLE=$(which python) \
-DPYTHON_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-DPYTHON_PACKAGES_PATH=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
-DWITH_FFMPEG=ON \
-DWITH_GTK_2_X=ON \
-DBUILD_PNG=ON \
-DBUILD_JASPER=ON \
-DBUILD_JPEG=ON \
-DWITH_V4L=ON .. \
我已经使用以下命令检查了UDP端口-
tcpdump -i lo -n udp port <port_number>
似乎正在正确接收数据包。没问题。
我的容器中有以下脚本,用于从udpsrc读取帧
import cv2
gst_string = "udpsrc port=<port_number> caps=\"application/x-rtp, media=(string)video, clock-rate=(int)90000\" ! rtpvp8depay ! vp8dec ! videoconvert ! appsink"
video_capture = cv2.VideoCapture(gst_string)
while video_capture.isOpened():
ret, frame = video_capture.read()
print("Frame received {}".format(ret))
我正在使用以下命令启动docker容器-
docker run -it -p <port_number>:<port_number>/udp myworker /bin/bash
最后,当我从bash提示符中使用python worker.py
启动脚本时,由于video_capture.isOpened()
返回False,所以脚本没有进入循环。
我对这里涉及的所有事情(除了Python和某种程度上的Docker)几乎没有经验,因此我无法找出我做错了什么。请帮助我。
预先感谢
编辑----------------
有关更多信息,我已将以下插件安装到gstreamer-
yum install -y libnice-gstreamer1 \
gstreamer-plugins-good \
gstreamer1-plugins-ugly \
gstreamer1-plugins-good \
gstreamer-plugins-bad-free-extras \
gstreamer-plugins-espeak gstreamer \
gstreamer1 \
gstreamer1-plugins-base-tools \
gstreamer1-plugins-bad-free-extras \
gstreamer1-plugins-bad-freeworld \
gstreamer-plugins-bad-free \
gstreamer1-plugins-base \
gstreamer1-plugins-good-extras \
gstreamer-plugins-base gstreamer-tools \
PackageKit-gstreamer-plugin \
gstreamer1-plugins-bad-free
编辑-2 ---------------------------------
如评论中所述,我使用的OpenCV并未在其中编译Gstreamer。因此我无法打开视频捕获。因此,上方的yum
命令最终变为-
RUN yum install -y libnice-gstreamer1 \
gstreamer1-plugins-ugly \
gstreamer1-plugins-good \
gstreamer1 \
gstreamer1-plugins-base-devel \
gstreamer-plugins-base-tools \
gstreamer1-plugins-bad-free-extras \
gstreamer1-plugins-bad-freeworld \
gstreamer1-plugins-base \
gstreamer1-plugins-good-extras \
gstreamer1-plugins-base \
gstreamer1-plugins-bad-free \
gstreamer-plugins-base-devel
瞧!这成功了。