android p wifi一直在扫描_Android再次解读萤石云视频

点击上方蓝字关注 ??

3677a246e6138a095fc6ed14eb6561c1.gif

前言

我之前写过一篇萤石云的集成文章,很多人问我有没有demo, 今天我再次总结一下, 并加个些功能。

  • 集成步骤

  • 视频预览播放

  • 视频放大缩小

  • 视频的质量切换

  • 截图

之前的文章大家可以看下面的链接:

https://mp.weixin.qq.com/s/V4F2_bkY8QFN167KY9gSDg

效果图:(因为压缩的缘故,请忽略图片质量)

1a2caafb874b6ee7cf81846adacc53c2.gif

集成步骤

1.安装SDK

dependencies {compile 'com.hikvision.ezviz:ezviz-sdk:4.8.6.2'
}

2.配置工程

(1).权限配置

在 AndroidMainfest.xml 文件中添加:

//网络权限<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.RECORD_AUDIO"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/>
//存储权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
//wifi 状态权限<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
//热点配网扫描wifi需要使用<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

(2).配置build.gradle

defaultConfig {
...
ndk {
abiFilters "armeabi-v7a"//只支持v7a
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}

(3).配置 AndroidManifest.xml

添加如下activity定义,用于sdk中间页显示,包含登录、开通云存储等。

android:name="com.videogo.main.EzvizWebViewActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden">activity>

具体可以参考官方集成网站

https://open.ys7.com/doc/zh/book/4.x/android-sdk.html

视频预览播放

播放与之前版本不同,加入设备的验证码

mEZPlayer.setPlayVerifyCode("验证码");

(1).SDK初始化(在application中初始化)

/** * sdk日志开关,正式发布需要去掉 */
EZOpenSDK.showSDKLog(true);/** * 设置是否支持P2P取流,详见api */
EZOpenSDK.enableP2P(false);/** * APP_KEY请替换成自己申请的 */
EZOpenSDK.initLib(this, APP_KEY);

(2).播放主要代码

实现代码:

设置token

EZOpenSDK.getInstance().setAccessToken("你的token");

布局主要控件是SurfaceView,SurfaceView的用法大家应该都知道吧,主要实现了implements SurfaceHolder.Callback接口,声明SurfaceView 对象,并实方法,代码如下:

private SurfaceView mRealPlaySv = null;private SurfaceHolder mRealPlaySh = null;

mRealPlaySh = mRealPlaySv.getHolder();
mRealPlaySh.addCallback(VideoActivity.this);

Overridepublic void surfaceCreated(SurfaceHolder holder) {if (mEZPlayer != null) {
mEZPlayer.setSurfaceHold(holder);
} else {
}
mRealPlaySh = holder;
}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {if (mEZPlayer != null) {
mEZPlayer.setSurfaceHold(null);
}
mRealPlaySh = null;
}

android:id="@+id/realplay_sv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:background="@android:color/transparent" />

实现Handler.Callback,来监听播放结果回调:

@Overridepublic boolean handleMessage(Message msg) {switch (msg.what){
}return false;
}

配置播放质量与序列号等:

//用来存储萤石云的播放质量、序列号
mCameraInfo=new EZCameraInfo();// 2-高清,1-标清,0-流畅
mCameraInfo.setVideoLevel(2);//序列号
mCameraInfo.setDeviceSerial("你的设备序列号");
mCameraInfo.setCameraNo(1);

开始播放:

private void startRealPlay() {
mEZPlayer = YourApplication.getOpenSDK().createPlayer(mCameraInfo.getDeviceSerial(), mCameraInfo.getCameraNo());
mEZPlayer.setPlayVerifyCode(mVerificationCode);
mEZPlayer.setHandler(mHandler);
mEZPlayer.setSurfaceHold(mRealPlaySh);
mEZPlayer.startRealPlay();
tvPlay.setEnabled(true);
}

视频放大缩小

在播放成功的回调里加上 setRealPlaySvLayout();方法,方法的代码如下:

private void setRealPlaySvLayout() throws InnerException, PlaySDKException {
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);int whdth = dm.widthPixels;int height = dm.heightPixels;
mRealPlayTouchListener.setSacaleRect(Constant.MAX_SCALE, 0, 0, whdth, height);
setPlayScaleUI(1, null, null);
}

