解释来自OpenCV / OpenGL应用程序的UDP视频流

时间:2019-03-15 11:37:18

标签: opencv udp video-streaming vlc mjpeg

我有一个现有的OpenGL / OpenCV应用程序,可以显示Video4Linux摄像机的图像。我想通过以太网将图像传输到其他计算机。不幸的是,由于现有应用程序已经占用了相机,因此我必须确保仅通过现有的OpenGL / OpenCV应用程序进行图像传输。我搜索了Internet,并想出了两个很好的资源:

[1] https://protecto.github.io/cpp-streaming-opencv-frames/

[2] http://derekmolloy.ie/udp-video-streaming-beaglebone-black/

就像参考文献[1]一样,我想流式传输OpenCV帧,因为我能够在我的应用程序中实现它。经过一些修改,我现在可以通过UDP连接发送OpenCV帧。对我而言,歧义是对流的解释。

std::vector<uchar> buf;
cv::imencode(".jpg", ACTUAL_FRAME, buf, std::vector<int>());

for (std::vector<uchar>::iterator it = buf.begin() ; it < buf.end(); it += chunk_size)
{
    std::vector<uchar>::iterator end = it + chunk_size;
    if (end >= buf.end()) {
        end = buf.end();
    }

    std::string msg_str(it, end);
    const void * msg = msg_str.c_str();
    if (sendto(sockfd, msg, chunk_size, 0, (const struct sockaddr *) &servaddr, sizeof(servaddr)) == -1 )
    {
        printf("UDP Error: %s\n",strerror(errno));
        fflush(stdout);
    }
    else{
        //printf("UDP Send Successful!\n");
        //fflush(stdout);
    }
}

在当前实现中,数据以包含64000个未签名char的块的形式发送。我能够看到UDP服务器中的数据流。但是,我不知道通过UDP流mjpeg电影的实际标准方法或格式是什么。例如,使用VLC媒体播放器作为参考[2]。确实,我连接到dp://192.168.1.98:1234,这是我的应用程序发送数据的位置。但是我什么也看不到。

任何有关如何使用UDP服务器(例如VLC媒体播放器)解释JPG流的指南,或有关UDP客户端需要进行哪些修改的指南,都将受到极大的赞赏。

0 个答案:

没有答案