前言

去年在项目中用到了萤石云视频,它的项目源码很多,找到有用的代码很费时间,所以今天写成文章把集成步骤,预览功能,双击放大,手势放大功能以及注意事项等分享给大家。

效果图如下:

萤石开发平台地址:

https://open.ys7.com/

点击"文档"进入萤石云开发平台开发文档使用。

集成步骤

1. 创建应用

首先,你需要在萤石开放平台官网的 “ 开发者服务-我的应用-应用秘钥 ” 查看Appkey。

2.安装 SDK

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

3. 配置 Android 权限

<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.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>

4. 配置 build.gradle

defaultConfig {
      ...
       targetSdkVersion 22//小于23
      ...
       ndk {
           abiFilters "armeabi-v7a"//只支持32位
       }
   }
    sourceSets {
       main {
           jniLibs.srcDirs = ['libs']
       }
   }

注意:

(1).目前提供所有so均为32位,只能在armeabi-v7a引用,所以需要添加

ndk {
   abiFilters "armeabi-v7a"//只支持32位
}

(2).targetSdkVersion设置为23及以上,在android6.0系统的手机上会出现没有权限崩溃的情况,因为android6.0牵扯到Dangerous Permissions问题,如果需要使用高版本,需要自己处理Dangerous Permissions。

5. 配置 AndroidManifest.xml

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

<receiver
      android:name="you_BroadcastReceiver"
      android:exported="false" >
      <intent-filter>
           <action android:name="com.videogo.action.OAUTH_SUCCESS_ACTION" />
           <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
       </intent-filter>
  </receiver>

6.代码初始化

要在Application中初始化

/**
* APP_KEY请替换成自己申请的
*/
EZOpenSDK.initLib(this, APP_KEY, "");

代码混淆直接去看开发文档,这里就省略了。

7.重要名词解释:

初始化流程

1.初始化SDK-initLib,也就是在Application。

EZOpenSDK.initLib(this, APP_KEY,"");

2.获取AccessToken.

EZOpenSDK.getInstance().setAccessToken("您要填的Token值");

3.您购买的摄像机设备添加在萤石云APP上。(直接在下载APP通过序列号添加)

如果您开发中还要获取设计列表等等的功能请直接查看萤石云开发平台文档。

初播放视频流程

播放流程:

1.初始化EZPlayer调用EZOpenSDK的createPlayer,详见api;

2.预览播放成功后可以进行以下操作:录像、拍照、画面翻转、对讲、云台控制、声音开关、视频画面缩放、拖动进度播放,详见api的EZPlayer,其中设备控制该接口的如云台控制和镜头显示功能、对讲,属于限制级接口,要优选通过判断设备的能力集来调用,设备能力集请查看EZDeviceInfo对象的属性值来判断具体方法;

3.关于对讲功能,如果预览播放有声音输出,则在开启对讲前需要关闭预览播放的声音closeSound,关闭对讲后开启预览播放的声音openSound,详见demo;

4.EZOpenSDK中的setVideoLevel设置视频清晰度(videoLevel),此调节可以在视频播放前设置也可以在视频播放成功后设置,视频播放成功后设置了清晰度需要先停止播放stopRealPlay然后重新开启播放startRealPlay才能生效;

5.开始播放之后在消息回调中会收到a、成功消息:EZRealPlayConstants.MSG_REALPLAY_PLAY_SUCCESS,b、失败消息:EZRealPlayConstants.MSG_REALPLAY_PLAY_FAIL,失败回调时查看errorCode,如果为400035(需要输入验证码)和400036(验证码错误),则需要开发者自己处理让用户重新输入验证密码,并调用setPlayVerifyCode设置密码,然后重新启动播放。

实现代码:

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

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

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

@Override

public 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;

}

<SurfaceView
   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" />

1.初始化EZPlayer,绑定设备,开始播放。

mEZPlayer = YourApplication.getOpenSDK().createPlayer(deviceSerial, cameraNo);//绑定设备
       mEZPlayer.setHandler(mHandler);
       mEZPlayer.setSurfaceHold(mRealPlaySh);
       mEZPlayer.startRealPlay();//开始播放

2.播放回调

/*
视频的回调
*/
@Override
public boolean handleMessage(Message msg) {
   //   Log.e("回调","true+zong"+msg);
   switch (msg.what) {
//播放成功的回调
       case EZConstants.EZRealPlayConstants.MSG_REALPLAY_PLAY_SUCCESS:

break;

}

return false;
}

视频放大、手势放大功能

在播放成功的回调里加上  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;
}

强调

1.必须在onDestory()方法上注销,否则会报错,代码如下:

@Override
protected void onDestroy() {
   super.onDestroy();
   if (mEZPlayer != null) {
       mEZPlayer.release();
   }

}

2.暂停播放的方法

mEZPlayer.stopRealPlay();

如果有什么不清楚的可以给我留言或者加微信,希望对大家有所帮助。

