前言

我之前写过一篇萤石云的集成文章,很多人问我有没有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-再次解读萤石云视频相关推荐

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

    点击上方蓝字关注 ?? 前言 我之前写过一篇萤石云的集成文章,很多人问我有没有demo, 今天我再次总结一下, 并加个些功能. 集成步骤 视频预览播放 视频放大缩小 视频的质量切换 截图 之前的文章大 ...

  2. 萤石android播放成功没画面,Android-再次解读萤石云视频

    前言 我之前写过一篇萤石云的集成文章,很多人问我有没有demo, 今天我再次总结一下, 并加个些功能. 集成步骤 视频预览播放 视频放大缩小 视频的质量切换 截图 视频加载细节 之前的文章大家可以看下 ...

  3. java萤石云,Android-再次解读萤石云视频

    前言 我之前写过一篇萤石云的集成文章,很多人问我有没有demo, 今天我再次总结一下, 并加个些功能. 集成步骤 视频预览播放 视频放大缩小 视频的质量切换 截图 视频加载细节 先看效果图: 集成步骤 ...

  4. 萤石云视频EZOpenSDK集成(实现播放,视频放大功能)

    前言 去年在项目中用到了萤石云视频,它的项目源码很多,找到有用的代码很费时间,所以今天写成文章把集成步骤,预览功能,双击放大,手势放大功能以及注意事项等分享给大家. 效果图如下: 萤石开发平台地址: ...

  5. uni-app 使用 webview运行到小程序,打开萤石云视频

    由于微信小程序特殊性,导致APP和h5适应的它都适应不了,因此,不得不对小程序做一些特殊的处理. 问题一:微信小程序无法打开web-view 的URL 相对于APP和H5而言,微信小程序比较严格,对于 ...

  6. 萤石云视频平台播放地址获取demo

    萤石云平台API 调用萤石云API都需要获取Token之后,带着Token获取平台内容 请求接口方法 /**** 萤石云HTTP请求方法* @param url* @param entity* @re ...

  7. 萤石云视频直播切换出现no source found in video tag.的问题解决方法

    使用套件以及业务说明:在使用海康萤石云的轻应用-视频开发套件的时候,根据公司需要,需要根据不同的直播地址在页面点击按钮切换直播的显示,效果图如下.前端框架用的是Layui 问题描述:在点击切换按钮的时 ...

  8. 萤石云视频EZOpenSDK的集成与使用

    本文将讲述萤石sdk的集成与使用,并将案例的demo导入到我们自己的项目中使用.考虑到编译的速度问题,我使用的是jar包进行引入的方式.我已经把依赖和资源文件打包成了module,使用的时候也只需要把 ...

  9. esp8266+arduino IDE+阿里云IOT+萤石云=远程视频遥控车(一)

    @TOC一.创意来源 新冠病毒流行之际,有一山东技术妹子DIY一款遥控车.该车能代替妺子在社区内买馒头. 这是一个不错的创意,值得仿制. 二.小车功能: 为了增加遥控距离,蓝牙.NRF24L01都不选 ...

最新文章

  1. 我用Python破解了同事的加密压缩包
  2. 服务器何时取得客户端信息,HttpRequest获得服务端和客户端的详细信息
  3. About “PostMessage” SendMessage
  4. IP地址分类及ISO-OSI、三次握手
  5. python的函数_Python 返回函数+匿名函数
  6. python实现qq登录界面_使用Python编写一个QQ办公版的图形登录界面!
  7. html浏览器兼容测试工具,13个不同浏览器兼容性测试的免费软件工具
  8. SQL Server中删除重复数据的几个方法
  9. check mk mysql_Mysql管理必备工具Maatkit详解之四(mk-duplicate-key-checker)
  10. 关于一名零基础蒟蒻ACM变强的路子
  11. ansible-playbook 远程启动程序ansible结束后程序也被关闭
  12. Android显示九宫图(自定义圆角,仿微信九宫格图)
  13. Day5,page30,total160
  14. 春招升级打怪拿offer,10w+字总结的Java面试题(附答案)够你刷
  15. MPU9250对初始数据的读取
  16. 百度跳动争抢优质内容,豆瓣微博们何去何从?
  17. 《缠中说禅108课》17:走势终完美
  18. Linux(Ubuntu)/Windows如何下载配置Chromedriver
  19. 从时频特性出发——什么是循环卷积?
  20. el-upload实现上传文件预览

热门文章

  1. (Modern Family S01E01) Part 9 PhilClair 射Luke、Haley和Dylan躺床上看电影
  2. 【机器学习】阿里云天池竞赛——工业蒸汽量预测(1)
  3. MLY翻译 -- 4.Scale drivers machine learning progress
  4. 单向一对多和双向一对多
  5. git commit之后,回退撤销commit
  6. 梯度下降算法笔记整理6 - 梯度下降 偏导数及其几何意义
  7. 微信小程序开发—(八)canvas绘制图形
  8. 数学----勾股定理证明
  9. The Sybil Attak 女巫攻击 论文翻译
  10. 智能手机操作系统Android