基于千兆网接口的摄像机设计
程序设计
由于大量数据在网络上传输,用SOCKET的方式来获图像数据包已经比较困难,丢包率会比较高。采用Winpcap来捕获网络上的数据包,可有效的减少丢包率。用Winpcap编写程序需要安装开发包及驱动程序。
第一步,指定要通信的网卡设备并打开。
BOOL InitWpcap(){
pcap_if_t* alldevs;
pcap_if_t* d;
char errbuf[PCAP_ERRBUF_SIZE];
if(pcap_findalldevs(&alldevs, errbuf) == -1){
AfxMessageBox("Error in pcap_findalldevs");
return FALSE; }
// 枚举网卡然后添加到用户选择的ComboBox中,代码省略
char *filter = "port 6000";//只接收端口6000的数据
bpf_u_int32 NetMask = 0xFFFFFF;
struct bpf_program fcode;
if(pcap_compile(m_pcap, &fcode, filter, 1, NetMask) < 0){
AfxMessageBox("nError compiling filter: wrong syntax");
pcap_close(m_pcap); return FALSE; }
if(pcap_setfilter(m_pcap, &fcode)<0){
AfxMessageBox("nError setting the filtern");
pcap_close(m_pcap); return FALSE; }
pcap_freealldevs(alldevs); // 释放alldev资源
return TRUE;}
第二步:开启一个线程接收数据。
UINT RecvProc(LPVOID lpParammeter)
{ pcap_loop(m_pcap, 0, packet_handler, NULL); return 0;}
packet_handler是处理收到数据包的回调函数, 当从port6000收到数据后它会被调用,直到线程终止。
第三步:处理收到的数据
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data){
const u_char *real_data = pkt_data+42;
int row="real"_data[0]+(real_data[1]<<8); }//这里就没有处理包头,直接处理数据。
4 总结
千兆网接口摄像机,网络传输有效数据带宽达400Mb/s以上,较好的解决了百兆网传输带宽不足、数据传输速度慢的问题。传输300万像素不进行压缩的原始图像,帧率可达18帧/秒,视频流畅清晰。计算机采用Winpcap捕获图像数据,丢包率小于0.02%。
- CCD摄像机最低照度浅析 (05-11)
- 基于TMS320DM270平台的数码摄像机的设计与实现(02-25)
- 基于FIC8120和PoE的IP-Camera设计(03-11)
- 解析智能视频监控系统的构建以及应用(05-14)
- 如何应对高清移动多媒体设计中的挑战?(09-18)
- 无线摄像头的应用(10-19)