基于ARM的智能家居系统图像视频监控系统(2)
发布时间:2021-06-05
发布时间:2021-06-05
图像采集模块用到的主要函数有:
capInitCamera()用来初始化视频设备,并获取当前可用的视频设备数目;
capSetVideoFormat()设置视频格式和分辨率。本系统使用的视频格式为RGB24,分辨率为320×240像素;
capGetPicture()获取摄像头最近捕捉的一幅位图,存入指定的缓存中
capCloseCamera() 关闭视频设备
络接口层发送过来的数据包,并把该数据包发送到更高层——TCP层;相反的,IP层也将从TCP层发送过来的数据包发送到接口层——网络层的更低层。而IP数据包是不可靠的,因为IP协议并没有做任何事情来确认数据包的顺序和它的完整性。IP数据包中包含了发送数据包的计算机IP地址(源地址)和接收数据包的计算机IP地址(目标地址)。
所有的TCP通信都发生在两个端点或两个套接字(Socket)之间[2]。每个Socket都有一个端口号与一个IP地址。Socket可以被看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。
在初始化阶段,调用WSAStartup()函数以在应用程序初始化Windows Socket DLL,调用成功后,应用程序即可采用Windows Socket中的其他有关API函数。在此之后,在程序中建立一个用于监听网络的Socket,并定义其采用的通讯协议——TCP协议。完成这一操作的函数是socket()。
SOCKET PASCAL FAR socket( int af, int type, int protocol )
其中第二个形参用于指定套接字的通信类型,当type为SOCK_STREAM时,为遵从TCP协议的通信,若要遵从UDP协议,应设置为SOCK_DGRAM;在智能家居中,采用前者。根据流程,接下来要绑定一个IP地址和端口,这个地址和端口是客户端将要连接的目标,通过调用bind()函数可以完成这一操作。
int PASCAL FAR bind( SOCKET s, const struct sockaddr FAR *name,int namelen );
其中s为被操作的Socket对象,name是ARM端的IP地址。namelen为IP地址的长度。
在监听网络部分,ARM服务器端建立一个监听队列来接受客户端的连接请求。listen()函数可以完成这一操作。
int PASCAL FAR listen( SOCKET s, int backlog ); s为要操作的Socket;backlog为最大连接数,在系统中设置为8。在客户端发出连接请求时,ARM客户端调用accept()函数,从而完成完整的连接操作。在智能家居系统的软件设计中,将监听以太网通过一个线程来实现,TCP读线程工作流程如图3所示。
3.2视频捕捉和视频信息传送
摄像头工作流程经过了初始化摄像头和捕捉视频和关闭摄像头等流程,详细的流程如图2
所示。其中设置视频格式、捕捉图像和发送图像等步骤位于线程CaptureThreadProc中,该线程在点击智能家居系统应用程序界面上的“打开摄像头”按钮后创建,在点击“关闭摄像头”后关闭。视频数据的分包发送在视频监控功能中是关键的一个步骤。在这个步骤里,系统将摄像头采集到的视频数据存储在一个临时的数组中,通过对这个临时数组的数据分割,完成数据的分包存储。在系统中,每个视频数据包的大小为1440字节。在系统的运行测试中,通过断点调试的方式,知道摄像头通过capGetPicture()函数获取到的一帧图像信息的大小大概在4000字节到5000字节之间,所以连续发送四个到五个数据包即可将一幅画面的数据发送到客户端。
Figure 2.Camera work flow chart
图2 摄像头的工作流程图
4以太网通信
在智能家居中,嵌入式平台充当服务器的角色,相应的PC视频监控端充当客户端的角色。服务器端与客户端之间的通信基于TCP/IP协议。Internet 上使用的一个关键的底层协议是网际协议,通常称IP协议。通过这个共同遵守的协议,可以使Internet成为可以连接不同层次的计算机网络。IP协议是TCP/IP协议的心脏,是计算机网络层中最重要的协议,IP协议用来帮助数据找到通往目的计算机的路径[2]。IP层接收从网
上一篇:进程调度实验报告