private void setPlayScaleUI(float scale, CustomRect oRect, CustomRect curRect) {if (scale == 1) {try {if (mEZPlayer != null) {
mEZPlayer.setDisplayRegion(false, null, null);
}
} catch (BaseException e) {// TODO Auto-generated catch block
e.printStackTrace();
}
} else {if (mPlayScale == scale) {try {if (mEZPlayer != null) {
mEZPlayer.setDisplayRegion(true, oRect, curRect);
}
} catch (BaseException e) {// TODO Auto-generated catch block
e.printStackTrace();
}return;
}try {if (mEZPlayer != null) {
mEZPlayer.setDisplayRegion(true, oRect, curRect);
}
} catch (BaseException e) {// TODO Auto-generated catch block
e.printStackTrace();
}
}
mPlayScale = scale;
}

视频质量切换

效果图:

2f5cb0cefd3fb3ccb2ee7f3069feac4a.gif

核心方法

// 2-高清,1-标清,0-流畅
mCameraInfo.setVideoLevel

切换画面

/**
* 码流配置 清晰度 2-高清,1-标清,0-流畅
*
* @see
* @since V2.0
*/private void setQualityMode(final EZConstants.EZVideoLevel mode) {if (mEZPlayer != null) {
mWaitDialog.setWaitText("正在设置画面质量…");
mWaitDialog.show();
Thread thr = new Thread(new Runnable() {@Overridepublic void run() {try {// need to modify by yudan at 08-11
APP.getOpenSDK().setVideoLevel(mCameraInfo.getDeviceSerial(), mCameraInfo.getCameraNo(), mode.getVideoLevel());
mCurrentQulityMode = mode;
Message msg = Message.obtain();
msg.what = MSG_SET_VEDIOMODE_SUCCESS;
mHandler.sendMessage(msg);
} catch (BaseException e) {
mCurrentQulityMode = EZConstants.EZVideoLevel.VIDEO_LEVEL_FLUNET;
e.printStackTrace();
Message msg = Message.obtain();
msg.what = MSG_SET_VEDIOMODE_FAIL;
mHandler.sendMessage(msg);
}
}
}) {
};
thr.start();
}
}

切换画质结果:

//切换画质成功case EZConstants.EZRealPlayConstants.MSG_SET_VEDIOMODE_SUCCESS:
handleSetVedioModeSuccess();break;//切换画质失败case EZConstants.EZRealPlayConstants.MSG_SET_VEDIOMODE_FAIL:
handleSetVedioModeFail(msg.arg1);break;

其他

 1.声音开关:

mLocalInfo.setSoundOpen(false);

2.截图:

mEZPlayer.capturePicture()

源码获取:

加我的微信备注源码,我的微信:

bcbc62456084840500d18390e2c38a0a.png

—————END—————

518c780ad2e16075e80902e44a2d16e0.png     

   创作不易,点个“在看95814b9421369b067a8f7752fbc72acb.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第5章 Python 数字图像处理(DIP) - 图像复原与重建7 - 周期噪声 余弦噪声生成方法

