8个摄像头装好了,连好在一台设备上,另连好的一根网线接两个路由器与什么设备连接,才能使用。

超级详细,教您制作网线和网线连接方法
如果只有一根网线,但想两台机子同时上网,不增加外设,做网线时45水晶头连接方法
水晶头金属面对自己,从左到右为1-8 (白橙、橙,白绿、蓝,白蓝、绿,白棕、棕)
网 线 的 接 法
一、PC连HUB (电脑连接上网设备)
22:21 上传
20:36 上传
A端:(标准568B):白橙,橙,白绿,蓝,白蓝,绿,白棕,棕。
B端:(标准568B):白橙,橙,白绿,蓝,白蓝,绿,白棕,棕。
二、PC连PC&
&(电脑连接电脑)
20:36 上传
A端:(568A): 白绿,绿,白橙,蓝,白蓝,橙,白棕,棕;
B端:(标准568B):白橙,橙,白绿,蓝,白蓝,绿,白棕,棕。
三、HUB连HUB& &
(上网设备连接上网设备)
20:36 上传
A端:(568A): 白绿,绿,白橙,蓝,白蓝,橙,白棕,棕;
B端:(568B): 白橙,橙,白绿,蓝,白蓝,绿,白棕,棕。
千兆5类或超5类(包括6类线)双绞线的形式与百兆网线的形式相同,也分为直通和交叉两种。
直通网线与我们平时所使用的没有什么区别,都是一一对应的。
但是传统的百兆网络只用到4 根线缆来传输,而千兆网络要用到8 根来传输,所以千兆交叉网线的制作与百兆不同,制作方法如下:
1对3,2对6,3对1,4对7,5对8,6对2,7对4,8对5。例如:
一端为:白橙、橙,白绿、蓝,白蓝、绿,白棕、棕;
另一端:白绿、绿,白橙、白棕、棕,橙,蓝,白蓝;
T568B:橙白、橙、绿白、蓝、蓝白、绿、棕白、棕
T568A:绿白、绿、橙白、蓝、蓝白、橙、棕白、棕
直连线:两端都做成T568B或T568A。用于不同设备相连(如网卡到交换机)。
交叉线:一端做成T568B一端做成T568A。用于同种设备相连(如网卡到网卡)。
10M的网卡中只有四根弹片,8根线中另四根不起作用所以要求低,两边是同一顺序就行,但最好按规范做;100M的网卡中有8根弹片,四根用于数据传输,另四根用于防串扰,严格按照规范做线能减少网络故障。
100M使用四对线
要求12,36,45,78必须双绞
交叉线的制作(用于HUB没有线连口、两台电脑直连)
1 2 3 4 5 6 7 8
3 6 1 4 5 2 7 8
1 2 3 4 5 6 7 8
3 6 1 2 7 8 4 5
饿魔心得:10M使用两对线1、2、3、6。(其中1发送数据、1发送数据、2发送数据、3发送数据、6接收数据:4、5、7、8保留。)
&如果只有一根网线,但想两台机子同时上网,不增加外设,做网线时45水晶头连接方法;或者说一个房间只有一个网线接口,但要两台机子上网,现在该怎么办呢?前提是不增加外设。(前提你用的是10M网卡哈)方法如下:
(1)其实一般公司网络和个人网络都最多10M,也就是说网线实际工作的线路只有:1、2、3、6(也就是说只需要4条线就可以上网)(以:标准586B:橙白-1,橙-2,绿白-3,蓝-4,蓝白-5,绿-6,棕白-7,棕-8&
为例子。)即:实际工作线路是:橙白-1,橙-2,绿白-3,绿-6。其中:蓝-4,蓝白-5,棕白-7,棕-8&
正好是多余。
(2)大家都知道网线有8条,剩余的四条正好接另一台机子。具体接法如下:拨开接好的网线取出:蓝-4,蓝白-5,棕白-7,棕-8
,4根线,连接另一个水晶头,因为水晶头位置不好确定,你可以找几根费线占位。网线两头排列如下:蓝-1,蓝白-2,棕白-3,废线-甲,废线-乙,棕-6,废线-丙,废线-丁。(废线作用只是占水晶头里的位置,因为怕剩余4根线排错位置。其实无实质意义,因此断截截都可以)
OK 大功告成
10M使用两对线1、2、3、6。( 其中1发送数据、1发送数据、2发送数据、3发送数据、6接收数据:4、5、7、8保留。)
双机直连网线做法《图示》
20:36 上传
如果是双机直联,必须使用交叉网线(实际上就是1236四根线交叉),实际上电信ADSL所提供的那根网线就是这种网线,其两头的排列方式分别为:
  1 2 3 4 5 6 7 8
  3 6 1 4 5 2 7 8
  如果是使用简易网线测量仪,其灯跳顺序应为:12→45→78→36→12,下面更详细的再说一遍:
  一端: 白橙/橙/白绿/蓝/白蓝/绿/白棕/棕() 1 2 3 4 5 6 7 8
  一端: 白绿/绿/白橙/蓝/白蓝/橙/白棕/棕() 3 6 1 4 5 2 7 8
  你也可以把4578四根线也交叉,即:
  1 2 3 4 5 6 7 8
  3 6 1 7 8 2 4 5
