【原创】IP摄像头技术纵览—开篇
很长一段时间一来,一直对智能家居很感兴趣。平时开发也大部分是在嵌入式linux平台,多使用GPRS模块进行远程通信与控制,PPP拨号上网虽然能够实现各种环境参数采集等低速率通信,但最感兴趣的摄像头功能一直没有办法加入,终于14年家里装上光纤(本人很low^_^),然后开始动手开发摄像头功能。由于动手开发时对摄像头方面的开发一无所知,中间走了相当多的弯路,几次都想放弃,中间有将近半年的时间都没什么进展,一直没有入门。现在回想原因,一是当时没有对linux摄像头技术有个理论上的概览;二是满世界找的可以实现摄像头图像采集的linux开源程序,竟无一个可以让我看到图像的,主要是水平有限;D。断断续续偶尔捡起来测试一下,在15年春节过后,终于沉下心来认真的看了一遍《Video for Linux 2(V4L2)》规范,看完之后开发就如滔滔江水奔流向前,每周都有新突破,每天都有新收获,虽然很累,基本上每天都要实验到23点,但是成绩斐然。
本文写作时间2015年4月末,我开始研究网络摄像头时,网上还没有看到小米摄像头、百度耳目、360摄像头,而现在,这些产品已经大规模铺货。网上有很多拆解教程,可以发现这些摄像头都是采用华为Hi3518方案,华为的这套方案成本很低,功能很强大,基本涵盖了IP摄像头的全部功能模块,价格大概在60元左右。但是我进行的工作本身就是为了折腾,所以开发工作都在手头的AT91SAM9260开发板上完成,一切都是自己重头开始造轮子。目测目前竟无一本详细讲解IP摄像头的书!!为了纪念这段日子,同时为了给后来者指明方向,特将学习心得、经验总结为这篇文章,从头到尾详细讲解网络摄像头。由于水平有限,不正确之处喜欢大牛指点哈。
废话说了一大堆,下面进入正题。
Author: chad Mail: linczone@163.com
本文可以自由转载,但转载请务必注明出处以及本声明信息,拒绝用于商业用途。
关键字: AT91SAM9260、USB摄像头、V4L2、YUV/RGB、framebuffer、mjpg-streamer、DNS、NAT、UDP打洞、TUN/TAP、n2n、LIVE555 、FFMPEG
目录
一、linux 内核编译,USB摄像头设备识别
- 内核编译、文件系统移植—茅庐初创
- USB摄像头初识
二、linux 视频开发接口V4L2概述
- V4L2 接口说明
- 视频图像格式说明—YUV/RGB
- USB摄像头参数采集测试
- 摄像头静态图像采集生成JPEG图像
三、图像数据在帧缓存设备(framebuffer)上的显示
- framebuffer 学习
- jpeg图像在帧缓存设备上的显示
四、摄像头参数控制—亮度、对比度、自动对焦等
- V4L2 摄像头控制接口
- 控制测试
五、网络摄像头初试—mjpg-streamer移植与部署
- vgrabbj、spacview、Luvcview、mjpg-streamer评测对比
- mjpg-streamer移植与部署
- mjpg-streamer实现分析
- 运动检测功能添加实现
六、通过internet访问摄像头
- 路由器配置—DMZ虚拟主机、端口映射测试
- DNS动态域名测试
七、NAT技术—UDP打洞实现内网穿透
- NAT类型及检测
- UDP内网穿透实验
- 目前市面上网络摄像头方案简介
八、VPN技术—虚拟专网实现anywhere can control
- TUN/TAP 虚拟网卡
- VPN技术简介
- n2n—内网穿透神器
- n2n实现分析
九、UPnP技术
- UPnP 简介
- 简单了解ONVIF 协议
十、流媒体传输—H.264编解码
- 流媒体视频传输—容器与编码
- GStreamer
- LIVE555
- FFMPEG
十一、数字图像处理—机器视觉
- Opencv与EmguCV学习
- Aforge学习
- Python建模及测试
十二、网络摄像头技术总结
本文脉络将以上文目录为准绳,未看内容,先看目录基本就可以明白网络摄像头开发的流程,沿着上面的步骤也可以自行学习,必定事半功倍。
———–未完待续 2015-04-25 初稿 (2016-03-01 修订与上海)