У меня есть приложение с 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, с благодарностью.