白橙橙白绿蓝白蓝绿白棕棕TX_D1+TX_D1-TX_D2+TX_D2-TX_D3+TX_D3-TX_D4+TX_D4-TX_D2+TX_D3-TX_D1+TX_D2-TX_D3+TX_D1-TX_D4+TX_D4-白绿绿白橙蓝白蓝橙白棕棕
HUB上的级连口的妙用通常HUB上都会留一个口用于HUB之间的级连,也就是将许多HUB连在一起用,为了在不级连时充分利用硬件资源,该接口一般与其旁边一个普通网卡接口是相通的。另外一种情形是设置一个拨动开关用来改变最后一个网口的功能,那么作为级连用的网口到底有什么不同呢?事实上非常简单,级连的网口就是一个标准的双机直连接口,也就是1与3、2与6交*,想不到吧。那么我们知道这个事实,就可以:1、图五情形时,在HUB没电的时候也可以用二条普通网线连接二台电脑,只需将一条网线插在级连口,另一个接它旁边的接口就行。2、对没有级连口的HUB,我们可以通过一条双机直连线将它与别的HUB级连起来(各插任意一个普通网口即可)。3、将双机直连线插入HUB之级连口,可以象普通网线一样插其它HUB网口一样连网(1与3、2与6交*二次,又变回去了嘛),这样你出门只需带一条双机直连线即可,直连与插HUB二不误,上门服务人员特有用。。
两台电脑直连的方法
两台具有支持800.11b的无线网卡的电脑,配置成无线对等网的注意事项。
1、将无线网卡都开启。
2、在无线网络连接的属性中的“无线网络配置”标签下,选择“用Windows来配置我的无线网络配置”。在“首选网络”中,添加一个网络。“服务名(SSID)”可以任意命名,但两台电脑的SSID必须相同。没有特别的需要,“网络验证”可以配置成“开放式”,“数据加密”可以配置成“已禁用”。
3、特别注意。在高级选项中,必须配置成“仅计算机到计算机”。不然无法形成对等网。
还要补充一点,需要开启Windows的Wireless的相关服务!
1。把笔记本和台式机连起来的方法有这样几种:
一是通过网络直连线连接。到市场中买一条网线,五类双绞线,然后让卖线的人帮忙做成直通方式,回家把网线的两头分别插在笔记本和台式机上,配置好网络IP地址就可以了。连接速度为100Mbps左右
二是通过红外线连接。如果你的台式机上有前置红外线接口,而且你的笔记本上有红外线接口,那么打开两台机器的红外端口就可以自动找到机器并互传文件了。
三是通过无线连接,台式机连接一个USB接口的无线网卡,笔记本上也装一个无线网卡,然后打开两个无线网卡,在找到对方后并配置好网络IP地址后就可以共享使用了。使用感觉就像使用有线网一样,但是这种方式可以自由移动,不受约束:)
四是通过IEEE1394线连接,然后两台主机就可以通讯了,其通讯速度非常快。
五是通过一个USB桥接线,就是那种可以让两台主机互联的那种,插上后再装好驱动程序后就可以双机互联了。
六是通过并口将双机互联
七是通过串口双机互联
2。对于共用宽带的问题,稍微复杂一点。首先,你的操作系统最好是XP PRO的或者是WIN2K
SERVER的,支持双网卡互联,然后在上网设置中打开“允许其他人通过这台机器连入INTERNET”的选项,在另一台上设置上网方式是通过“另一台电脑上网”,这样就可以了,但是设置起来非常繁琐而且不易一次成功。另外一种方式可以通过在台式机上使用WINGATE之类的代理服务器软件,然后笔记本通过代理服务器方式利用台式机上网。还有一种方式,现在有些软件可以支持智能连接网络和共享上网功能,我试用过的联想Y300笔记本上随机送的那种关联任意通软件就可以这样。挺方便的。
网络直连跟操作系统版本无关。XP/2K/98/ME之间是可以互联的。关键是网络是否畅通,网络参数是否设置争确。双机直连需要直连网线,就是一正一反两个头的那种。连好后应该可以看到网卡上的指示灯在闪烁。然后设置IP地址,建议一般设置成:
192.168.0.1,子网掩码是:255.255.255.0。另一台设置成192.168.0.2,子网掩码:255.255.255.0。然后使用DOS命令:ping
192.168.0.X,如果反馈信息是XXms,就表示网络畅通,双机互联成功了。否则就要检查是否是网线没有接好或者是网线有问题。肯定不能使用两个正头的,那是用来接HUB或者交换机用的。
首先说一下差分方式传输。所谓差分方式传输,就是发送端在两条信号线上传输幅值相等相位相反的电信号,接收端对接受的两条线信号作减法运算,这样获得幅值翻倍的信号。
&&&其抗干扰的原理是:假如两条信号线都受到了同样(同相、等幅)的干扰信号,由于接受端对接受的两条线的信号作减法运算,因此干扰信号被基本抵消,那么怎样才能保证两条信号线受到的干扰信号尽量是同相、等幅的呢?办法之一那就要将两根线扭在一起,按照电磁学的原理分析出:可以近似地认为两条信号线受到的干扰信号是同相、等幅的。差分方式传输信号在高档音响器材中也经常采用。&&
现在的快速以太网普遍采用了差分方式传输信号,并以双绞线作为传输介质,配以安装使用都方便的RJ45接头。RJ45接头的8个接脚的识别方法是,铜接点朝自己,头朝右,从上往下数,分别是1、2、3、4、5、6、7、8,如图1。规定双工方式下本地的1、2两脚为信号发送端,3、6两脚为信号接收端,所以讲,这两对信号必须分别使用一对双绞线进行信号传输。
在做线时要特别注意。虽然在理论和实际使用上讲,线的颜色顺序如何规定没有关系,但考虑到日后维护的方便,国际上还是对线的颜色顺序做了规定,一般讲,对直连缆而言,1、2两脚使用橙色的那对线,其中白线接1脚,橙线接2脚;3、6两脚使用绿色的那对线,其中白线接3脚,绿线接6脚,剩下的两对线在10M、100M快速以太网中一般不用,通常将两个接头的4、5和7、8两接头分别使用一对双绞线直连,4、5用蓝色的那对线,4为蓝色,5为白色;7、8用棕色的那对线,7为白色、8为棕色。如图2。如果做的是交叉缆,只须将其中一个头的1、2和3、6对调一下就行,如图3。很多人做直连缆时将线排成如图4所示,这是错误的。这种做法3、6信号线未绞在一起,失去了双绞线的屏蔽作用。
虽然在传输距离近时能正常使用不容易被发现,当传输距离远时会出现丢包,很多人会怀疑网卡质量和网线质量,往往不会想到是线做的有问题。
在网线制作的过程中,要用到一些制作的辅助工具和材料。在此,先为大家介绍一些这些工具和材料。在制作的工程中,最重要的工具当然就是压线钳了,当然这个压线钳的工具不仅仅是压线自用,钳上还具备着很多“好本领”。
压线钳目前市面上有好几种类型,而实际的功能以及操作都是大同小异,我们就以上图的一把为例,该工具上有三处不同的功能。
在压线钳的最顶部的是压线槽,压线槽供提供了三种类型的线槽,分别为6P、8P以及4P,中间的8P槽是我们最常用到的RJ-45压线槽,而旁边的4P为RJ11电话线路压线槽。
在压线钳8P压线槽的背面,我们可以看到呈齿状的模块,主要是用于把水晶头上的8个触点压稳在双绞线之上。
最前端是剥线口,刀片主要是起到切断线材  我们局域网内组网所采用的网线,使用最为广泛的为双绞线(Twisted-Pair
Cable;TP),双绞线是由不同颜色的4对8芯线组成,每两条按一定规则绞织在一起,成为一个芯线对。作为以太局域网最基本的连接、传输介质,人们对双绞网线的重视程度是不够的,总认为它无足轻重,其实做过网络的人都知道绝对不是这样的,相反它在一定程度上决定了整个网络性能。这一点其实我们很容易理解,一般来说越是基础的东西越是取着决定性的作用。双绞线作为网络连接的传输介质,将来网络上的所有信息都需要在这样一个信道中传输,因此其作用是十分重要的,如果双绞线本身质量不好,传输速率受到限制,您说即使其它网络设备的性能再好,传输速度再高又有什么用呢?因为双绞线已成为整个网络传输速度的一个瓶颈。它一般有屏蔽(STP)与非屏蔽(UTP)双绞线之分,屏蔽的当然在电磁屏蔽性能方面比非屏蔽的要好些,但价格也要贵些。
 双绞线按电气性能划分的话,可以划分为:三类、四类、五类、超五类、六类、七类双绞线等类型,数字越大,也就代表着级别越高、技术越先进、带宽也越宽,当然价格也越贵了。三类、四类线目前在市场上几乎没有了,如果有,也不是以三类或四类线出现,而是假以五类,甚至超五类线出售,这是目前假五类线最多的一种。目前在一般局域网中常见的是五类、超五类或者六类非屏蔽双绞线。屏蔽的五类双绞线外面包有一层屏蔽用的金属膜,它的抗干扰性能好些,但应用的条件比较苛刻,不是用了屏蔽的双绞线,在抗干扰方面就一定强于非屏蔽双绞线。屏蔽双绞线的屏蔽作用只在整个电缆均有屏蔽装置,并且两端正确接地的情况下才起作用。所以,要求整个系统全部是屏蔽器件,包括电缆、插座、水晶头和配线架等,同时建筑物需要有良好的地线系统。事实上,在实际施工时,很难全部完美接地,从而使屏蔽层本身成为最大的干扰源,导致性能甚至远不如非屏蔽双绞线UTP。所以,除非有特殊需要,通常在综合布线系统中只采用非屏蔽双绞线。
