android开发接入萤石视频案例

释放双眼,带上耳机,听听看~!

第一步:首先去萤石视频开放平台注册账号,官网地址:https://open.ys7.com/

第二步:在萤石开放平台创建自己打的应用,得到AppKey,Secret,和AccessToken

第三步:在我的设备里,添加上摄像头信息

摄像头:

添加上摄像头(设备信息)

第四步:集成到案例中(环境要求支持 JDK 7.0 以上版本,支持 Android 手机系统 4.0 以上版本)

4.1 安装sdk

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

4.2 在AndroidManifest.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"/>

4.3 配置build.gradle

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

4.4 在application中初始化SDK

final String APP_KEY="fa***************c";
/** * sdk日志开关,正式发布需要去掉 */
EZOpenSDK.showSDKLog(true);
/** * 设置是否支持P2P取流,详见api */
EZOpenSDK.enableP2P(false);
EZOpenSDK.initLib(this, APP_KEY);

4.4.1 OpenSDK初始化流程

4.5集成萤石视频的代码编写

//对于accessToken,要从网络上获取
StringRequest request = new StringRequest(Request.Method.POST, "https://open.ys7.com/***********/get",
new Response.Listener<String>() {
@Override
public void onResponse(String s) {
try {
JSONObject jSONObject=new JSONObject(s);
                     //在这里用SharedPreferences取值
                     //如果是默认值,则将数据存到本地
                     //如果不是默认值,判断两个时间是否相差7天
                     //如果是则更新本地数据,如果不是,则不用更新,不用后续操作
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(VideoListActivity.this, volleyError.toString(), Toast.LENGTH_SHORT).show();
}
}){
//getParams()方法:
//用户在Volley中使用Post方式请求数据中参数的传递
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> hashMap = new HashMap<String,String>();
//将请求参数名与参数值放入map中
                        //获取到的appKey
hashMap.put("appKey","faa****************ebbc");
                        //获取到的appSecret
hashMap.put("appSecret", "a5b******************859");
return hashMap;
}
};
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback{
private SurfaceView mRealPlaySv;
private SurfaceHolder mRealPlaySh;
private EZPlayer mEZPlayer = null;
private List<EZDeviceInfo> mDeviceInfoList;
    //摄像头底部的序列号
    priavte final int serialNo=6***********5;
//摄像头底部的验证码
    priavte final String  code=G***********J;
private static final int MSG_ON_DEVICE_RESPONSE=  1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
* 这里的AccessToken取个值,用来写Demo的
*  写项目的时候要注意AccessToken每隔一个星期就会改变一次
* */
String accessToken="at.d*******************************3mn";
EZOpenSDK.getInstance().setAccessToken(accessToken);
mRealPlaySv=(SurfaceView)findViewById(R.id.remoteplayback_sv);
mRealPlaySh = mRealPlaySv.getHolder();
mRealPlaySh.addCallback(this);
new Thread() {
@Override
public void run() {
super.run();
try {
mDeviceInfoList = EZOpenSDK.getInstance().getDeviceList(0, 20);
mHandler.sendEmptyMessage(MSG_ON_DEVICE_RESPONSE);
} catch (BaseException e) {
e.printStackTrace();
}
}
}.start();
}
/**
* 通过ezdevice 得到其中通道信息
* @param deviceInfo
* @return
*/
public static EZCameraInfo getCameraInfoFromDevice(EZDeviceInfo deviceInfo, int camera_index) {
if (deviceInfo == null) {
return null;
}
if (deviceInfo.getCameraNum() > 0 && deviceInfo.getCameraInfoList() != null && deviceInfo.getCameraInfoList().size() > camera_index) {
return deviceInfo.getCameraInfoList().get(camera_index);
}
return null;
}
private void startPlay() {
EZDeviceInfo deviceInfo = null;
for (EZDeviceInfo ezDeviceInfo : mDeviceInfoList) {
Log.d("EZDeviceInfo", ezDeviceInfo.getDeviceName() + ";;SN=" + ezDeviceInfo.getDeviceSerial() + ";; type=" + ezDeviceInfo.getDeviceType());
//比较的自己的摄像头底部上写的序列号
if (serialNo.equals(ezDeviceInfo.getDeviceSerial())) {
deviceInfo = ezDeviceInfo;
break;
}
}
if(deviceInfo == null){
return;
}
//获取使用的摄像头信息
EZCameraInfo cameraInfo = getCameraInfoFromDevice(deviceInfo,0);
        //创建播放器对象
mEZPlayer = EZOpenSDK.getInstance().createPlayer(cameraInfo.getDeviceSerial(), cameraInfo.getCameraNo());
if (mEZPlayer == null)
return;
if (cameraInfo == null) {
return;
}
//设置handler,该handler被用于从播放器向handler传递消息
mEZPlayer.setHandler(mHandler);
        //设置播放器显示的surface
mEZPlayer.setSurfaceHold(mRealPlaySh);
        //开始播放
mEZPlayer.startRealPlay();
//视频的加密密码,默认为摄像头的验证码
mEZPlayer.setPlayVerifyCode(code);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (mEZPlayer != null) {
mEZPlayer.setSurfaceHold(holder);
}
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;
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case MSG_ON_DEVICE_RESPONSE:
                   //开始播放
startPlay();
break;
}
}
};
}
 

4.6 代码效果

案例地址:https://pan.baidu.com/s/1vkin5U1S9OzBIwb1L3p9Iw

提取码:54ln

gitlab源码地址

https://git.lug.ustc.edu.cn/sunshine_0707/ezviz

人已赞赏
Android文章

Android开发备忘录模式(java)

2021-2-1 16:45:25

Android文章

Android开发百度离线人脸识别小案例

2021-2-1 17:39:53

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索