前面,我们已经了解了怎么在android app上打开关闭和扫描,搜索wifi,现在,我来写一下怎么通过连接wifi来使app获取到IPCamera摄像头的视频。

一、通过URL获取视频的地址

二、创建输入流

三、解析图片

首先,我是通过抓包软件来抓取IPCamera摄像头的视频流,然后将其分包解析为一张一张的图片,再将其显示在界面上。由于我抓到的有GET /videostream.cgi?rate=0 HTTP/1.1 这样的字眼,所以可以知道,我所使用的是HTTP协议的摄像头。然后根据Referer: 后面的地址,可以推断出URL应为http://192.168.10.1/videostream.cgi?user=admin&pwd=&resolution=32&rate=1,主要是注意修改地址后面为/videostream.cgi,user和pwd是这个网页登入的账号和密码,就可以开始创建URL连接了。代码如下:

URL url;url = new URL("http://192.168.10.1/videostream.cgi?user=admin&pwd=&resolution=32&rate=1");URLConnection conn = url.openConnection();conn.connect();

接下来,开始创建输入输出流。

 InputStream input = conn.getInputStream();BufferedInputStream in=new BufferedInputStream(input);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

然后就可以开始分包接收到的图片了。

int readLength;String flag = "Content-Length:", flag1 = "\r\n";
while (true) {//当输入流有数据时,则创建byte数组if (in.available() != -1) {byte buffer[] = new byte[1024];//把读到的字节数给 readLengthreadLength = in.read(buffer, 0, 1024);//让readLength读满while (readLength < 1024) {readlength = in.read(buffer, readLength - 1, 1024 - readLength);readLength = readLength + readlength;}if (readLength > 0) {strData = new String(buffer);//标记"Content-Length: "的起始位置int index = strData.indexOf(flag);//标记"\r\n"的位置,注意是"Content-Length: "之后的第一个位置int index1 = strData.indexOf(flag1, index);if (index1 != -1 || index1 - (index + flag.length()) > 0 || index != -1) {String len;len = strData.substring(index + flag.length(), index1);//计算本次streamLength的长度streamLength = Integer.parseInt(len.trim());}if (streamLength > 0) {if ((index1 + 4) < readLength) {outputStream.write(buffer, index1 + 4, readLength - index1 - 4);streamLength = streamLength - readLength + index1 + 4;}//将剩下读取的视频流存储到buffer1byte[] buffer1 = new byte[streamLength];int length = 0;while (length < streamLength) {if (in.available() != -1) {//Thread.sleep(50);length += in.read(buffer1, length, streamLength - length);}else{Thread.sleep(150);}}outputStream.write(buffer1, 0, streamLength);byte[] data = outputStream.toByteArray();BitmapFactory.Options op = new BitmapFactory.Options();op.inSampleSize = 2;bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, op);if (bitmap != null) {//remoteSurfaceView.setImageBitmap(bitmap);
                                    handler.sendEmptyMessage(MSG_ONE);}outputStream.reset();}}} else {Thread.sleep(300);}}                                                        

然后,通过handler来更新UI。

private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case MSG_ONE:remoteSurfaceView.setImageBitmap(bitmap);break;default:break;}}};

这样,就可以显示IPCamera的视屏画面了,但是,在我的app界面上,视频始终不能一直播放下去,总是在看到几分钟的画面之后就停下了,具体原因我还没有搞清楚,也有可能是摄像头设备的问题,希望知道的高手可以解答一下。

转载于:https://www.cnblogs.com/lwkdbk/p/10986960.html