双绞线作为一种价格低廉、性能优良的传输介质,在综合布线系统中被广泛应用于水平布线。双绞线价格低廉、连接可靠、维护简单,可提供高达1000Mbps的传输带宽,不仅可用于数据传输,而且还可以用于语音和多媒体传输。目前的超五类和六类非屏蔽双绞线可以轻松提供155Mbps的通信带宽,并拥有升级至千兆的带宽潜力,因此,成为当今水平布线的首选线缆。&&
当水晶头(RJ45头)金属片面对我们的时候从左至右引脚序号是1-8,
标准568A:
绿白--1,绿--2,橙白--3,蓝--4,蓝白--5,橙--6,棕白--7,棕--8;
标准568B:
橙白--1,橙--2,绿白--3,蓝--4,蓝白--5,绿--6,棕白--7,棕--8。
这序号做网络联线时非常重要,不能搞错。
RJ-45接口没有被压线之前金属触点凸出在外,RJ-45插头之所把它称之为“水晶头”,主要是因为它的外表晶莹透亮的原因而得名的。RJ-45接口是连接非屏蔽双绞线的连接器,为模块式插孔结构。如上图所示,RJ-45接口前端有8个凹槽,简称8P(Position),凹槽内的金属接点共有8个,简称8C(Contact),因而也有8P8C的别称。
在市场上十分常见的二叉式RJ-45接口  从侧面观察RJ-45接口,可以看到平行排列的金属片,一共有8片,每片金属片前端都有一个突出透明框的部分,从外表来看就是一个金属接点,按金属片的形状来划分,又有“二叉式RJ-45”以及“三叉式RJ-45”接口之分。二叉式的金属片只有两个侧刀,三叉式的金属片则有三个侧刀。金属片的前端有一小部分穿出RJ-45的塑料外壳,形成与RJ-45插槽接触的金属脚。在压接网线的过程中,金属片的侧刀必须刺入双绞线的线芯,并与线芯总的铜质导线内芯接触,以联通整个网络。一般地,叉数目越多,接触的面积也越大,导通的效果也越明显,因此三叉式的接口比二叉式接口更适合高速网络。
水晶头也有几种档次之分,有带屏蔽的也有不带屏蔽的等等,一般地说质量比较好的价钱也就是5角左右,当然买一个两个的话价钱肯定不能便宜下来。在选购时应该尽量避免贪图便宜,否则水晶头的质量得不到保证。主要体现在它的接触探针是镀铜的,容易生锈,造成接触不良,网络不通。质量差的还有一点明显表现为塑料扣位不紧(通常是变形所致),也很容易造成接触不良,网络中断。水晶头虽小,但在网络的重要性一点都不能小看,在许多网络故障中就有相当一部分是因为水晶头质量不好而造成的。
双绞线制作全过程图解:
第一步:我们首先利用压线钳的剪线刀口剪裁出计划需要使用到的双绞线长度。
第二步:我们需要把双绞线的灰色保护层剥掉,可以利用到压线钳的剪线刀口将线头剪齐,再将线头放入剥线专用的刀口,稍微用力握紧压线钳慢慢旋转,让刀口划开双绞线的保护胶皮。
把一部分的保护胶皮去掉。在这个步骤中需要注意的是,压线钳挡位离剥线刀口长度通常恰好为水晶头长度,这样可以有效避免剥线过长或过短。若剥线过长看上去肯定不美观,另一方面因网线不能被水晶头卡住,容易松动;若剥线过短,则因有保护层塑料的存在,不能完全插到水晶头底部,造成水晶头插针不能与网线芯线完好接触,当然也会影响到了线路的质量
剥除灰色的塑料保护层之后即可见到双绞线网线的4对8条芯线,并且可以看到每对的颜色都不同。每对缠绕的两根芯线是由一种染有相应颜色的芯线加上一条只染有少许相应颜色的白色相间芯线组成。四条全色芯线的颜色为:棕色、橙色、绿色、蓝色。每对线都是相互缠绕在一起的,制作网线时必须将4个线对的8条细导线逐一解开、理顺、扯直,然后按照规定的线序排列整齐。
  说到这里,笔者要说明一下的接线标准,其中双绞线的制作方式有两种国际标准,分别为EIA/TIA568A以及EIA/TIA568B。而双绞线的连接方法也主要有两种,分别为直通线缆以及交叉线缆。简单地说,直通线缆就是水晶头两端都同时采用T568A标准或者T568B的接法,而交叉线缆则是水晶头一端采用T586A的标准制作,而另一端则采用T568B标准制作,即A水晶头的1、2对应B水晶头的3、6,而A水晶头的3、6对应B水晶头的1、2。
T568A标准描述的线序从左到右依次为:
T568B标准描述的线序从左到右依次为:
而在什么情况该做成直通线缆,而交叉线缆又该用在什么场合呢?接下来,笔者为大家简单列举一下。
补充一点,同种设备相连用交叉线,不同设备相连用直通线!!
第三步:我们需要把每对都是相互缠绕在一起的线缆逐一解开。解开后则根据需要接线的规则把几组线缆依次地排列好并理顺,排列的时候应该注意尽量避免线路的缠绕和重叠。
把线缆依次排列并理顺之后,由于线缆之前是相互缠绕着的,因此线缆会有一定的弯曲,因此我们应该把线缆尽量扯直并尽量保持线缆平扁。
把线缆扯直的方法也十分简单,利用双手抓着线缆然后向两个相反方向用力,并上下扯一下即可
 第四步:我们把线缆依次排列好并理顺压直之后,应该细心检查一遍,之后利压线钳的剪线刀口把线缆顶部裁剪整齐,需要注意的是裁剪的时候应该是水平方向插入,否则线缆长度不一会影响到线缆与水晶头的正常接触。若之前把保护层剥下过多的话,可以在这里将过长的细线剪短,保留的去掉外层保护层的部分约为15mm左右,这个长度正好能将各细导线插入到各自的线槽。如果该段留得过长,一来会由于线对不再互绞而增加串扰,二来会由于水晶头不能压住护套而可能导致电缆从水晶头中脱出,造成线路的接触不良甚至中断。
裁剪之后,大家应该尽量把线缆按紧,并且应该避免大幅度的移动或者弯曲网线,否则也可能会导致几组已经排列且裁剪好的线缆出现不平整的情况。
第五步:我们需要做的就是把整理好的线缆插入水晶头内。需要注意的是要将水晶头有塑造料弹簧片的一面向下,有针脚的一方向上,使有针脚的一端指向远离自己的方向,有方型孔的一端对着自己。此时,最左边的是第1脚,最右边的是第8脚,其余依次顺序排列。插入的时候需要注意缓缓地用力把8条线缆同时沿RJ-45头内的8个线槽插入,一直插到线槽的顶端。
在最后一部的压线之前,我们可以从水晶头的顶部检查,看看是否每一组线缆都紧紧地顶在水晶头的末端。
第六步:当然就是压线了,确认无误之后就可以把水晶头插入压线钳的8P槽内压线了,把水晶头插入后,用力握紧线钳,若力气不够的话,可以使用双手一起压,这样一压的过程使得水晶头凸出在外面的针脚全部压入水晶并头内,受力之后听到轻微的“啪”一声即可。
如下图所示,压线之后水晶头凸出在外面的针脚全部压入水晶并头内,而且水晶头下部的塑料扣位也压紧在网线的灰色保护层之上。
网线测试仪的应用 :
  先来简单地介绍一下测试仪上的几个接口,这个测试仪可以提供对同轴电缆的BNC接口网线以及RJ-45接口的网线进行测试。我们把在RJ-45两端的接口插入测试仪的两个接口之后,打开测试仪我们可以看到测试仪上的两组指示灯都在闪动。若测试的线缆为直通线缆的话,在测试仪上的8个指示灯应该依次为绿色闪过,证明了网线制作成功,可以顺利的完成数据的发送与接收。若测试的线缆为交叉线缆的话,其中一侧同样是依次由1~8闪动绿灯,而另外一侧则会根据3、6、1、4、5、2、7、8这样的顺序闪动绿灯。若出现任何一个灯为红灯或黄灯,都证明存在断路或者接触不良现象,此时最好先对两端水晶头再用网线钳压一次,再测,如果故障依旧,再检查一下两端芯线的排列顺序是否一样,如果不一样,随剪掉一端重新按另一端芯线排列顺序制做水晶头。如果芯线顺序一样,但测试仪在重夺后仍显示红色灯或黄色灯,则表明其中肯定存在对应芯线接触不好。此时没办法了,只好先剪掉一端按另一端芯线顺序重做一个水晶头了,再测,如果故障消失,则不必重做另一端水晶头,否则还得把原来的另一端水晶头也剪掉重做。
