- 论坛徽章:
- 0
|
通过HI3535芯片,想解码IPC的视频数据
测试发现前提是:要定时给IPC发送心(IPC会通过TCP返数据给解码板),IPC才会一直送视频数据过来;
//给 IPC 发送心跳的线程如下:
HI_VOID TCPConnectCheckThread(HI_VOID *pArgs)
{
while(1)
{
usleep(100000);//发送心跳的时间间隔
memset(recvBuf,0,sizeof(recvBuf));
//tcp 此处原为阻塞式模式
ul = 1;
ioctl(sockfd, FIONBIO, &ul);//设为非阻塞式
sendVal = send(sockfd, HeartBuff, sizeof(HeartBuff), 0); //发送心跳
ul = 0;
ioctl(sockfd, FIONBIO, &ul); //设置为阻塞模式
if (SOCKET_ERROR == sendVal) //异常判断
{
printf("SOCKET_ERROR \n");//此时我认为网线断开,或IPC掉电。。。???这个地方
if(iTcpConnectFlag != -1)//程序运行前创建了TCPsocket iTcpConnectFlag = 1;那么要先关闭当前TCPscoket之后才能再创建;反之则不需要
{
close(sockfd);
printf(" close(sockfd);\n");
}
while(1)
{
iTcpConnectFlag = TcpSockInit(pstSendParam);
if(-1 == iTcpConnectFlag)
{
printf(" not connect..\n");
}else{
printf("TCP重连成功。。。\n");
break;
}
}
}
}
}
出现的问题:
1,
当IPC网络连接是正常时,程序运行会进入if (SOCKET_ERROR == sendVal)条件:
不知道这种情况是如何产生?
2,
正确的心跳应该如何发送?
3,
我想实现,对网络异常的正确处理,IPC突然被拔掉网线或掉电等,再重新插上或上电,图像也能正常再显示; |
|