Android开发——通过wifi接收IPCamera视频流相关推荐

  1. android wifi 视频,Android开发——通过wifi接收IPCamera视频流

    前面,我们已经了解了怎么在android app上打开关闭和扫描,搜索wifi,现在,我来写一下怎么通过连接wifi来使app获取到IPCamera摄像头的视频. 一.通过URL获取视频的地址 二.创 ...

  2. 最简单DIY基于ESP8266的智能彩灯⑥(Android开发通过WIFI控制彩灯实现表白神器)

    ESP8266和ESP32智能彩灯开发系列文章目录 第一篇:最简单DIY基于ESP8266的智能彩灯①(在网页用按钮点亮普通RGB灯) 第二篇:最简单DIY基于ESP8266的智能彩灯②(在网页用按键 ...

  3. Android 开发利用wifi调试

    本文主要介绍在Android开发中如何利用wifi进行应用调试以及其原理.通常我们都是通过数据线连接手机终端和PC进行调试,在没有数据线的情况下如何连接PC和手机呢. 1.要求 手机必须root过,手 ...

  4. Android开发 无线Wifi+WifiUtil工具类,android开发网格布局

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  5. 【Android开发】wifi开关与wifi连接(密码连接)

    过放荡不羁的生活,容易得像顺水推舟,但是要结识良朋益友,却难如登天.-- 巴尔扎克 本文demo来自网络,找了好久找到的,后面自己做了些许修改,这里对源码解析,愧于忘记哪里出来了,感谢作者! 接下来就 ...

  6. Android开发中WIFI和GPRS网络的切换

    在项目的开发中因为要使用到WIFI和GPRS网络的切换,因此就研究了一下通过代码打开WIFI和GPRS的工作. 无论是切换WIFI还是切换GPRS网络都需要设置相应的权限,所以需要在AndroidMa ...

  7. Android开发之--(WIFI,蓝牙,电池,背光,SD卡,摄像头,按键,MIC,重力感应等)功能的简单使用

    1.WIFI(打开,关闭,使能,扫描等) 2.蓝牙(打开关闭) 3.电池(获取电池的各种参数和状态信息) 4.背光(背光调节) 5.U盘/SDcard(判断是否插入,读取等) 6.屏幕校准(准确的说是 ...

  8. android开发打开wifi密码,【Android开发】wifi开关与wifi连接(密码连接)

    过放荡不羁的生活,容易得像顺水推舟,但是要结识良朋益友,却难如登天.-- 巴尔扎克 本文demo来自网络,找了好久找到的,后面自己做了些许修改,这里对源码解析,愧于忘记哪里出来了,感谢作者! 接下来就 ...

  9. (Android开发)WiFi扫描列表有多个相同SSID的热点过滤

    在WiFi开发中,使用getScanResults()方法获取扫描到的WiFi列表时,列表中会出现多个SSID相同,BSSID最后4位不相同的热点,而且两个都能连接.参照系统WiFi过滤机制,这里实现 ...

最新文章

  1. java interface class_java interface和class中的协变
  2. Winform-DataGridView
  3. 实战案例丨小型企业如何从IPv4迁移至IPv6
  4. 华字后面配什么字比较好_涟字女孩取名字含义 带涟好名推荐
  5. NXP KW38蓝牙开发(一)入门第一课:官网蓝牙广播和连接例程,NMI禁止
  6. 【Elasticsearch】如何使用 Elasticsearch 6.2 搜索中文、日文和韩文文本 - 第 1 部分: 分析工具
  7. MYSQL 时间函数总结
  8. mysql组合索引与字段顺序
  9. 一个Https网站发送Http的 ajax请求的解决方法
  10. 在.NET中探测U盘的插入/拔出
  11. 商城项目html pc,Vue实战篇(PC端商城项目)
  12. 群晖 php,群晖NAS安装配置typecho博客教程
  13. 推荐五个免费UML建模工具
  14. linux aria2 使用教程,Aria2使用详细教程
  15. 数据分析之 AB测试(AB Test)
  16. 武汉最牛批的互联网基本都在这了~
  17. 第三章:Servlet基础
  18. 车载以太网交换机功能和应用案例汇总, 适用于AVB/TSN, 802.1AS(gPTP时钟同步)
  19. 后缀为.epub的是什么格式的文件
  20. vue 生命周期-activated

热门文章

  1. 魅族 虚拟位置服务状态:未运行_带功率表快充状态一目了然,魅族超充USBC移动电源即将发售...
  2. opencv3.2安装成功,但使用VideoCapture时出现链接错误
  3. Mendix架构体系概述(三)- 完结篇
  4. np.mat()函数与np.array()函数的辨析
  5. xss攻击解决方案php项目,php 过滤存储型XSS攻击,_PHP_ 少侠科技
  6. 2019年演出经纪人考试报名 《政策法规及经纪实务》《舞台艺术基础知识》两个科目学习资料
  7. NFT元宇宙中游戏的未来—The Sandbox
  8. Python VTK Read Write 常用读写以及 渲染 显示
  9. 鸿蒙os2.0手机测试版,华为王成录:鸿蒙OS 2.0手机测试版12月准时到来
  10. GitHub 要进入中国啦!