`
安卓干货铺
  • 浏览: 36383 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

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

阅读更多

前言

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

效果图如下:

萤石开发平台地址:

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();

 

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

0
0
分享到:
评论

相关推荐

    iOS 萤石云视频app视频demo

    通过分析和实现"iOS 萤石云摄像头视频demo",开发者可以掌握如何在自己的应用中集成萤石云服务,实现实时监控、录像回放等核心功能,提升应用的实用性。同时,这也将涉及对iOS系统编程的深入理解,包括网络编程、...

    萤石云视频语音通话Demo

    【萤石云视频语音通话Demo】是一个基于AndroidStudio开发的SDK示例项目,它提供了集成萤石云服务的音视频通话功能。这个项目的核心在于帮助开发者快速理解和实践如何在自己的应用中实现与萤石云平台的对接,以便利用...

    海康萤石云(EZVIZ)实时视频预览、对讲插件(Android+iOS)示例

    海康萤石云(EZVIZ)实时视频预览、对讲插件(Android+iOS)示例海康萤石云(EZVIZ)实时视频预览、对讲插件(Android+iOS)示例海康萤石云(EZVIZ)实时视频预览、对讲插件(Android+iOS)示例海康萤石云(EZVIZ)实时视频...

    萤石云视频插件

    萤石云视频插件

    萤石云播放海康摄像头

    OCX_v1.5.1build20180703”文件可能是萤石云提供的SDK(Software Development Kit),包含必要的控件和接口,供开发者集成到他们的应用程序中,以便更便捷地与萤石云服务交互,如控制摄像头、获取视频流等。...

    关于QT5.12.10开发对接萤石云二次开发示例代码

    在这个特定的项目中,"关于QT5.12.10开发对接萤石云二次开发示例代码",我们看到的重点在于如何使用Qt来与萤石云服务进行集成,以便实现视频监控或其他相关功能。 萤石云是海康威视公司推出的一款云服务,主要用于...

    iOS 萤石云摄像头视频demo

    在iOS开发中,集成萤石云摄像头视频功能是一项常见的任务,尤其对于那些需要实时监控或者安全防护的应用来说。萤石云提供了丰富的API和SDK,使得开发者可以方便地将摄像头的视频流集成到自己的应用程序中。以下是...

    萤石云前端页面demo

    萤石云前端页面demo,EZUIKit是基于萤石开放平台OpenSDK封装的UI组件,使用过程中不必学习专业的业务概念,更不用调用繁琐的接口,能够以极简的嵌入方式,快速在您的应用中集成视频功能。 详细了解EZOpen协议 ...

    萤石云接口封装

    萤石云接口封装是针对萤石云服务进行的程序开发工作,主要目的是为了方便开发者能够高效、便捷地调用萤石云提供的各种功能,如视频流获取、设备控制、报警事件处理等。在这个项目中,Java被选为编程语言来实现这一...

    萤石云视频插件forwindowsv3.18.4.3中文安装免费版

    萤石云视频插件windows版是windows用户在使用萤石云服务的必备插件,本插件是官方插件,下载直接双击安装即可正常使用萤石云服务。需要此款工具的朋友们可以前来下载使用。 常见问题 无法正常浏览萤石网站页面,...

    萤石云视频JS文件.zip

    总结来说,萤石云视频JS文件.zip提供的ezuikit.js和hls.min.js是构建基于萤石云视频平台的Web应用的重要工具,它们帮助开发者轻松实现视频播放、控制和流媒体处理,使得与萤石云视频服务的集成变得简单而高效。

    萤石云摄像头自动截图以及FTP上传

    萤石云摄像头自动截图以及FTP上传是一个集成自动化与远程存储功能的系统,它结合了现代监控设备的技术优势,为用户提供了一种高效、便捷的方式来管理和获取摄像头捕获的图像。在这个系统中,萤石云摄像头扮演着核心...

    萤石云摄像头直播带云台控制代码

    非常完整的萤石云直播加纯前端云台控制代码,不依赖任何后端技术,纯js,大部分的资源都是需要安装exe的,我这个不需要,可以直接js直播加控制,完美代码,绝对优质资源,绝对不骗人,教程在...

    萤石视频demo ezuikit-js

    EzUIkit-js是一个专门为萤石视频服务设计的JavaScript库,它提供了丰富的API接口和组件,使得在网页端实现视频流播放、监控、控制等功能变得更加便捷。 这个压缩包包含了多个不同技术栈的Demo,分别是: 1. **base...

    C#封装萤石云C++SDK

    萤石云是海康威视旗下的一款视频监控服务,提供了丰富的API和SDK供开发者使用,以实现远程监控、录像回放、报警推送等功能。 描述 "C#封装萤石云C++SDK,可以直接使用" 暗示了开发者已经完成了封装过程,并且该封装...

    QT萤石代码 QT萤石代码 QT萤石代码

    QT萤石代码QT萤石代码QT萤石代码QT萤石代码QT萤石代码QT萤石代码QT萤石代码QT萤石代码QT萤石代码QT萤石代码QT萤石代码QT萤石代码QT萤石代码QT萤石代码QT萤石代码QT萤石代码QT萤石代码QT萤石代码QT萤石代码QT萤石代码...

    海康威视萤石云视频转换工具

    《海康威视萤石云视频转换工具详解与应用指南》 在数字化时代,视频数据的处理和管理变得越来越重要。作为安防领域的领军企业,海康威视推出的“萤石云”服务为用户提供了便捷的视频监控解决方案。然而,有时我们...

    java内网调用海康萤石时使用的sdk

    在这个场景下,我们关注的是Java后端如何在内网环境下调用海康萤石的SDK来实现取流功能。 首先,SDK是开发工具包,通常包含库文件、API文档、示例代码等资源,帮助开发者更容易地构建与特定平台或设备交互的应用...

    大华海康萤石云摄像头直播带云台控制代码.zip

    大华和海康威视是知名的安防监控设备制造商,它们的萤石云平台提供了丰富的API和服务,允许开发者通过编程来实现对摄像头的高级操作,如云台控制和实时视频流的获取。本项目涉及的知识点主要集中在以下几个方面: 1...

    萤石云C++sdk及调用封装,动态库,头文件,调用过程

    萤石云C++sdk及调用封装,动态库,头文件,调用过程。实现会话申请,视频播放,视频回放等功能。

Global site tag (gtag.js) - Google Analytics