一.需求 完成一个摄像头录像的服务器
1.要求主动的去摄像头抓数据.
2.生成目录,按照摄像头的名称 录像的日期生成文件夹,在文件夹中生成录像文件.
3.录像文件要求,在启动录像服务器后,开始录像,文件一个小时生成一个.
4.如果录像的时候因为网络或别的原因,网络断开了,在网络恢复后能自动录像.
二.控制录像 录像开关
1.设置String变量recStatus,用来保存录象的状态.start 表示录像开始,stop表示录像介绍.
2.设置boolean变量in_rec_time,用来判断当前时间是不是在录像时间内(一个小时的录像内容保存在一个文件内,设置整点的前3s和整点后3s这个区间为不在录像时间)
3.使用2个线程来维护录像时间的boolean变量,在线程中使用定时器Timer来定时,定时时间到,就触发录像事件boolean的变化.
4.开始录像时,设置reStatus为start,同时启动维护in_rec_time的线程.
5.为每个摄像头建立一个线程.每个线程控制一个摄像头的录像,启动线程,开始录像.使用while循环,判断条件是recStatus等于start.如果不能于strt,说明没有停止录像,再开始录像,实现重链接的机制.
6.关闭录像时,设置recStatus为stop,各个摄像头的线程在这个条件下结束,录像停止.
三.录像
1.创建保存录像的文件和目录.
2.根据摄像头的提供的ip和指定端口号,创建Socket,如果创建失败,那么延时5s在重新创建.
3.设置Socket的超时时间为1s.Socket.setSoTimeout(int ms),这个是为了防止在摄像头重启的时候,Socket是建立了,但是一直没有相应服务器端的请求,是程序一直处在等待状态.
4.发送开始命令.Socket.getOutputStream().write();
5.获得摄像头的输出.Socket.getInputStream()的InputStream对象.
6.创建文件输出流,FileOutputStream fos = new FileOutputStream(File file,boolean append); 其中append为true,这样文件可以续写.
7.读取InputStream的数据,写到fos中.
7.1 如果Socket有问题,或者是摄像头重启等,调用InputStream.read(),时会超时退出,抛出java.net.SocketTimeoutException异常.这个时候需要重新建立连接来录像.
7.2 如果read方法OK,而且是第一次得到数据,要判断录像数据的头,仅在read得到的数据的第一字节是"Y"的时候,得到的数据才是正常的,才能开始录像,否则,退出循环,重新录像.
7.3 如果在录像的时候,resStatus变为stop ,或者in_rec_time为false,表明录像要结束,或者要更换录像文件,这个时候,需要向摄像头发送关闭命令,发送3次,如果 InputStream.read() != -1 那么直接跳出循环,这样做是因为网络的不稳定性,有可能我们发送的停止命令,因为网络的原因摄像头没有接收到.
8.关闭Socket连接,返回.
分享到:
相关推荐
camerax录像,拍照,切换摄像头
利用MediaRecorder+Camera2框架实现基本的录像功能,当APP启动时自动打开摄像头,点击按钮开始录像,点击按钮停止录像并将录制的视频文件保存在sdcard/my_video/中
Camera拍照录像提示音,mp3文件,音质超棒!
谷歌官方 Camera2 录像 修复了点击 stop 时 不能继续预览,而是闪退的问题,测试demo
当使用Camera对象记录视频时,除了Camera.open()和Camera.release()方法的调用以外,还必须管理Camera.lock()和Camera.unlock()方法的调用,从而允许MediaRecorder对象访问Camera硬件。 采集视频需要一定的调用顺序...
camera调试总结
整合Camera和MediaRecorder实现拍照和录像
展讯平台Camera tuning总结。。。 1 展讯新算法平台关于 BV 环境的划分 1.1 展讯新算法中关于调试环境选择: (1) Common:当不符合出 common 以外的环境判定条件时,使用改组参数; 一般的,LSC/CMC/AWB 包含 ...
Camera2相机、录像通用工具类,githun网址:https://github.com/xxhhxhh/myandroid
android环境中camera framework学习总结
androidusbcamera是在saki4510t/uvc camera的基础上开发的,usb摄像机(uvc设备)项目和视频数据采集的使用都是高度封装的,它可以通过几个简单的api帮助开发者轻松使用usb摄像机设备。通过使用androidusbcamera,您...
开发过程中遇到的一些常见的android camera调试总结
摄像头录像CCTV UVC Video Camera driver for universal cameras.
使用Camera API2调用摄像头完成录像功能,并保存视频文件到外部SD卡
Camera2一边录像,一边拍照.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
自定义拍照,录像,博客参考:http://blog.csdn.net/krubo1/article/details/50480404
android UVC摄像头的拍照和录像功能
此文档 为资深MTK 驱动工程师,总结而成,从应用到底层,详细分析,让初学者能够 很快的掌握 camera 在MTK 平台是如何进行调度的 注:此文档仅供学习之用,请勿用于商业用途
MTK-camera驱动流程总结
MTK camera 总结