Gstreamer,Docker,udpsrc,OpenCV,Python ...不起作用

时间:2018-06-28 10:44:46

标签: python opencv docker gstreamer

在整个流媒体和捕获世界中,我还很新(只有两天大)。我正在尝试使用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

瞧!这成功了。

0 个答案:

没有答案