一.需求 完成一个摄像头录像的服务器
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连接,返回.
分享到:
相关推荐
### 学习 Camera Framework 总结 在 Android 环境下,Camera Framework 是一个非常重要的组成部分,它为开发者提供了与摄像头硬件交互的接口。本文将深入探讨 Camera Framework 的架构、工作原理以及如何实现 ...
总结,这个项目展示了如何利用Android Camera2 API在后台实现定时无预览拍照,涉及了Camera2 API的深入使用、后台服务的运行机制、定时任务的调度以及资源管理等多个方面。通过这种方式,开发者可以创建更加灵活和...
总结,Android 4.0 Camera源码包含了从硬件抽象层到用户界面的整个摄像头系统的实现,涉及设备管理、参数设置、预览、拍照、录像等多个环节。理解这些核心概念和机制对于开发复杂的相机应用或优化现有功能至关重要。...
### 总结 `android-Camera-Code.zip`是一个实用的Android相机应用示例,涵盖了基本的相机预览、拍照和参数设置。通过学习和分析这个示例,开发者可以快速掌握Android相机功能的开发,为自己的应用添加丰富的相机特性...
总结起来,自定义一个Camera录制视频的Activity涉及到多个环节,包括权限管理、Camera API或CameraX的使用、自动录制与取消功能的实现、视频保存以及用户界面设计。通过熟练掌握这些技术,可以创建出功能强大且用户...
总结来说,`camera_test.zip` 包含的示例展示了如何在微信小程序中利用 `camera` 组件进行截图和录像,这涵盖了微信小程序的基础知识、组件使用、事件监听、文件管理和错误处理等多个方面,对于学习微信小程序的开发...
总结来说,Android Camera模块的运行依赖于JNI来桥接Java和原生代码,Mediaserver进程中的CameraService负责处理相机相关的操作。Binder机制则确保了JAVA应用进程与CameraService进程间的高效、安全通信,使得应用...
总结,"一个摄像头camera的Qt/QML工程"涉及到利用Qt的多媒体模块和QML进行摄像头操作。这包括初始化摄像头、设置捕获模式、处理权限、显示预览、捕获图像和视频,以及优化性能等步骤。通过理解并熟练运用这些知识点...
总结,这份“android Camera源码(可用)”提供了一个实用的起点,帮助开发者快速了解和实现Android相机功能。通过深入研究源代码,可以学习到Android Camera API的使用方式,以及如何优化和定制相机功能,以满足...
总结来说,Android的HAL层下的camera实现是一个复杂的系统工程,涉及到硬件驱动、接口定义、流处理、性能优化等多个方面。虽然这部分代码不对外公开,但了解其工作原理对于Android相机应用的开发者和系统工程师而言...
总结,OpenCamera作为一个开源项目,不仅为用户提供了一款功能丰富的相机应用,也为开发者提供了学习和实践Android相机开发的平台。通过理解其源码,开发者可以深入了解Android相机API的运用,以及如何构建一个完整...
总结来说,Qt提供的QCamera类及其相关组件使得在C++应用程序中集成摄像头功能变得简单。通过理解和实践这个"qt camera的简单demo",开发者能够快速掌握Qt多媒体框架的基本用法,进而实现更高级的摄像头应用,如图像...
1. Camera1 API:这是早期的API,主要用于基本的拍照和录像功能。开发者可以通过SurfaceView或TextureView来显示相机预览,并通过设置参数来调整相机的配置。 2. Camera2 API:这是一个全功能的API,允许开发者更...
总结,Android Camera API提供了强大的功能,让开发者能够构建各种创新的相机应用。从基础的拍照录像到复杂的图像处理,Android相机开发提供了广阔的空间。理解并熟练运用这些知识点,可以打造出功能丰富、用户体验...
总结起来,这个Delphi项目展示了如何利用DirectShow库来处理USB摄像头的视频输入,包括设备的枚举、格式查询、实时预览以及录像功能的实现。对于想要深入学习DirectShow和Delphi多媒体编程的开发者来说,这是一个...
总结,Android 4.0的Camera API改进显著提升了相机功能的可定制性和性能,为开发者提供了更多创造出色拍照和录像应用的可能性。理解和熟练运用这两个API对于Android应用开发尤其是摄影类应用至关重要。
总结,`android.graphics.Camera`和`Matrix`类是实现Android相机应用核心功能的关键,它们提供了丰富的接口和方法来控制摄像头和处理图像。通过熟练掌握这些知识,你可以构建出功能强大的拍照和录像应用。同时,要...
总结来说,魔法摄像头(Magic Camera)以其丰富的功能和创新的设计,为用户打开了一个全新的摄像头使用世界,让摄影不再只是简单的记录,而是成为一种充满创意的艺术表达方式。无论你是摄影师、网络主播还是普通用户,...
Android操作系统中,Camera是一个非常重要的组件,通过Camera,我们可以实现拍照、录像等功能。在Android系统中,Camera组件可以分为两种:前置摄像头和后置摄像头。前置摄像头usually用来拍摄自拍照,而后置摄像头...