Android-再次解读萤石云视频
前言
我之前写过一篇萤石云的集成文章,很多人问我有没有demo, 今天我再次总结一下, 并加个些功能。
- 集成步骤
- 视频预览播放
- 视频放大缩小
- 视频的质量切换
- 截图
- 视频加载细节
之前的文章大家可以看下面的链接:
https://mp.weixin.qq.com/s/V4F2_bkY8QFN167KY9gSDg
先看效果图:
集成步骤
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中间页显示,包含登录、开通云存储等。
<activityandroid: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;
}@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}@Override
public void surfaceDestroyed(SurfaceHolder holder) {if (mEZPlayer != null) {mEZPlayer.setSurfaceHold(null);}mRealPlaySh = null;}
<SurfaceViewandroid: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("C86398971");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 blocke.printStackTrace();}} else {if (mPlayScale == scale) {try {if (mEZPlayer != null) {mEZPlayer.setDisplayRegion(true, oRect, curRect);}} catch (BaseException e) {// TODO Auto-generated catch blocke.printStackTrace();}return;}try {if (mEZPlayer != null) {mEZPlayer.setDisplayRegion(true, oRect, curRect);}} catch (BaseException e) {// TODO Auto-generated catch blocke.printStackTrace();}}mPlayScale = scale;
}
视频质量切换
效果图:
核心方法
// 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-11APP.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()
需要源码的朋友可以加我的微信:lengquele5311
大家可以关注我的微信公众号:「秦子帅」一个有质量、有态度的公众号!
Android-再次解读萤石云视频相关推荐
- android p wifi一直在扫描_Android再次解读萤石云视频
点击上方蓝字关注 ?? 前言 我之前写过一篇萤石云的集成文章,很多人问我有没有demo, 今天我再次总结一下, 并加个些功能. 集成步骤 视频预览播放 视频放大缩小 视频的质量切换 截图 之前的文章大 ...
- 萤石android播放成功没画面,Android-再次解读萤石云视频
前言 我之前写过一篇萤石云的集成文章,很多人问我有没有demo, 今天我再次总结一下, 并加个些功能. 集成步骤 视频预览播放 视频放大缩小 视频的质量切换 截图 视频加载细节 之前的文章大家可以看下 ...
- java萤石云,Android-再次解读萤石云视频
前言 我之前写过一篇萤石云的集成文章,很多人问我有没有demo, 今天我再次总结一下, 并加个些功能. 集成步骤 视频预览播放 视频放大缩小 视频的质量切换 截图 视频加载细节 先看效果图: 集成步骤 ...
- 萤石云视频EZOpenSDK集成(实现播放,视频放大功能)
前言 去年在项目中用到了萤石云视频,它的项目源码很多,找到有用的代码很费时间,所以今天写成文章把集成步骤,预览功能,双击放大,手势放大功能以及注意事项等分享给大家. 效果图如下: 萤石开发平台地址: ...
- uni-app 使用 webview运行到小程序,打开萤石云视频
由于微信小程序特殊性,导致APP和h5适应的它都适应不了,因此,不得不对小程序做一些特殊的处理. 问题一:微信小程序无法打开web-view 的URL 相对于APP和H5而言,微信小程序比较严格,对于 ...
- 萤石云视频平台播放地址获取demo
萤石云平台API 调用萤石云API都需要获取Token之后,带着Token获取平台内容 请求接口方法 /**** 萤石云HTTP请求方法* @param url* @param entity* @re ...
- 萤石云视频直播切换出现no source found in video tag.的问题解决方法
使用套件以及业务说明:在使用海康萤石云的轻应用-视频开发套件的时候,根据公司需要,需要根据不同的直播地址在页面点击按钮切换直播的显示,效果图如下.前端框架用的是Layui 问题描述:在点击切换按钮的时 ...
- 萤石云视频EZOpenSDK的集成与使用
本文将讲述萤石sdk的集成与使用,并将案例的demo导入到我们自己的项目中使用.考虑到编译的速度问题,我使用的是jar包进行引入的方式.我已经把依赖和资源文件打包成了module,使用的时候也只需要把 ...
- esp8266+arduino IDE+阿里云IOT+萤石云=远程视频遥控车(一)
@TOC一.创意来源 新冠病毒流行之际,有一山东技术妹子DIY一款遥控车.该车能代替妺子在社区内买馒头. 这是一个不错的创意,值得仿制. 二.小车功能: 为了增加遥控距离,蓝牙.NRF24L01都不选 ...
最新文章
- 我用Python破解了同事的加密压缩包
- 服务器何时取得客户端信息,HttpRequest获得服务端和客户端的详细信息
- About “PostMessage” SendMessage
- IP地址分类及ISO-OSI、三次握手
- python的函数_Python 返回函数+匿名函数
- python实现qq登录界面_使用Python编写一个QQ办公版的图形登录界面!
- html浏览器兼容测试工具,13个不同浏览器兼容性测试的免费软件工具
- SQL Server中删除重复数据的几个方法
- check mk mysql_Mysql管理必备工具Maatkit详解之四(mk-duplicate-key-checker)
- 关于一名零基础蒟蒻ACM变强的路子
- ansible-playbook 远程启动程序ansible结束后程序也被关闭
- Android显示九宫图(自定义圆角,仿微信九宫格图)
- Day5,page30,total160
- 春招升级打怪拿offer,10w+字总结的Java面试题(附答案)够你刷
- MPU9250对初始数据的读取
- 百度跳动争抢优质内容,豆瓣微博们何去何从?
- 《缠中说禅108课》17:走势终完美
- Linux(Ubuntu)/Windows如何下载配置Chromedriver
- 从时频特性出发——什么是循环卷积?
- el-upload实现上传文件预览
热门文章
- (Modern Family S01E01) Part 9 PhilClair 射Luke、Haley和Dylan躺床上看电影
- 【机器学习】阿里云天池竞赛——工业蒸汽量预测(1)
- MLY翻译 -- 4.Scale drivers machine learning progress
- 单向一对多和双向一对多
- git commit之后,回退撤销commit
- 梯度下降算法笔记整理6 - 梯度下降 偏导数及其几何意义
- 微信小程序开发—(八)canvas绘制图形
- 数学----勾股定理证明
- The Sybil Attak 女巫攻击 论文翻译
- 智能手机操作系统Android