标题周期噪声周期噪声 周期噪声通常是在获取图像期间由电气或机电干扰产生的 def add_sin_noise(img, scale1, angle0):"""add sin noise for imageparam: img: input image, 1 channel, dtypeuint8param: scale: sin scaler, smaller than 1, will enlarge, …

第5章 Python 数字图像处理(DIP) - 图像复原与重建8 - 估计噪声参数

标题估计噪声参数估计噪声参数 周期噪声的参数通常是通过检测图像的傅里叶谱来估计的。 只能使用由传感器生成的图像时&#xff0c;可由一小片恒定的背景灰度来估计PDF的参数。 来自图像条带的数据的最简单用途是&#xff0c;计算灰度级的均值和方差。考虑由SSS表示的一个条…

python 随机获取数组元素_Python创建二维数组的正确姿势

List &#xff08;列表&#xff09;是 Python 中最基本的数据结构。在用法上&#xff0c;它有点类似数组&#xff0c;因为每个列表都有一个下标&#xff0c;下标从 0 开始。因此&#xff0c;我们可以使用 list[1] 来获取下标对应的值。如果我们深入下列表的底层原理&#xff0c…

在ubunut下使用pycharm和eclipse进行python远程调试

我比较喜欢Pycharm&#xff0c;因为这个是JetBrains公司出的python IDE工具&#xff0c;该公司下的java IDE工具——IDEA&#xff0c;无论从界面还是操作上都甩eclipse几条街&#xff0c;但项目组里有些人使用eclipse比较久了&#xff0c;一时让他们转pycharm比较困难&#xff…

CSS:页脚紧贴底部

2019独角兽企业重金招聘Python工程师标准>>> 我的练习来源于《CSS揭秘》这本书第7章-41紧贴底部的页脚这部分内容以及书中提到的链接。 方案一 描述&#xff1a;以下方案简单、干净、现代并且没有hack&#xff0c;适用于IE8, Chrome, Firefox, Opera等浏览器&#x…

第5章 Python 数字图像处理(DIP) - 图像复原与重建9 - 空间滤波 - 均值滤波器 - 算术平均、几何平均、谐波平均、反谐波平均滤波器

标题只存在噪声的复原 - 空间滤波均值滤波器算术平均滤波器几何均值滤波器谐波平均滤波器反&#xff08;逆&#xff09;谐波平均滤波器只存在噪声的复原 - 空间滤波 仅被加性噪声退化 g(x,y)f(x,y)η(x,y)(5.21)g(x, y) f(x, y) \eta(x, y) \tag{5.21}g(x,y)f(x,y)η(x,y)(5…

第5章 Python 数字图像处理(DIP) - 图像复原与重建10 - 空间滤波 - 统计排序滤波器 - 中值、最大值、最小值、中点、修正阿尔法均值滤波器

标题统计排序滤波器中值、最大值、最小值、中点 滤波器修正阿尔法均值滤波器统计排序滤波器 中值、最大值、最小值、中点 滤波器 f^(x,y)median{g(r,c)}(5.27)\hat{f}(x, y) \text{median} \{g(r,c)\} \tag{5.27}f^​(x,y)median{g(r,c)}(5.27) f^(x,y))max{g(r,c)}(5.28)\ha…

如何设置坐标原点值_氨气检测仪电化学原理及报警值如何设置

氨气体检测仪检定规程&#xff1a;一般氨气体检测仪检定规程主要是针对技术参数设定的一些标准&#xff0c;具体包含有规程的名称和范围、仪器示值误差、充分性标准差、响应时间、稳定性、报警功能、流量控制器、检定项目表、检定操作有数值误差、重复性、响应时间、稳定性等。…

第5章 Python 数字图像处理(DIP) - 图像复原与重建11 - 空间滤波 - 自适应滤波器 - 自适应局部降噪、自适应中值滤波器

标题自适应滤波器自适应局部降噪滤波器自适应中值滤波器自适应滤波器 自适应局部降噪滤波器 均值是计算平均值的区域上的平均灰度&#xff0c;方差是该区域上的图像对比度 g(x,y)g(x, y)g(x,y)噪声图像在(x,y)(x, y)(x,y)处的值 ση2\sigma_{\eta}^2ση2​ 为噪声的方差&am…

关闭防火墙_从零开始学Linux运维|09.关闭防火墙和SElinux

firewalld是centos7默认的防火墙安全增强型 Linux(Security-Enhanced Linux)简称 SELinux初学者建议先关闭,等熟悉了之后再来使用前期联系中的好多错误都有可能是由于没有关闭或者正确配置上面两项造成的1.临时关闭centos7下的防火墙firewalld一行命令就能够关闭firewalld--&qu…

Discuz!NT - 在线显示列表 游客 bug 修复

引发bug的条件&#xff1a;当你修改了系统组里面的[游客]组 的名字后&#xff01;&#xff01; 你会发现首页上底部的在线显示列表里始终都是显示"游客"字样而非你改过得字样&#xff01;如图 至此你需要运行一个t-sql脚本去修复这个bug&#xff01;&#xff08;但是…

基于空间方法的图神经网络模型_用于时空图建模的图神经网络模型 Graph WaveNet | 课程上新...

课程概要本课程来自集智学园图网络论文解读系列活动。是对论文《Graph WaveNet for Deep Spatial-Temporal Graph Modeling》的解读。时空图建模 (Spatial-temporal graph modeling)是分析系统中组成部分的空间维相关性和时间维趋势的重要手段。已有算法大多基于已知的固定的图…

dataframe类型数据的遍历_Python零基础入门到爬虫再到数据分析,这些你都是要学会的...

1.必须知道的两组Python基础术语A.变量和赋值Python可以直接定义变量名字并进行赋值的&#xff0c;例如我们写出a 4时&#xff0c;Python解释器干了两件事情&#xff1a;在内存中创建了一个值为4的整型数据在内存中创建了一个名为a的变量&#xff0c;并把它指向4用一张示意图表…

第5章 Python 数字图像处理(DIP) - 图像复原与重建12 - 空间滤波 - 使用频率域滤波降低周期噪声 - 陷波滤波、最优陷波滤波

标题使用频率域滤波降低周期噪声陷波滤波深入介绍最优陷波滤波本章陷波滤波器有部分得出的结果不佳&#xff0c;如果有更好的解决方案&#xff0c;请赐教&#xff0c;不胜感激。 使用频率域滤波降低周期噪声 陷波滤波深入介绍 零相移滤波器必须关于原点(频率矩形中心)对称&a…

Android之Menu动态改变文字

Menu创建&#xff1a; Override//这里遇到一个问题add的是MenuItem的idpublic boolean onCreateOptionsMenu(Menu menu) {// TODO Auto-generated method stubmenu.add(0,1023, 0, "一");menu.add(0,1022, 1, "开启线程");Log.e("onCreateOptionsMenu…

去掉xcode中警告的一些经验

1、编译时&#xff0c;编译警告忽略掉某些文件 只需在在文件的Compiler Flags 中加入 -w 参数&#xff0c;例如&#xff1a; 2、编译时&#xff0c;编译警告忽略掉某段代码 #pragma clang diagnostic push#pragma clang diagnostic ignored "-Wmultichar"char b df;…

富士施乐3065扫描教程_全面支持IT国产化 富士施乐70款机型获统信UOS兼容认证

最近&#xff0c;富士施乐&#xff08;中国&#xff09;有限公司宣布共70款机型获得国产操作系统统信UOS的兼容认证&#xff0c;其中包括新一代ApeosPort旗舰智能型数码多功能机、多功能一体机/打印机、生产型数字印刷系统。这是继获得中标麒麟、龙芯和兆芯兼容认证后&#xff…

第5章 Python 数字图像处理(DIP) - 图像复原与重建13 - 空间滤波 - 线性位置不变退化 - 退化函数估计、运动模糊函数

标题线性位置不变退化估计退化函数采用观察法估计退化函数采用试验法估计退化函数采用建模法估计退化函数运动模糊函数OpenCV Motion Blur在这一节中&#xff0c;得到的结果&#xff0c;有些不是很好&#xff0c;我需要再努力多找资料&#xff0c;重新完成学习&#xff0c;如果…

视觉感受排序算法

1. 快速排序 介绍&#xff1a; 快速排序是由东尼霍尔所发展的一种排序算法。在平均状况下&#xff0c;排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较&#xff0c;但这种状况并不常见。事实上&#xff0c;快速排序通常明显比其他Ο(n log n) 算法更快&…

python如何自定义函数_python如何自定义函数_后端开发

c语言特点是什么_后端开发 c语言特点是&#xff1a;1、语言简洁、紧凑&#xff0c;使用方便、灵活&#xff1b;2、运算符丰富&#xff1b;3、数据结构丰富&#xff0c;具有现代化语言的各种数据结构&#xff1b;4、具有结构化的控制语句&#xff1b;5、语法限制不太严度格&…