我实现了一个套接字客户端,通过 HTTP 通过 RTSP 与 IP 摄像机进行通信,以从摄像机获取视频。
为了建立与摄像机的通信,首先我必须设置 HTTP-GET 隧道,然后发送 RTSP 命令。当相机失去连接时,程序必须关闭隧道处理程序,完成线程,当进程返回主函数时,它开始通信(启动线程,等等)。
重新连接时:http-get 隧道设置正常,我的意思是,套接字连接并接收“HTTP OK”,因此程序发送 RTSP“DESCRIBE”,但 recv 始终返回 EAGAIN 错误。我用wiresha 检查相机是否发送了DESCRIBE OK 响应,但recv 从未收到它。
这是代码:
struct sockaddr_in aServer;
// string myData;
char *myData=new char [256];
connection *c=(connection*)vargp;
memset(&aServer, 0, sizeof aServer);
aServer.sin_family = AF_INET;
aServer.sin_addr.s_addr = inet_addr(c->theServer.c_str());
if (aServer.sin_addr.s_addr == INADDR_NONE)
{
struct hostent *hp;
hp = gethostbyname(c->theServer.c_str());
if (hp != NULL)
{
memcpy(&aServer.sin_addr, hp->h_addr, hp->h_length);
aServer.sin_family = hp->h_addrtype; //Protocol family
}
else
cout << "Failed to resolve " << …Run Code Online (Sandbox Code Playgroud)