萤石云视频EZOpenSDK集成(实现播放,视频放大功能)相关推荐

  1. EasyCVR平台基于萤石云SDK接入的设备播放流程及接口调用

    EasyCVR视频融合云服务支持海量视频汇聚与管理.处理与分发.智能分析等视频能力,在功能上,可支持视频监控直播.云端录像.云存储.录像检索与回看.智能告警.平台级联.服务器集群等.EasyCVR平台 ...

  2. 使用IJKPlayer播放视频实现了一些播放视频的基本操作

    使用IJKPlayer播放视频实现了一些播放视频的基本操作 Iijkplayer目前是很流行的音视频框架,集成我这里就不多说了,网上很多,大概就是编译ijkplayer的源码得到里边的so文件,添加到 ...

  3. 12_微信小程序之微信视频号滚动自动播放视频效果实现

    12_微信小程序之微信视频号滚动自动播放视频效果实现 一.获取视频的分辨率.时长.缩略图 微信小程序提供了三种方式可以获取视频的分辨率.时长: wx.getVideoInfo(Object) :只能用 ...

  4. Android - 关于萤石云SDK的集成

    作为一个小白,刚看萤石云的sdk是有点云里雾里的.在接入文档中,它给你讲解了如何登陆入平台,但是到了播放那边却开始一笔带过.甚至于官方的视频教程居然还用的是eclipse的.这就很离谱了.好在使用萤石 ...

  5. php本地安装帝国视频,帝国cms如何播放视频

    帝国cms如何播放视屏,相信很多人都遇到过这种问题,其实帝国cms有自带的视屏播放插件,只需要加载它的js文件,在直接调用函数就行了.下面就为大家,详细介绍一下该函数该如何使用. 一.使用语法说明 ( ...

  6. OpenCV重复播放摄像头视频,循环播放摄像头(视频)文件,循环播放视频中某一段视频

    OpenCV中使用摄像头录像并保存并不难实现,本文针对摄像头实时帧画面进行记录,并重复播放 视频文件的读取和处理方法类似,首先,本文对摄像头进行采集和实时帧画面显示. #include <ope ...

  7. android webview 播放视频总结,Android WebView 播放视频总结~

    此次遇到一个问题就是webView无法播放视频,查了下谷歌发现可以设置 setting.setPluginsEnabled(true); (从API 11 支持,可以不加) 这个从而播放视频,但是最新 ...

  8. android 无法播放mp4视频,Android VideoView无法播放视频错误,特别是.mp4

    我正在尝试在我的应用程序中播放视频,但我得不能播放此视频错误.关于这一点,我遇到了很多线索.他们要求在玩家准备好后开始播放视频.我也是这样做的.但无法弄清楚问题.请在下面找到我的代码. public ...

  9. 使用mciSendString在指定窗口里播放视频文件并设置播放视频画面大小

    背景 mciSendString 函数是一个功能强大的函数,它有自己的mci命令,通过传入mci命令从而控制多媒体设备的操作.之前使用过 mciSendString 函数播放视频,但是,那个程序并没有 ...

最新文章

  1. 记windows平台使用vscode 搭建linux c++开发环境
  2. php mysql 星级评分_jQuery+PHP星级评分实现方法_jquery
  3. 平正真诚——记红帆公司2011年秋季旅游·衡山
  4. dom4kj解析xml
  5. linux npm环境变量,linux配置npm环境变量
  6. oracle导入 不是dba,IMP-00013只有DBA才能导入由其他DBA导出的文件
  7. 如把联想电脑计算机图标放在桌面上,thinkpad电脑图标没了怎么恢复
  8. 我们渴望和平freeeim
  9. php 自己封装一个调用第三方接口的函数
  10. matlab imagesc 白色,[转载]matlab 中imagesc的用法
  11. 理解t检验的一个简单技巧和手动计算P值
  12. Java 拾遗补阙 ----- 运算符
  13. 计算机照片无法打开,无法打开jpg图片的解决方法
  14. 系统分析与设计小组项目总结报告
  15. [SSL_CHX][2021-8-19]空瓶换饮料
  16. 华为HCIE RS笔记-20 OSPF的V-Link
  17. matlab /simulink车辆防抱死制动系统ABS建模仿真
  18. Android面试题及答案
  19. 《张孝祥JAVA就业培训教程》书摘
  20. matlab潮汐图,使用MATLAB拟合工具箱进行潮汐调和分析

热门文章

  1. 算法-动态规划-股票交易
  2. 土法搞docker系列之自制docker的graph driver vdisk
  3. STC8学习--看门狗
  4. Blender设置相机围绕物体旋转
  5. 低代码究竟能干啥?三位一体解决数字化管理的难点痛点
  6. Java-null(对空值得处理)
  7. 用工业路由器就能实现的下管廊远程监控无线解决方案
  8. Re: 怪猫追mm (转载)
  9. (universal Image Loader)UIL 使用 (1)
  10. 报错解决:selenium.common.exceptions.WebDriverException: Message: An unknown server-side error