直到测试全为绿色指示灯闪过为止
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。1、在电脑上增加视频采集卡就可以把摄像机的图像传到电脑上,如果一台电脑要处理8路图像应该采用视频压缩卡,否则CPU会吃不消。图像压缩卡“海康威视”是国内第一品牌,4路的大概1千多元。通常买压缩卡都会送一套监控软件,你的电脑就可以看到监控图像同时做录像了。
2、通常的PC机不宜长时间连续工作,用于保安监控录像的可以买一台硬盘录像机(DVR)8路的3~4千元就有了,大华 、海康威视,都是不错的牌子。现在的DVR除了可以录像外还能把监控图像发送到网络上,通过网络可以随时查看监控的场景,不错的。
3、摄像机品种非常多,但一般都是贴牌的。相信一分钱一分货吧,如果定焦的1~2千比较合适,再便宜的靠不住。镜头的选择就比较长篇了:
镜头光圈分手动和自动两种。以往由于摄像机的使用在室外或其它特殊场合等缘故,所以较多选用自动光圈镜头。在目前的监控工程中,由于智能建筑大量使用CCTV系统,室内监控点占较高的比例。而许多工程商在做工程设备报价时,也同样喜欢采用自动光圈镜头。虽然自动光圈镜头对监控点的光线变化适应性较强,但其价格也明显高于相同焦距的手动定焦镜头。而现在大多数的摄像机都有电子快门,室内的光源也较为稳定,因此,智能建筑项目中大量采用自动光圈镜头没有太大的必要;另一方面,现在市场上用的自动光圈镜头分为二大类:a.电源驱动自动光圈镜头;b.视频驱动自动光圈镜头。电源驱动自动光圈镜头是通过四根线控制镜头的,其中两根为DC12V或DC24V电源来驱动镜头中的马达,另两根控制线通过镜头内的光感应点感应外部光源的照度来控制光圈的大小;视频驱动自动光圈镜头则是通过三根线来控制镜头的,其中一根为视频触发信号来起动光圈,并控制光圈大小,另二根为DC12V或DC24V电源线驱动电机马达。目前市场上大多黑白或彩色摄像机虽然有自动光圈镜头接口,但除了少数可以兼容二种镜头以外,大多数摄像机不能兼容,只能使用电源驱动自动光圈镜头或视频驱动自动光圈镜头。如果在使用中当一些摄像机损坏时,新购入的摄像机就有与原来的自动光圈镜头是否兼容的问题。但当工程中的监控点在室外时,采用带自动光圈的镜头是必要的,因为室外的光线的动态范围变化较大,夏日阳光下环境照度达50000Lx-100000Lx;夜间路灯时仅为10Lx,变化幅度相当大。在这种情况下摄像机无论是否具有自动调整灵敏度功能即通过摄像机本身的电子快门已不可能适应这么宽的照度范围,也就无法达到控制图像效果的作用。
117.10.52.*
用什么看呀?浏览器?我不是很懂 ,请专家指点 谢谢
125.116.22.*
成本低,一个要不了多少钱!
talkaboutwang
成本高吗,一个要多少钱
呵呵,最重要的要买的东西说错了啊,交换机是接电视的吧,视频采集卡才是接电脑的.不好意思,分给第二个了.
您的举报已经提交成功,我们将尽快处理,谢谢!
安装监控设备有两种情况:一种是全自动监控,一种是人工值守的监控。
全自动监控设备一般就是硬盘摄像机,需要在电脑上安装视频采集卡,视频采集卡的类型分为两种情况,...
不用装系统,直接买一个带存储卡的摄像头就可以了,淘宝上卖的很多。标清的200到300元左右,高清的400到500元。买时根据你要监控的距离,配合适的镜头就可以了...
需要视频采集卡,软件,摄像头,我给你个知道的方案,淘宝买一个一路的USB视频采集卡,内附软件,把USB视频采集卡插在电脑USB口上,然后安装上赠送的软件,然后把...
1、监控用硬盘录像机,一般最大能放8块硬盘,市面上最大的硬盘容量是3T,这样硬盘录像机的容量就是24T,注意单位是T不是G,1T=1000G,也就是有24000...
大家还关注
pagepro+1590mf如何设置手动...
米歌meeg++210R多少钱 米歌me...
小米路由器不能进后台管理 小米路由器不能...IP摄像头技术(6)
linux(28)
图像处理(8)
IP摄像头技术纵览(一)— linux 内核编译,USB摄像头设备识别
开始正文之前先来认识一下我的开发环境:
系统:ubuntu 10.04
开发板:AT91SAM9260 + Linux-2.6.30
USB摄像头:UVC无驱摄像头(着手开发时只是随便买了个usb摄像头,根本不知道摄像头还有那么多讲究)
关于UVC摄像头,这里引用度娘的一段解释:
UVC,全称为:USB video class 或USB video device class,UVC是Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准,目前已成为USB org标准之一。如今的主流操作系统(如Windows XP SP2 and later, Linux 2.4.6 and later, MacOS 10.5 and later)都已提供UVC设备驱动,因此符合UVC规格的硬件设备在不需要安装任何的驱动程序下即可在主机中正常使用。
使用 UVC 的好处是省略了驱动程序安装这一环节,所以称为无驱—-其实就是不用安装驱动的意思。
开始正文前先来看一下我的开发板:
有没有很霸气 (0^◇^0)/,IP64防护等级,绝对秒杀其他开发板,不服拍倒:-D。好了,闲话少提,进入正题。
本文属于《IP摄像头技术纵览》系列文章之一:
Author: chad
本文可以自由转载,但转载请务必注明出处以及本声明信息。
  天地初开,大道始行。进行Linux开发的第一步是创建交叉编译工具链,不同的Linux内核版本,不同的硬件平台,我们使用的交叉工具链是不同的。曾经,很长一段时间我一直有个疑惑:为什么我用at91sam9260交叉编译工具链编译的程序只能在at91sam9260上运行,在mini2440上就不能运行?相反,用使用于mini2440的交叉编译工具链编译的程序在at91上也不能运行?mini2440与at91sam9260都是arm平台,同样使用linux系统,为何二进制程序不能通用呢?
  交叉编译工具链的创建只是第一步,为了实现usb摄像头图像采集功能,又该如何配着linux内核,如何检测usb摄像头并采集图像呢?
  要搞清楚这些问题,本文将追本溯源,从头到尾,围绕以下问题展开:
