资讯专栏INFORMATION COLUMN

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

BingqiChen / 2558人阅读

摘要:推荐阅读封装之路学习资源分享合集去年在项目中用到了萤石云视频,它的项目源码很多,找到有用的代码很费时间,所以今天写成文章把集成步骤,预览功能,双击放大,手势放大功能以及注意事项等分享给大家。

推荐阅读:
SurfaceView+MediaPlayer封装之路
Android学习资源分享合集(1)

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

萤石开发平台地址:
https://open.ys7.com/

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

集成步骤:

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

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

3. 配置 Android 权限

 








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



 
       
            
            
        
   

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;

}

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67626.html

相关文章

  • Android-再次解读萤石视频

    摘要:前言我之前写过一篇萤石云的集成文章,很多人问我有没有,今天我再次总结一下,并加个些功能。 前言 我之前写过一篇萤石云的集成文章,很多人问我有没有demo, 今天我再次总结一下, 并加个些功能。 集成步骤 视频预览播放 视频放大缩小 视频的质量切换 截图 视频加载细节 之前的文章大家可以看下面的链接:https://mp.weixin.qq.com/s/V4... 先看效果图:sho...

    Amio 评论0 收藏0
  • 【收藏篇】32篇技术博文汇总(九月总结)

    摘要:首先先祝大家国庆节快乐今天距离为我运营公众号已经一个月了,今天把文章整合一下,希望对大家有帮助,也谢谢朋友的支持,我会继续坚持原创,写更好的文章给大家一视频获取学习资源分享合集二功能篇实现金额的语音播报功能基于模式风格的封装之路炫酷动画跳 showImg(https://segmentfault.com/img/remote/1460000011437678?w=900&h=500);...

    whlong 评论0 收藏0
  • 【收藏篇】32篇技术博文汇总(九月总结)

    摘要:首先先祝大家国庆节快乐今天距离为我运营公众号已经一个月了,今天把文章整合一下,希望对大家有帮助,也谢谢朋友的支持,我会继续坚持原创,写更好的文章给大家一视频获取学习资源分享合集二功能篇实现金额的语音播报功能基于模式风格的封装之路炫酷动画跳 showImg(https://segmentfault.com/img/remote/1460000011437678?w=900&h=500);...

    Eric 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<