USB相机编码的数据流

时间:2018-11-07 06:31:14

标签: c++ opencv stream encode

目前,我正在从事流媒体项目。我需要从USB摄像头抓取帧并通过TCP发送。

要打开USB摄像机视频流,请使用cv::VideoCapture。这使我可以读取已经解码的帧。根据{{​​3}}问题,我了解到无法使用cv::VideoCapture获取编码的帧数据,因此我需要再次对每个帧进行编码,然后使用cv::imencode将其发送给我。问题是我可以将帧编码为this中列出的某些特定格式,并且如果使用.jpg或.png,则文件大小仍然很大,并且接收端的帧率非常差。

我的问题是:有什么方法可以直接获取mjpeg或h264编码的数据 或者也许您可以建议一种更好的帧编码方式。

OpenCV 3.4.3,摄像机RICOH THETA V,语言C ++。

我的代码:

void Streamer::start()
{
    cv::Mat img;
    cv::VideoCapture cap(0);
    cap.set(CV_CAP_PROP_FOURCC, CV_FOURCC('H', '2', '6', '4'));

    if (!cap.isOpened())
        throw std::invalid_argument("No device found.");

    std::vector<int> format_params;
    format_params.push_back(CV_LOAD_IMAGE_COLOR);
    format_params.push_back(CV_IMWRITE_PNG_STRATEGY);

    for (;;)
    {
        cap.read(img);
        cv::imencode(".png", img, buffer_, format_params);

        std::string strbuf(buffer_.begin(), buffer_.end());
        server_->sendString(socket, strbuf);
    }

    cap.release();
}

0 个答案:

没有答案