当前位置:首页 > 代码 > 正文

udp视频传输代码(视频 udp)

admin 发布:2022-12-19 18:40 182


今天给各位分享udp视频传输代码的知识,其中也会对视频 udp进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

C语言 UDP文件传输

void ThreadReceive(PVOID param)

{

static struct sockaddr_in server; // 绑定地址

static SOCKET ListenSocket; // 等待接收数据的socket

char buf[4096];

int len = sizeof(client);

int result;

ListenSocket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);

if (ListenSocket == INVALID_SOCKET)

{

perror("opening stream socket");

exit(0);

}

server.sin_family = PF_INET;

server.sin_addr.s_addr = htonl( INADDR_ANY ); // 任何地址

server.sin_port = htons(LOCAL_PORT);

if (SOCKET_ERROR == bind(ListenSocket, (struct sockaddr *)server, sizeof(server)) )

{

printf("Error: 绑定失败\n");

exit(1);

closesocket( ListenSocket );

}

printf("socket port %d \n", ntohs(server.sin_port));

while(TRUE)

{

//接收数据

result = recvfrom(ListenSocket, buf, sizeof(buf)-1, 0, (struct sockaddr *)client, len);

if ( result 0 )

{

buf[result] = 0;

inet_ntoa(client.sin_addr), ntohs(client.sin_port));

}

}

closesocket(ListenSocket);

}

我要做这样一个课程设计,用到QT和opencv 可能要udp 视频传输的

这个东西我刚为公司做好,可以用tcp连接(用来消息通信,如建立新连接,断开连接等类似消息类型)。用udp发送视频和音频数据。每来一个连接 创建一个线程,在线程里发送视频和音频数据。视频我也用的opencv,音频不建议用qt自带的录制声音的方法,我试过,发现qt录制的最小片段不够小,传输到客户端,会断断续续的。

C语言UDP协议

简单的学习代码,仅供参考:

server.c

#include stdlib.h

#include stdio.h

#include string.h

#include netdb.h

#include sys/socket.h

#include arpa/inet.h

#define SERVICE_PORT 8080

#define BUFSIZE 2048

#define HEAD 4

int main(int argc, char **argv)

{

struct sockaddr_in myaddr; /* our address */

struct sockaddr_in remaddr; /* remote address */

socklen_t addrlen = sizeof(remaddr); /* length of addresses */

int recvlen; /* # bytes received */

int fd;     /* our socket */

int msgcnt = 0; /* count # of messages we received */

unsigned char buf[BUFSIZE]="ret_"; /* receive buffer */

/* create a UDP socket */

if ((fd = socket(AF_INET, SOCK_DGRAM, 0))  0) {

perror("cannot create socket\n");

return 0;

}

/* bind the socket to any valid IP address and a specific port */

memset((char *)myaddr, 0, sizeof(myaddr));

myaddr.sin_family = AF_INET;

myaddr.sin_addr.s_addr = htonl(INADDR_ANY);

myaddr.sin_port = htons(SERVICE_PORT);

if (bind(fd, (struct sockaddr *)myaddr, sizeof(myaddr))  0) {

perror("bind failed");

return 0;

}

/* now loop, receiving data and printing what we received */

for (;;) 

{

printf("waiting on port %d\n", SERVICE_PORT);

recvlen = recvfrom(fd, buf+HEAD, BUFSIZE, 0, (struct sockaddr *)remaddr, addrlen);

if (recvlen  0) 

{

buf[HEAD+recvlen] = 0;

printf("received message: \"%s\" (%d bytes)\n", buf+HEAD, recvlen);

}

else

{

printf("uh oh - something went wrong!\n");

}

printf("sending response \"%s\"\n", buf);

if (sendto(fd, buf, strlen(buf), 0, (struct sockaddr *)remaddr, addrlen)  0)

{

perror("sendto");

}

}

close(fd);

return 0;

}

client.c

#include stdlib.h

#include stdio.h

#include string.h

#include netdb.h

#include sys/socket.h

#define SERVICE_PORT 8080

#define BUFLEN 2048

int main( int argc,char* argv[] )

{

struct sockaddr_in myaddr, remaddr;

int fd, i, slen=sizeof(remaddr);

char sendbuf[BUFLEN]="hello"; /* message buffer */

char readbuf[BUFLEN]={0};

int recvlen; /* # bytes in acknowledgement message */

char *server = "127.0.0.1"; /* change this to use a different server */

/* create a socket */

if ((fd=socket(AF_INET, SOCK_DGRAM, 0))==-1)

{

printf("socket created\n");

}

/* bind it to all local addresses and pick any port number */

memset((char *)myaddr, 0, sizeof(myaddr));

myaddr.sin_family = AF_INET;

myaddr.sin_addr.s_addr = htonl(INADDR_ANY);

myaddr.sin_port = htons(0);

if (bind(fd, (struct sockaddr *)myaddr, sizeof(myaddr))  0) 

{

perror("bind failed");

return 0;

}       

memset((char *) remaddr, 0, sizeof(remaddr));

remaddr.sin_family = AF_INET;

remaddr.sin_port = htons(SERVICE_PORT);

if (inet_aton(server, remaddr.sin_addr)==0) 

{

fprintf(stderr, "inet_aton() failed\n");

exit(1);

}

printf("Sending packet %d to %s port %d\n", i, server, SERVICE_PORT);

if (sendto(fd, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)remaddr, slen)==-1)

{

perror("sendto");

exit(1);

}

/* now receive an acknowledgement from the server */

recvlen = recvfrom(fd, readbuf, BUFLEN, 0, (struct sockaddr *)remaddr, slen);

if ( recvlen = 0 ) 

{

readbuf[recvlen] = 0; /* expect a printable string - terminate it */

printf("received message: \"%s\"\n", readbuf);

}

close(fd);

return 0;

}

如果需要整个工程,可以联系我。

如何通过udp获取直播源代码

通过OpenCV下载协议。

TCP和UDP两种协议这里选用UDP协议,主要因为TCP在传输的时候会产生沾包的状况,而UDP不会有这种问题。

于摄像头,使用OpenCV打开并获取每一帧的图像,将其封装成字节流进行传输。将每一帧图像写入内存(与写入文件类似),然后读出为字节用于网络传输.可以想象为先将每一帧图像都保存为文件,再发送文件,不过写入文件太慢,这里直接写入内存。

可以将BytesIO理解为一个保存在内存中的文件,通过写入,写出操作将numpy.array()类型数据转化为二进制文件。

关于udp视频传输代码和视频 udp的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/18038.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载