交叉编译工具链是什么?
交叉编译工具链有什么组成?
交叉编译工具链如何工作?
如何自己创建交叉编译工具链?
如何配置、编译Linux内核?
如何创建Linux文件系统?
如何编写USB摄像头视频图像采集程序?
编译完成的程序文件是什么格式?
在我们运行程序文件时,程序是如何运行起来的?
传说中的linux虚拟存储管理是什么?它与程序的运行有什么关系?
。。。。。。。
  问题是无穷的,只有有问题的程序员才能越走越远。我们是不建议重复发明轮子的,但如果我们不自己发明一次,我们永远不知道轮子是怎么来的。我在这里只发问,引起大家的思考,然后给出部分答案(我也没能力给出太多^_^o~ 努力!)。我相信,只有明白了大道,才能更好的开发。
一、内核编译、文件系统移植—茅庐初创
  上文已说,内核编译的第一步是建立交叉编译工具,那么:
1. 交叉编译工具链是什么?
  交叉编译是嵌入式开发过程中的一项重要技术,其主要特征是某机器中执行的程序代码不是在本机编译生成,而是由另一台机器编译生成,一般把前者称为目标机,后者称为主机。
  采用交叉编译的主要原因在于,多数嵌入式目标系统不能提供足够的资源供编译过程使用,因而只好将编译工程转移到高性能的主机中进行,这就需要在强大的pc机上建立一个用于目标机的交叉编译环境。
2. 交叉编译工具链有什么组成?
  交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境。
  Linux下的交叉编译环境重要包括以下几个部分:
(1)针对目标系统的编译器gcc/g++;
(2)针对目标系统的二进制工具binutils;
(3)目标系统的标准c库glibc,有时出于减小libc 库大小的考虑,你也可以用别的c库来代替glibc,例如uClibc、newlib等;
(4)目标系统的Linux内核头文件等。
3. 交叉编译工具链如何工作—编译原理?
  使用gcc编译程序时,编译过程可被细分为四个阶段:
(1)预处理
以hello.c为例:
#include &stdio.h&
int main()
printf("hello world.\n");
1、预处理(Preprocessing)
  预处理阶段,编译器将对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析,它把”stdio.h”的内容插入到hello.i文件中,用户使用-E选项进行查看:
gcc -E hello.c -o hello.i
2、编译(Compilation)
  gcc首先检查语法的规范性以及是否有语法错误等,以确定代码实际要做的工作,用户可以使用”-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码:
gcc -S hello.i -o hello.s
3、汇编(Assembly)
  汇编阶段是把编译阶段生成的“.s”文件转成目标文件,用户在此可使用选项”-c”就可看到汇编代码已转化为”.o”的二进制目标代码:
gcc -c hello.s -o hello.o
4、链接(Linking)
  在该阶段涉及一个重要的概念:函数库。上例程序中并没有定义”printf”的函数实现,在预编译中包含进的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,”printf”函数是如何被调用的呢?最后的答案是:系统把这些函数实现都己经被放入名为libc.so.6的库文件中去了,在没有特别指定时库函数搜索路径时,gcc会到系统默认的搜索路径“/usr/Iib”下进行查找,链接到libc.so.6库中的”printf”实现,链接的最终结果是生成可执行ELF文件:
hello.o –o hello
4. 如何自己创建交叉编译工具链?
  进行嵌入式Linux开发的第一步是创建交叉编译工具链,在过去很长的一段时间里,构建一套交叉编译工具链对于嵌入式开发者来说简直是一场恶梦,因为他们得手动跟踪各种源码包(及其更新包)之间的依赖关系。直到buildroot的出现改变了这一事实。
  Buildroot是一个Makefiles和patches的命令集,它可以非常简单的为你的目标系统产生一个交叉编译工具链和根文件系统,整个创建过程就如同编译Linux内核一般。
在Linux中使用Buildroot建立整个ARM交叉编译环境的整体过程为:
(1)下载buildroot
(2)安装依赖库软件包
(3)解压buildroot压缩包
(4)进入源码目录,执行make menuconfig配置
(5)保存退出生成.config 文件
(7)修改环境变量
(8)测试arm-linux-gcc
(9)hello.c测试
其中,导致不同平台交叉编译工具链不可通用的主要参数是:
#下面的注释同时对比mini2440平台与at91sam9260平台
Target Architecture(arm)
Target Architecture Variant(arm926t)
Target ABI (OABI)
①EABI(Embedded ABI)
mini2440的选择。
②OABI(Old ABI)
at91sam9260的选择
Kernel Headers (Linux 3.18.x kernel headers)
C library (glibc)
glibc version (2.20)
也正是上面的配置,决定了我们最终生成的交叉工具链是只能针对特定的处理器和操作系统平台的。
编译过程的其他步骤不再说明,感兴趣的可以参考我的另一篇博文。
5. 如何配置、编译Linux内核?
  搞明白了交叉编译工具链以后,我们就该进入Linux内核配置阶段了,如为了支持USB无驱摄像头(UVC),我们需要进行的配置如下:
Device Drivers
&*& Multimedia support
&*& Video For Linux
[*] Enable Video For Linux API 1 (DEPRECATED)
[*] Video capture adapters
[*] V4L USB devices
&*& USB Video Class (UVC)
[*] UVC input events device support
[M] GSPCA based webcams
  Linux内核中已经集成了几乎你能找到的所有的摄像头的驱动程序,添加摄像头支持时可以根据情况在编译内核的时候进行针对性配置,或者索性把摄像头驱动相关的全部编译在内核中(这样势必造成内核尺寸增大,一般linux系统移植时已经设定好了Flash分区大小,所以,如果内核尺寸超过限值,将导致系统启动异常),这样你就可以宣称你的开发板支持所有的摄像头了(^o^)/。其中的GSPCA 是一个法国程序员在业余时间制作的一个万能USB 摄像头驱动程序,我没有用到,所以仅作为演示模块编译,大家实际使用时候根据自己的摄像头情况进行选择。
配置好Linux内核以后,进行编译:
make ARCH=arm CROSS_COMPILE=arm-linux- uImage
如果要编译生成GSPCA内核模块,则使用如下命令:
make modules
关于Linux编译后生成镜像格式的简要说明如下:
zImage是ARM Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明这个映像文件的类型、加载位置、生成时间、大小等信息。换句话说,如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。另外,Linux2.4内核不支持uImage,Linux2.6内核加入了很多对嵌入式系统的支持,但是uImage的生成也需要设置。
编译出来的最原始的内核文件,未压缩。
是vmlinux经过gzip压缩后的文件。
bz表示“big zImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么采用zImage或bzImage都行,如果比较大应该用bzImage。
U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的tag。
是bzImage/zImage文件的拷贝或指向bzImage/zImage的链接。
是“initial ramdisk”的简写。一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。
我开发板的引导程序是uboot,所以这里生成的是uImage 。
6.创建Linux文件系统
  根文件系统使用 busybox 制作,busybox 以小巧著称,适合于嵌入式设备的linux 文件系统。具体制作及移植过程参考一文。
二、USB摄像头初识
  Linux UVC driver(uvc) 该驱动适用于符合USB视频类(USB Video Class)规范的摄像头设备,它包括V4L2内核设备驱动和用户空间工具补丁。大多数大容量存储器设备(如优盘)都遵循USB规范,因而仅用一个单一驱动就可以操作它们。与此类似,UVC兼容外设只需要一个通用驱动即可。
  USB摄像头大体上可以分为UVC cameras和non-UVC cameras。推荐购买UVC cameras。UVC是一个开放的标准,拥有维护良好的驱动,它属于内核代码的一部分。non- UVC cameras通常情况下不比UVC cameras工作出色,驱动并不遵循通用的协议,需要针对每种摄像头做出单独的处理,Linux内核中已经集成了常见的摄像头驱,所以,随便买一个摄像头进行测试一般都不成问题。
