Возможно, вы могли бы попытаться передать данные через TCP.
Лучше использовать поток для отправки VIDEO_DATA
, иначе это повлияет на процесс захвата OpenCV следующего кадра изображений. Вы можете добавить несколько алгоритмов сжатия изображения перед отправкой. Коды показаны ниже:
#include <atomic>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
std::string IP_ADDR {"123.45.67.89"};
int PORT = 6666;
std::atomic_flag flag = ATOMIC_FLAG_INIT;
void *tcp_thread_graph(void *arg) {
struct sockaddr_in addr;
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd == -1) { throw; }
bzero(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(IP_ADDR.c_str());
addr.sin_port = htons(PORT);
int err = connect(sockfd, (struct sockaddr *)&addr, sizeof(addr));
while(flag.test_and_set()) {
//TODO: add compression algorithm before sending
send(sockfd, (char*)VIDEO_DATA, sizeof(VIDEO_DATA), 0);
}
return nullptr;
}