Android利用TCP/IPUDPHttpSocket多线程等实现局域网实时监控文件快传搜索设备等
Posted Engineer-Jsp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android利用TCP/IPUDPHttpSocket多线程等实现局域网实时监控文件快传搜索设备等相关的知识,希望对你有一定的参考价值。
RT:Android利用TCP/IP、UDP、Http、Socket、多线程等实现局域网实时监控、文件快传、搜索设备等。
首先介绍项目库文件主要实现在局域网(热点、WIFI)内的实时监控、文件浏览(类似云盘)、文件批量下载、文件删除、客户端操作服务端的Http指令、局域网内的设备IP搜索、消息推送等。
接下来介绍各模块主要职能:
TCP/IP-主要负责将服务端的预览视频画面实时传输到客户端,经过android原生YuvImage处理的byte[],未采集音频、未进行软编与硬编
UDP-主要负责局域网下设备IP的搜索,当服务端的网络环境由热点切换到服务端与客户端都处于同一WIFI网络的局域网时,开启子线程进行组播,搜索局域网内的设备IP
Http-主要负责客户端指令发送与服务端的数据响应,如拍照、录像、设备校验、下载、删除、监控画面预览、画面暂停、画面继续、获取文件目录等
Socket-主要负责消息的推送,因为拍照、录像需要的时间较长且客户端快速点击拍照或录像按钮时,这时服务端会加锁同步线程进程拍照、录像操作,因为操作指令被积压了且它们共享一个camera实例,这涉及到多线程安全,无法在第一时间响应客户端Http的请求,所以就需要在完成拍照或录像操作之后进行消息通知、消息推送
多线程-主要负责文件的批量下载,批量文件下载时,因为子线程共享主内存的文件下载队列,这涉及到多线程的安全,所以需要进行同步,让文件下载队列有序的进行,避免多线程不安全带来的一系列问题,这里也顺带提一下同步锁的使用即synchronized,它可以解决此类多线程安全问题
synchronized方法或者synchronized代码块执行完之后,系统会自动让线程释放对锁的占用,然后继续执行下一个任务。当然在并发量比较小的情况下,使用synchronized是个不错的选择,但是在并发量比较高的情况下,其性能下降很严重,此时建议使用Lock。笔者的文件下载队列缓存在HashMap中,然而HashMap中的方法在缺省情况下是非同步的,在多线程并发时,我们可以使用HashTable,但如果要使用HashMap要自己增加同步处理。
下面附上预览效果的视频、预览效果图片以及下载的GitHub地址
Media
利用TCP/IP、UDP、Http、Socket、多线程等实现局域网实时监控、文件快传、搜索设备等
GitHub地址
https://github.com/Mr-Jiang/Media
效果图
效果视频下载地址
http://www.engineer-jsp.cn/docs/MediaVideo.MOV
Usage
1.将MediaPushServer.apk安装好并打开热点或将他俩(服务端与客户端)处于同一WIFI网络下
2.将安装MediaRecvClient.apk的手机连接安装MediaPushServer.apk的手机热点或或将他俩(服务端与客户端)处于同一WIFI网络下
3.打开MediaPushServer单击“开始推送”按钮,Toast提示“开始推送”表示推送开始,单击“关闭推送”可关闭推送
4.打开MediaRecvClient+,单击“开始”按钮,会优先尝试连接路由器5次,每5s/次,连接失败后开始尝试局域网搜索设备,扫描15次,每2s/次,成功扫到至少一个设备时,弹出设备列表,选择一个item设备可进行连接,单击“取消”按钮可取消本次搜索
主要的模块大致就是这些,它们的主要职能也介绍了,下面简单介绍项目的一些注意事项。
注意事项:
1.关于服务端在部分机型上无法调起Camera导致黑屏的问题,这个问题我在三星、华为机型上发现了,但是没有处理,因为我查看了这些机型的预览配置、图片大小配置,因为博主设置的参数值是在配置范围内的,所以这个问题博主没有去深究,暂时未找到引起异常的原因
异该常为:java.lang.RuntimeException: setParameters failed
很诡异,笔者设置的参数都是机型支持的合法值范围,但还是报这个异常,但如果不设置Camera.setParameters()参数会出现一系列的花屏、绿屏等问题
2.关于将apk安装在平板时的问题,部分平板可能没有imei号,导致程序读取异常并崩溃,建议安装在手机上
3.局域网内连接的情况下,由于硬件或网络通路问题会导致画面偶尔卡顿,获取文件目录过久,建议安装了MediaPushServer的手机打开热点,客户端连接这个热点,通信效果最佳
大家可以下载下来玩一玩,后续如果博主有时间,会抽空把软编软解写一写,最后在GitHub开源出来。
至此,本篇文章关于画面监控等的介绍就结束了,谢谢观看与支持!
以上是关于Android利用TCP/IPUDPHttpSocket多线程等实现局域网实时监控文件快传搜索设备等的主要内容,如果未能解决你的问题,请参考以下文章