Интерпретация видеопотока UDP из приложения OpenCV / OpenGL - PullRequest
1 голос
/ 15 марта 2019

У меня есть приложение с OpenGL / OpenCV, которое может отображать изображения с камер Video4Linux. Я хотел бы перенести изображение через Ethernet на другой компьютер. К сожалению, поскольку существующее приложение уже занимает камеру, я должен убедиться, что передача изображения происходит только из имеющегося у меня приложения OpenGL / OpenCV. Я искал в интернете и нашел два хороших ресурса:

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

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

Как и в [1], я хотел бы передавать потоковые кадры OpenCV, так как я могу реализовать это в своем приложении. С некоторыми изменениями я теперь могу отправлять кадры OpenCV через соединение UDP. Двусмысленность для меня - интерпретация потока.

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 знаков без знака. Я могу видеть поток данных на сервере UDP. Однако я не знаю, каков на самом деле стандартный способ или формат для потоковой передачи фильмов mjpeg по UDP. Например, используя VLC media player, как указано в [2]. Я подключаюсь к dp: //192.168.1.98: 1234, куда мое приложение отправляет данные. Но я не вижу никакого изображения, отображаемого вообще.

Любое руководство о том, как я могу интерпретировать поток JPG с использованием UDP-сервера (например, медиапроигрывателя VLC), или руководство о том, какие действия требуются на стороне клиента UDP, с благодарностью.

...