前面,我们已经了解了怎么在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=newBufferedInputStream(input);

ByteArrayOutputStream outputStream= new ByteArrayOutputStream();

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

intreadLength;

String flag= "Content-Length:", flag1 = "\r\n";while (true) {//当输入流有数据时,则创建byte数组

if (in.available() != -1) {byte buffer[] = new byte[1024];//把读到的字节数给 readLength

readLength = in.read(buffer, 0, 1024);//让readLength读满

while (readLength < 1024) {

readlength= in.read(buffer, readLength - 1, 1024 -readLength);

readLength= readLength +readlength;

}if (readLength > 0) {

strData= newString(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)

outputStream.write(buffer, index1+ 4, readLength - index1 - 4);

streamLength= streamLength - readLength + index1 + 4;

}//将剩下读取的视频流存储到buffer1

byte[] buffer1 = new byte[streamLength];int length = 0;while (length

length += in.read(buffer1, length, streamLength -length);

}else{

Thread.sleep(150);

}

}

outputStream.write(buffer1,0, streamLength);byte[] data =outputStream.toByteArray();

BitmapFactory.Options op= newBitmapFactory.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 = newHandler() {

@Overridepublic voidhandleMessage(Message msg) {super.handleMessage(msg);switch(msg.what) {caseMSG_ONE:

remoteSurfaceView.setImageBitmap(bitmap);break;default:break;

}

}

};

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

原文:https://www.cnblogs.com/lwkdbk/p/10986960.html

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

  1. Android 短视频编辑开发前言(一)

    系列文章目录 Android 短视频编辑开发前言(一) Android 短视频开发之摄像头预览(二) Android 短视频编辑开发之摄像头预览实时美颜(三) Android 短视频编辑开发之相机拍照 ...

  2. Android 短视频编辑开发之摄像头预览实时美颜(三)

    前言: 在上一篇文章中给小伙伴们介绍了进行Camera预览,如果你还没有看过的话,建议先去看上一篇文章<Android 短视频开发之摄像头预览(二> 本篇文章会介绍如何实现摄像头预览画面实 ...

  3. Android短视频app开发中如何实现上下滑动切换效果

    在大部分短视频app开发中,都会在app内增加上下滑动切换视频的功能,即下滑切换到下一条短视频,上滑切回到上一条.这种机制可以给用户带来良好的视觉体验,云豹作为优秀的app源码供应商,在该效果的实现上 ...

  4. android 无线视频,Android系统无线视频流媒体的接收、解码与播放

    摘要: Android系统自问世以来就迅猛发展,并迅速占据着移动终端的主导地位.随着Android系统发展以及移动终端的应用需求的增长,Android平台的应用开发越来越丰富.Android系统的不断 ...

  5. android 启动视频,android 启动页面全屏播放视频

    有时候大家在启动软件的时候,会看到有一个比较炫酷的短视频,觉得很有意思,现在做项目的时候也遇到了,跟大家分享一下. 首先,在 res 目录下建一个文件夹 raw, 把你的视频文件(.mp4等)放进去. ...

  6. android 广告视频,Android开屏视频广告

    Android开屏视频广告 //视频保存地址 private String videoPath = "/sdcard/xxxx/" + "appVideo.mp4&quo ...

  7. 融云Android对接视频,Android studio接入融云IM

    说明: 官方网址:http://www.rongcloud.cn/ 1.融云SDK 将各部分功能以插件化的形式独立提供,开发者可以根据自己的需要,自由组合下载. 2.IM 界面组件 - IMKit , ...

  8. Android开发——通过wifi接收IPCamera视频流

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

  9. android多媒体视频,android多媒体(视频播放器)

    ##视频处理 一丶VideoView控件 点击创建一个播放器并播放视频 /** * 播放视频 * @param view */ public void play(View view){ vv.setV ...

最新文章

  1. 浅谈Transformer 及Attention网络
  2. 98级计算机应用教材,西安外事学院98级计算机应用9806班毕业二十年校友返校
  3. Android成长日记-使用ViewFlipper实现屏幕切换动画效果
  4. MYSQL创建一个function用来计算经纬度距离
  5. 程序员如何面试才能拿到offer
  6. 学习php开发步骤,学习php设计模式 php实现模板方法模式
  7. 更改yum源配置后执行报错[Errno 14] PYCURL ERROR 22 - “The requested URL returned error: 404 Not Found”
  8. GitLab 严重漏洞可导致攻击者窃取runner 注册令牌
  9. java带参数的方法笔记_Java学习笔记十一:Java中的方法
  10. 通过银行卡的Bin号来获取银行名称
  11. DOS MASM 安装
  12. 易语言大漠插件模块制作窗口获取窗口句柄类
  13. python分词、词频统计以及根据词频绘制词云
  14. 启用计算机共享,电脑无法启用共享访问怎么办
  15. 【Android】CTS测试
  16. 使用nodejs机器学习进行app流量判别
  17. 高级着色语言HLSL入门
  18. 【计算机组成原理】计算机组成原理——组成篇
  19. STM32例程分享-01-OLED模块(IIC)
  20. ABB机器人基础培训资料整理与总结

热门文章

  1. 由于严重缺陷,海康威视摄像机可能被远程黑客攻击
  2. 2004.8.18日--全国3D第一期
  3. rabbitmq-exclusive queue
  4. 王大师送福利啦!2021年面试题目汇总
  5. T48568 【zzy】yyy送礼物
  6. vue实现监控流-rtsp转flv
  7. 欧拉角,万向节锁和四元数
  8. 我用Python逆向登录世界上最大的游戏平台,steam加密手段有多高明【内附源码】
  9. SQL Server 数据库之角色、管理权限
  10. linux源码中,.org 0x2000,ENTRY(pg1)表示的是什么意思?org是什么意思,ENTRY是什么意思啊?