博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android-再次解读萤石云视频
阅读量:6947 次
发布时间:2019-06-27

本文共 5696 字,大约阅读时间需要 18 分钟。

前言

我之前写过一篇萤石云的集成文章,很多人问我有没有demo, 今天我再次总结一下, 并加个些功能。

  • 集成步骤
  • 视频预览播放
  • 视频放大缩小
  • 视频的质量切换
  • 截图
  • 视频加载细节

之前的文章大家可以看下面的链接:

先看效果图:

集成步骤

1.安装SDK
dependencies {    compile 'com.hikvision.ezviz:ezviz-sdk:4.8.6.2' }复制代码
2.配置工程

(1).权限配置 在 AndroidMainfest.xml 文件中添加:

//网络权限
//存储权限
//wifi 状态权限
//热点配网扫描wifi需要使用
复制代码

(2).配置build.gradle

defaultConfig {       ...        ndk {            abiFilters "armeabi-v7a"//只支持v7a        }    }     sourceSets {        main {            jniLibs.srcDirs = ['libs']        }    }复制代码

(3).配置 AndroidManifest.xml 添加如下activity定义,用于sdk中间页显示,包含登录、开通云存储等。

复制代码

具体可以参考官方集成网站

视频预览播放

播放与之前版本不同,加入设备的验证码

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;}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {    if (mEZPlayer != null) {        mEZPlayer.setSurfaceHold(null);    }    mRealPlaySh = null;}复制代码
复制代码

实现Handler.Callback,来监听播放结果回调:

@Override    public 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 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;}复制代码

视频质量切换

效果图:

核心方法

// 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() {                @Override                public void run() {                    try {                        // need to modify by yudan at 08-11                        APP.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

大家可以关注我的微信公众号:「秦子帅」一个有质量、有态度的公众号!

转载地址:http://alonl.baihongyu.com/

你可能感兴趣的文章
Swift - 使用CoreLocation实现定位(经纬度、海拔、速度、距离等)
查看>>
Netty 编码解码框架
查看>>
.NET程序员学PHP要注意的坑
查看>>
windows下的fltk之编译以及试运行
查看>>
js提示框
查看>>
为什么关系型数据库不适于Hadoop
查看>>
换种角度解决问题
查看>>
功能测试报告
查看>>
JFinal-Beetl-Shiro(JdbcRealm)-例子
查看>>
跬步之积,以至千里
查看>>
[转]关于java文件读写、字节流、字符流的一点新得
查看>>
常量池、栈、堆的比较
查看>>
centos下载地址
查看>>
php防止模拟请求
查看>>
Javascript 控制 CheckBox 的全选与取消全选
查看>>
推荐编程书记书籍
查看>>
JVM系列一:JVM内存组成及分配
查看>>
mysqldump导入导出mysql数据库
查看>>
搜狗五笔输入法:“分号模式”(中文下快速输入英文的另类方法)
查看>>
Mac 下安装使用 Love2D
查看>>