微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 浅谈千兆网接口的摄像机设计与实现

浅谈千兆网接口的摄像机设计与实现

时间:01-04 来源:互联网 点击:

'd11:w_dd = 'h1140;//生存期和协议号,固定

  'd12:w_dd = 'h0;//IP校验和,由MAC芯片自动生成

  'd13:w_dd = 'hA8C0;//源IP,固定为192.168.1.204

  'd14:w_dd = 'hCC01;

  'd15:w_dd = 'hFFFF;//目的IP,任意

  'd16:w_dd = 'hFFFF;

  'd17:w_dd = 'h7017;//源端口,固定为6000

  'd18:w_dd = 'h7017;// 目的端口,固定为6000

  'd19:w_dd = 'h0A04;//UDP数据长度

  'd20:w_dd = 'h0;////校验和由AX88180自动生成

  'd21:w_dd = row_num;//图像行信息从0开开始

  default:w_dd = w_dd;

  endcase

3.3 应用程序设计

由于大量数据在网络上传输,用SOCKET的方式来获图像数据包已经比较困难,丢包率会比较高。采用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%.winpcap的主要功能在于独立于主机协议(如TCP-IP)而发送和接收原始数据包。也就是说,winpcap不能阻塞,过滤或控制其他应用程序数据包的发收,它仅仅只是监听共享网络上传送的数据包。因此,它不能用于QoS调度程序或个人防火墙。目前,winpcap开发的主要对象是windows NT/2000/XP,这主要是因为在使用winpcap的用户中只有一小部分是仅使用windows 95/98/Me,并且MS也已经放弃了对win9x的开发。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top