Поток данных с камеры USB - PullRequest
0 голосов
/ 07 ноября 2018

В настоящее время я работаю над потоковым проектом. Мне нужно взять кадры с USB-камеры и отправить их по TCP.

Для открытия видеопотока с USB-камеры я использую cv::VideoCapture. Это позволяет мне читать уже декодированные кадры. В соответствии с этим вопросом я понял, что нет способа получить кодированные данные кадра, используя cv::VideoCapture, и мне нужно снова кодировать каждый кадр и отправлять все, что мне нужно, используя cv::imencode. Проблема в том, что я могу кодировать кадры в какой-то определенный формат, указанный здесь здесь , и, в случае, я использую либо .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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...