1、摄像头类型的确定方法
  关于摄像头类型的确定,最简单的方法就是查看USB摄像头的硬件ID,硬件ID主要分为VID和PID,在Winows中可以在设备管理器中查看,方法如下图:
  在这个图中能够看到VID和PID为。可以通过这个网页()来查看是否是否支持UVC。
很神奇,我的摄像头不在这个网页的列表中!但是网上随便一搜,出来一大堆,摘录个我们需要的信息如下:
可以确定,我的摄像头是UVC制式的#^_^#。
VID和PID的意义如下:
根据USB规范的规定,所有的USB设备都有供应商ID(VID)和产品识别码(PID),主机通过不同的VID和PID来区别不同的设备,VID和PID都是两个字节长,其中,供应商ID(VID)由供应商向USB执行论坛申请,每个供应商的VID是唯一的,PID由供应商自行决定,理论上来说,不同的产品、相同产品的不同型号、相同型号的不同设计的产品最好采用不同的PID,以便区别相同厂家的不同设备。
  Linux环境下可以使用lsusb命令或其它硬件信息查看工具找出摄像头的设备号(Vendor ID)和产品号(Product ID),此处我就不再测试了。
2、USB摄像头的识别
  前文已经简要叙述了Linux内核配置、编译以及文件系统移植,所以此处假设Linux开发板已经可以正常运行,此时插入USB摄像头如果提示如下说明内核配置正确:
usb 1-1: USB disconnect, address 2
usb 1-1: new full speed USB device using at91_ohci and address 3
usb 1-1: configuration #1 chosen from 1 choice
uvcvideo: Found UVC 1.00 device USB2.0 Camera (1871:0141)
input: USB2.0 Camera as /class/input/input1
  我的USB摄像头设备名称是:/dev/video1,问我我的为什么是video1?因为我配置Linux内核时多选择了下面选项:
Virtual Video Driver
3、编写USB摄像头简单测试程序
  由于USB摄像头图像采集并生成可预览的JPEG文件涉及:V4L2接口编程,视频图像数据格式,jpeg库移植这些方面。所以本处仅给出一个进行V4L2图像采集并将采集到的图像直接输出到Framebuffer设备(液晶屏)上的实例,下一篇文章将讲解摄像头视频图像格式以及如何将采集到的数据存储为jpeg文件。
  下例为开源的V4L2测试实例(默认为YUYV格式转RGB24),该实例要求系统中有fb0设备存在,在ubuntu上也可以测试,只要ctl+F1切换到控制台再执行程序即可。
