·上一文章:基于ARM的嵌入式监测系统设计
·下一文章:基于ATmega128的无线数据采集系统
(1)采集视频数据
系统是在嵌入式Linux系统平台上采用Video4Linux编程来采集视频的。一般摄像头是直接读视频设备,采集到视频数据并存在文件中。对文件进行操作,这样程序运行效率会很低。本系统摒弃这种方法,采用mmap(内存映射)方式截取视频数据。mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以向访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。
(2)传输视频数据
本系统通过网络传输视频数据,用套接字(Socket)编程实现。
(3)采集线程与传输线程同步
流媒体服务器的设计有个关键点:保证连续不断的视频流。针对这一点,本系统采用多线程编程,采集和传输并行执行。用互斥量和标志位来实现采集线程和传输线程的同步。
采集数据时给互斥量加锁,直到当前帧采集完并填充完当前帧头结构体才解锁互斥量,再开始传输。同理,传输当前帧时采集线程等待,直到当前帧传输完。采集完两帧数据传输第二帧。传输完成后,采集完第三帧传输第三帧。依此循环,采集完第N帧传输第N帧。此时实际只传输了第2帧到第N帧,即N-1帧。
用户的视觉反应需要时间,此丢弃第一帧的设计思想并不会使画面失真。反而连续不断的视频流传输到客户端为用户能够获得良好的视频质量打下了基础。
采集线程: