android 接入萤石视频案例

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

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

android 接入萤石视频案例_第1张图片

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

摄像头:

android 接入萤石视频案例_第2张图片

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

android 接入萤石视频案例_第3张图片

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

       4.1 安装sdk

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

       4.2 在AndroidManifest.xml里添加权限
            

          //网络权限
         
       
       
       

          //存储权限
       

          //wifi 状态权限
       
       
       

       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初始化流程

android 接入萤石视频案例_第4张图片

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

//对于accessToken,要从网络上获取
StringRequest request = new StringRequest(Request.Method.POST, "https://open.ys7.com/***********/get",
        new Response.Listener() {
            @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 getParams() throws AuthFailureError {
                        Map hashMap = new HashMap();
                        //将请求参数名与参数值放入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 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 代码效果

android 接入萤石视频案例_第5张图片

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

提取码:54ln

gitlab源码地址

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

   

你可能感兴趣的:(android 接入萤石视频案例)