#include &stdio.h&
#include &stdlib.h&
#include &string.h&
#include &assert.h&
#include &getopt.h&
#include &fcntl.h&
#include &unistd.h&
#include &errno.h&
#include &sys/stat.h&
#include &sys/types.h&
#include &sys/time.h&
#include &sys/mman.h&
#include &sys/ioctl.h&
#include &asm/types.h&
#include &linux/videodev2.h&
#include &linux/fb.h&
#define uchar unsigned char
#define uint unsigned int
#define CLEAR(x) memset (&(x), 0, sizeof (x))
struct buffer {
static char * dev_name = NULL;
static int fd = -1;
struct buffer * buffers = NULL;
static unsigned int n_buffers = 0;
static int time_in_sec_capture=5;
static int fbfd = -1;
static struct fb_var_
static struct fb_fix_
static char *fbp=NULL;
static long screensize=0;
static void errno_exit (const char * s)
fprintf (stderr, "%s error %d, %s\n",s, errno, strerror (errno));
exit (EXIT_FAILURE);
int convert_yuv_to_rgb_pixel(int y, int u, int v)
uint pixel32 = 0;
uchar *pixel = (uchar *)&pixel32;
r = y + (1.370705 * (v-128));
g = y - (0.698001 * (v-128)) - (0.337633 * (u-128));
b = y + (1.732446 * (u-128));
if(r & 255) r = 255;
if(g & 255) g = 255;
if(b & 255) b = 255;
if(r & 0) r = 0;
if(g & 0) g = 0;
if(b & 0) b = 0;
pixel[0] = r * 220 / 256;
pixel[1] = g * 220 / 256;
pixel[2] = b * 220 / 256;
return pixel32;
int convert_yuv_to_rgb_buffer(uchar *yuv, uchar *rgb, uint width,uint height)
uint in, out = 0;
uint pixel_16;
uchar pixel_24[3];
uint pixel32;
int y0, u, y1,
for(in = 0; in & width * height * 2; in += 4) {
pixel_16 =
yuv[in + 3] && 24 |
yuv[in + 2] && 16 |
yuv[in + 1] &&
yuv[in + 0];
y0 = (pixel_16 & 0x000000ff);
= (pixel_16 & 0x0000ff00) &&
y1 = (pixel_16 & 0x00ff0000) && 16;
= (pixel_16 & 0xff000000) && 24;
pixel32 = convert_yuv_to_rgb_pixel(y0, u, v);
pixel_24[0] = (pixel32 & 0x000000ff);
pixel_24[1] = (pixel32 & 0x0000ff00) && 8;
pixel_24[2] = (pixel32 & 0x00ff0000) && 16;
rgb[out++] = pixel_24[0];
rgb[out++] = pixel_24[1];
rgb[out++] = pixel_24[2];
pixel32 = convert_yuv_to_rgb_pixel(y1, u, v);
pixel_24[0] = (pixel32 & 0x000000ff);
pixel_24[1] = (pixel32 & 0x0000ff00) && 8;
pixel_24[2] = (pixel32 & 0x00ff0000) && 16;
rgb[out++] = pixel_24[0];
rgb[out++] = pixel_24[1];
rgb[out++] = pixel_24[2];
static int xioctl (int fd,int request,void * arg)
do r = ioctl (fd, request, arg);
while (-1 == r && EINTR == errno);
inline int clip(int value, int min, int max) {
return (value & max ? max : value & min ? min : value);
static void process_image (const void * p){
unsigned char* in=(char*)p;
int width=320;
int height=240;
int istride=640;
int x,y,j;
int y0,u,y1,v,r,g,b;
long location=0;
convert_yuv_to_rgb_buffer(in,fbp,320,240);
static int read_frame (void)
struct v4l2_
unsigned int
CLEAR (buf);
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP;
if (-1 == xioctl (fd, VIDIOC_DQBUF, &buf)) {
switch (errno) {
case EAGAIN:
errno_exit ("VIDIOC_DQBUF");
assert (buf.index & n_buffers);
printf("v4l2_pix_format-&field(%d)\n", buf.field);
process_image (buffers[buf.index].start);
if (-1 == xioctl (fd, VIDIOC_QBUF, &buf))
errno_exit ("VIDIOC_QBUF");
static void run (void)
unsigned int
frames = 30 * time_in_sec_
while (frames-- & 0) {
for (;;) {
FD_ZERO (&fds);
FD_SET (fd, &fds);
tv.tv_sec = 2;
tv.tv_usec = 0;
r = select (fd + 1, &fds, NULL, NULL, &tv);
if (-1 == r) {
if (EINTR == errno)
errno_exit ("select");
if (0 == r) {
fprintf (stderr, "select timeout/n");
exit (EXIT_FAILURE);
read_frame ();
static void stop_capturing (void)
enum v4l2_buf_
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (-1 == xioctl (fd, VIDIOC_STREAMOFF, &type))
errno_exit ("VIDIOC_STREAMOFF");
static void start_capturing (void)
unsigned int
enum v4l2_buf_
for (i = 0; i & n_ ++i) {
struct v4l2_
CLEAR (buf);
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP;
buf.index =
if (-1 == xioctl (fd, VIDIOC_QBUF, &buf))
errno_exit ("VIDIOC_QBUF");
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (-1 == xioctl (fd, VIDIOC_STREAMON, &type))
errno_exit ("VIDIOC_STREAMON");
static void uninit_device (void)
unsigned int
for (i = 0; i & n_ ++i)
if (-1 == munmap (buffers[i].start, buffers[i].length))
errno_exit ("munmap");
if (-1 == munmap(fbp, screensize)) {
printf(" Error: framebuffer device munmap() failed.\n");
exit (EXIT_FAILURE) ;
free (buffers);
static void init_mmap (void)
struct v4l2_
fbp = (char *)mmap(NULL,screensize,PROT_READ | PROT_WRITE,MAP_SHARED ,fbfd, 0);
if ((int)fbp == -1) {
printf("Error: failed to map framebuffer device to memory.\n");
exit (EXIT_FAILURE) ;
memset(fbp, 0, screensize);
CLEAR (req);
req.count = 4;
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
req.memory = V4L2_MEMORY_MMAP;
if (-1 == xioctl (fd, VIDIOC_REQBUFS, &req)) {
if (EINVAL == errno) {
fprintf (stderr, "%s does not support memory mapping\n", dev_name);
exit (EXIT_FAILURE);
errno_exit ("VIDIOC_REQBUFS");
if (req.count & 4) {
fprintf (stderr, "Insufficient buffer memory on %s\n",dev_name);
exit (EXIT_FAILURE);
buffers = calloc (req.count, sizeof (*buffers));
if (!buffers) {
fprintf (stderr, "Out of memory\n");
exit (EXIT_FAILURE);
for (n_buffers = 0; n_buffers & req. ++n_buffers) {
struct v4l2_
CLEAR (buf);
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP;
buf.index = n_
if (-1 == xioctl (fd, VIDIOC_QUERYBUF, &buf))
errno_exit ("VIDIOC_QUERYBUF");
buffers[n_buffers].length = buf.
buffers[n_buffers].start =mmap (NULL,buf.length,PROT_READ | PROT_WRITE ,MAP_SHARED,fd, buf.m.offset);
if (MAP_FAILED == buffers[n_buffers].start)
errno_exit ("mmap");
static void init_device (void)
struct v4l2_
struct v4l2_
struct v4l2_
struct v4l2_
unsigned int
if (-1==xioctl(fbfd, FBIOGET_FSCREENINFO, &finfo)) {
printf("Error reading fixed information.\n");
exit (EXIT_FAILURE);
if (-1==xioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) {
printf("Error reading variable information.\n");
exit (EXIT_FAILURE);
screensize = 320*240 * vinfo.bits_per_pixel / 8;
printf("vinfo.xres=%d\n",vinfo.xres);
printf("vinfo.yres=%d\n",vinfo.yres);
printf("vinfo.bits_per_pixel=%d\n",vinfo.bits_per_pixel);
printf("screensize=%d\n",screensize);
if (-1 == xioctl (fd, VIDIOC_QUERYCAP, &cap)) {
if (EINVAL == errno) {
fprintf (stderr, "%s is no V4L2 device/n",dev_name);
exit (EXIT_FAILURE);
errno_exit ("VIDIOC_QUERYCAP");
if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
fprintf (stderr, "%s is no video capture device\n",dev_name);
exit (EXIT_FAILURE);
if (!(cap.capabilities & V4L2_CAP_STREAMING)) {
fprintf (stderr, "%s does not support streaming i/o\n",dev_name);
exit (EXIT_FAILURE);
CLEAR (cropcap);
cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (0 == xioctl (fd, VIDIOC_CROPCAP, &cropcap)) {
crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
crop.c = cropcap.
if (-1 == xioctl (fd, VIDIOC_S_CROP, &crop)) {
switch (errno) {
case EINVAL:
CLEAR (fmt);
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
fmt.fmt.pix.width = 320;
fmt.fmt.pix.height = 240;
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
if (-1 == xioctl (fd, VIDIOC_S_FMT, &fmt))
errno_exit ("VIDIOC_S_FMT");
init_mmap ();
static void close_device (void)
if (-1 == close (fd))
errno_exit ("close");
close(fbfd);
static void open_device (void)
if (-1 == stat (dev_name, &st)) {
fprintf (stderr, "Cannot identify '%s': %d, %s\n",dev_name, errno, strerror (errno));
exit (EXIT_FAILURE);
if (!S_ISCHR (st.st_mode)) {
fprintf (stderr, "%s is no device\n", dev_name);
exit (EXIT_FAILURE);
fbfd = open("/dev/fb0", O_RDWR);
if (fbfd==-1) {
printf("Error: cannot open framebuffer device.\n");
exit (EXIT_FAILURE);
fd = open (dev_name, O_RDWR| O_NONBLOCK, 0);
if (-1 == fd) {
fprintf (stderr, "Cannot open '%s': %d, %s\n",dev_name, errno, strerror (errno));
exit (EXIT_FAILURE);
static void usage (FILE * fp,int argc,char ** argv)
fprintf (fp,
"Usage: %s [options]\n\n"
"Options:/n"
"-d | --device name Video device name [/dev/video]\n"
"-h | --help Print this message\n"
"-t | --how long will display in seconds\n"
static const char short_options [] = "d:ht:";
static const struct option long_options [] = {
{ "device", required_argument, NULL, 'd' },
{ "help", no_argument, NULL, 'h' },
{ "time", no_argument, NULL, 't' },
{ 0, 0, 0, 0 }
int main (int argc,char ** argv)
dev_name = "/dev/video0";
c = getopt_long (argc, argv,short_options, long_options,&index);
if (-1 == c)
switch (c) {
dev_name =
usage (stdout, argc, argv);
exit (EXIT_SUCCESS);
time_in_sec_capture = atoi(optarg);
usage (stderr, argc, argv);
exit (EXIT_FAILURE);
open_device ();
init_device ();
start_capturing ();
stop_capturing ();
uninit_device ();
close_device ();
exit (EXIT_SUCCESS);
编译后测试结果如下图:
最后附上常见摄像头VID和PID:
{USB_DEVICE (0x0)}, /* Intel PC Camera Pro */
{USB_DEVICE (0x1)}, /* Intel Create and Share */
{USB_DEVICE (0x99FA, 0x8988)}, /* Grandtec V.cap */
{USB_DEVICE (0x2)}, /* ViewQuest M318B */
{USB_DEVICE (0x0)}, /* ViewQuest VQ110 */
{USB_DEVICE (0x040A, 0x0002)}, /* Kodak DVC-325 */
{USB_DEVICE (0x055f, 0xc420)}, /* Mustek gSmart Mini 2 */
{USB_DEVICE (0x055f, 0xc520)}, /* Mustek gSmart Mini 3 */
{USB_DEVICE (0x041E, 0x400A)}, /* Creative PC-CAM 300 */
{USB_DEVICE (0x084D, 0x0003)}, /* D-Link DSC-350 */
{USB_DEVICE (0x041E, 0x400B)}, /* Creative PC-CAM 600 */
{USB_DEVICE (0x0)}, /* Intel Pocket PC Camera */
{USB_DEVICE (0x0)}, /* Intel Easy PC Camera */
{USB_DEVICE (0xdf)}, /* 3Com HomeConnect Lite */
{USB_DEVICE (0x040a, 0x0300)}, /* Kodak EZ200 */
{USB_DEVICE (0x04fc, 0x504b)}, /* Maxell MaxPocket LE 1.3 */
{USB_DEVICE (0x08ca, 0x2008)}, /* Aiptek Mini PenCam 2 M */
{USB_DEVICE (0x08ca, 0x0104)}, /* Aiptek PocketDVII 1.3 */
{USB_DEVICE (0x08ca, 0x2018)}, /* Aiptek Pencam SD 2M */
{USB_DEVICE (0x04fc, 0x504a)}, /* Aiptek Mini PenCam 1.3 */
{USB_DEVICE (0x055f, 0xc530)}, /* Mustek Gsmart LCD 3 */
{USB_DEVICE (0x055f, 0xc650)}, /* Mustek MDC5500Z */
{USB_DEVICE (0x052b, 0x1513)}, /* Megapix V4 */
{USB_DEVICE (0x08ca, 0x0103)}, /* Aiptek PocketDV */
{USB_DEVICE (0x0af9, 0x0010)}, /* Hama USB Sightcam 100 */
{USB_DEVICE (0xc)}, /* Arowana 300K CMOS Camera */
{USB_DEVICE (0x08ca, 0x0106)}, /* Aiptek Pocket DV3100+ */
{USB_DEVICE (0x08ca, 0x2010)}, /* Aiptek PocketCam 3M */
{USB_DEVICE (0x4)}, /* Genius VideoCAM Express V2 */
{USB_DEVICE (0x04fc, 0x0561)}, /* Flexcam 100 */
{USB_DEVICE (0x055f, 0xc430)}, /* Mustek Gsmart LCD 2 */
{USB_DEVICE (0x04fc, 0xffff)}, /* Pure DigitalDakota */
{USB_DEVICE (0xabcd, 0xcdee)}, /* Petcam */
{USB_DEVICE (0x04a5, 0x3008)}, /* Benq DC 1500 */
{USB_DEVICE (0x046d, 0x0960)}, /* Logitech Inc. ClickSmart 420 */
{USB_DEVICE (0x046d, 0x0901)}, /* Logitech Inc. ClickSmart 510 */
{USB_DEVICE (0x04a5, 0x3003)}, /* Benq DC 1300 */
{USB_DEVICE (0x0af9, 0x0011)}, /* Hama USB Sightcam 100 */
{USB_DEVICE (0x055f, 0xc440)}, /* Mustek DV 3000 */
{USB_DEVICE (0x041e, 0x4013)}, /* Creative Pccam750 */
{USB_DEVICE (0x060b, 0xa001)}, /* Maxell Compact Pc PM3 */
{USB_DEVICE (0x04a5, 0x300a)}, /* Benq DC3410 */
{USB_DEVICE (0x04a5, 0x300c)}, /* Benq DC1016 */
{USB_DEVICE (0x5)}, /* Micro Innovation IC200 */
{USB_DEVICE (0x046d, 0x0890)}, /* Logitech QuickCam traveler */
{USB_DEVICE (0x10fd, 0x7e50)}, /* FlyCam Usb 100 */
{USB_DEVICE (0x06e1, 0xa190)}, /* ADS Instant VCD */
{USB_DEVICE (0x055f, 0xc220)}, /* Gsmart Mini */
{USB_DEVICE (0x1)}, /* Jenoptik jdc 21 LCD */
{USB_DEVICE (0x046d, 0x0900)}, /* Logitech Inc. ClickSmart 310 */
{USB_DEVICE (0x055f, 0xc360)}, /* Mustek DV4000 Mpeg4 */
{USB_DEVICE (0x08ca, 0x2024)}, /* Aiptek DV3500 Mpeg4 */
{USB_DEVICE (0x046d, 0x0905)}, /* Logitech ClickSmart820 */
{USB_DEVICE (0x05da, 0x1018)}, /* Digital Dream Enigma 1.3 */
{USB_DEVICE (0x0c45, 0x6025)}, /* Xcam Shanga */
{USB_DEVICE (0x1)}, /* Digital Dream Epsilon 1.3 */
{USB_DEVICE (0x041e, 0x401d)}, /* Creative Webcam NX ULTRA */
{USB_DEVICE (0x08ca, 0x2016)}, /* Aiptek PocketCam 2 Mega */
{USB_DEVICE (0xb)}, /* 3DeMon USB Capture aka */
{USB_DEVICE (0x041E, 0x4018)}, /* Creative Webcam Vista (PD1100) */
{USB_DEVICE (0x3)}, /* Polaroid PDC2030*/
{USB_DEVICE (0x041e, 0x401f)}, /* Creative Webcam Notebook PD1171*/
{USB_DEVICE (0x041e, 0x4017)}, /* Creative Webcam Mobile PD1090*/
{USB_DEVICE (0x046d, 0x08a2)}, /* Labtec Webcam Pro*/
{USB_DEVICE (0x055f, 0xd003)}, /* Mustek WCam300A*/
{USB_DEVICE (0x7)}, /* Genius VideoCam V2*/
{USB_DEVICE (0xc)}, /* Genius VideoCam V3*/
{USB_DEVICE (0xf)}, /* Genius VideoCam Web V2*/
{USB_DEVICE (0x041e, 0x401e)}, /* Creative Nx Pro*/
{USB_DEVICE (0x0c45, 0x6029)}, /* spcaCam@150 */
{USB_DEVICE (0x0c45, 0x6009)}, /* spcaCam@120 */
{USB_DEVICE (0x0c45, 0x600d)}, /* spcaCam@120 */
{USB_DEVICE (0x04fc, 0x5330)}, /* Digitrex 2110*/
{USB_DEVICE (0x055f, 0xc540)}, /* Gsmart D30*/
{USB_DEVICE (0x0ac8, 0x301b)}, /* Asam Vimicro*/
{USB_DEVICE (0x041e, 0x403a)}, /* Creative Nx Pro 2*/
{USB_DEVICE (0x055f, 0xc211)}, /* Kowa Bs888e Microcamera*/
{USB_DEVICE (0x0ac8, 0x0302)}, /* Z-star Vimicro zc0302*/
{USB_DEVICE (0x1)}, /* Creative Notebook cx11646*/
{USB_DEVICE (0x08ca, 0x2022)}, /* Aiptek Slim 3200*/
{USB_DEVICE (0x046d, 0x0921)}, /* Labtec Webcam */
{USB_DEVICE (0x046d, 0x0920)}, /* QC Express */
{USB_DEVICE (0xf)}, /* ICM532 cams */
{USB_DEVICE (0x055f, 0xc200)}, /* Mustek Gsmart 300 */
{USB_DEVICE (0x1)}, /* Mercury Digital Pro 3.1p*/
{USB_DEVICE (0x041e, 0x4036)}, /* Creative Live ! */
{USB_DEVICE (0x055f, 0xc005)}, /* Mustek Wcam300A */
{USB_DEVICE (0x041E, 0x403b)}, /* Creative Webcam Vista (VF0010) */
{USB_DEVICE (0x3)}, /* Veo Stingray */
{USB_DEVICE (0xb)}, /* Veo Stingray */
{USB_DEVICE (0x10fd, 0x8050)}, /* Typhoon Webshot II USB 300k */
{USB_DEVICE (0x0)}, /* MystFromOri Unknow Camera */
关于编译完成的程序文件是什么格式?程序是如何运行起来的?传说中的linux虚拟存储管理是什么?它与程序的运行有什么关系?这几个问题此处不再详述,请参考以下几篇文章中:
《UNIX/LINUX 平台可执行文件格式分析—施聪》
《Linux 从虚拟地址到物理地址》
《Linux 虚拟地址空间布局及程序各个逻辑段详解》
———未完待续
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:46899次
积分:1048
积分:1048
排名:千里之外
原创:56篇
转载:17篇
阅读:7919
(1)(1)(10)(1)(2)(49)(2)(1)(1)(5)

我要回帖

更多关于 一根网线接iptv和宽带 的文章

 

随机推荐