zoukankan      html  css  js  c++  java
  • Android 伤敌一千自损八百之萤石摄像头集成(三)

    说一下萤石原生播放

    先上代码

    private MyOrientationDetector mOrientationDetector;
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
                    WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_main);
    
            if (TextUtils.isEmpty(appkey)
                    || TextUtils.isEmpty(accesstoken)
                    || TextUtils.isEmpty(playUrl)){
                Toast.makeText(this,"appkey,accesstoken or playUrl is null",Toast.LENGTH_LONG).show();
                finish();
                return;
            }
            mOrientationDetector = new MyOrientationDetector(this);
            new WindowSizeChangeNotifier(this, this);
            mBtnPlay = (Button) findViewById(R.id.btn_play);
       
            //获取EZUIPlayer实例
            mEZUIPlayer = (EZUIPlayer) findViewById(R.id.player_ui);
            //设置加载需要显示的view
            mEZUIPlayer.setLoadingView(initProgressBar());
            mEZUIPlayer.setRatio(16*1.0f/9);
    
            mBtnPlay.setOnClickListener(this);
            mBtnPlay.setText(R.string.string_stop_play);
            preparePlay();
            setSurfaceSize();
        }
      /**
         * 创建加载view
         * @return
         */
        private View initProgressBar() {
            RelativeLayout relativeLayout = new RelativeLayout(this);
            relativeLayout.setBackgroundColor(Color.parseColor("#000000"));
            RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
            relativeLayout.setLayoutParams(lp);
            RelativeLayout.LayoutParams rlp=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
            rlp.addRule(RelativeLayout.CENTER_IN_PARENT);//addRule参数对应RelativeLayout XML布局的属性
            ProgressBar mProgressBar = new ProgressBar(this);
            mProgressBar.setIndeterminateDrawable(getResources().getDrawable(R.drawable.progress));
            relativeLayout.addView(mProgressBar,rlp);
            return relativeLayout;
        }
    
        /**
         * 准备播放资源参数
         */
        private void preparePlay(){
            //设置debug模式,输出log信息
            EZUIKit.setDebug(true);
            if (TextUtils.isEmpty(mGlobalAreaDomain)) {
                //appkey初始化
                EZUIKit.initWithAppKey(this.getApplication(), appkey);
    
            }else{
                //appkey初始化 海外版本
                EZUIKit.initWithAppKeyGlobal(this.getApplication(), appkey,mGlobalAreaDomain);
            }
    
            if (!TextUtils.isEmpty(API_URL)){
                EzvizAPI.getInstance().setServerUrl(API_URL,  null);
            }
    
            //设置授权accesstoken
            EZUIKit.setAccessToken(accesstoken);
    
    
    //        EZPlayer player  = EZOpenSDK.getInstance().createPlayer(String deviceSerial,int cameraNo);
    //
    //        EZOpenSDK.getInstance().createPlayer("D95658258",1).setPlayVerifyCode("PNXFPY");
    
    
            //设置播放资源参数
            mEZUIPlayer.setCallBack(this);
            mEZUIPlayer.setUrl(playUrl);
    
            //try {
            //    EZOpenSDK.getInstance().openCloudPage("504242549");
            //} catch (BaseException e) {
            //    e.printStackTrace();
            //}
        }
        @Override
        protected void onResume() {
            super.onResume();
            mOrientationDetector.enable();
            Log.d(TAG,"onResume");
            //界面stop时,如果在播放,那isResumePlay标志位置为true,resume时恢复播放
            if (isResumePlay) {
                isResumePlay = false;
                mBtnPlay.setText(R.string.string_stop_play);
                mEZUIPlayer.startPlay();
            }
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            mOrientationDetector.disable();
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            Log.d(TAG,"onStop + "+mEZUIPlayer.getStatus());
            //界面stop时,如果在播放,那isResumePlay标志位置为true,以便resume时恢复播放
            if (mEZUIPlayer.getStatus() != EZUIPlayer.STATUS_STOP) {
                isResumePlay = true;
            }
            //停止播放
            mEZUIPlayer.stopPlay();
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            Log.d(TAG,"onDestroy");
    
            //释放资源
            mEZUIPlayer.releasePlayer();
        }
    
        @Override
        public void onPlaySuccess() {
            Log.d(TAG,"onPlaySuccess");
            // TODO: 2017/2/7 播放成功处理
            mBtnPlay.setText(R.string.string_pause_play);
        }
    
        @Override
        public void onPlayFail(EZUIError error) {
            Log.d(TAG,"onPlayFail");
            // TODO: 2017/2/21 播放失败处理
            if (error.getErrorString().equals(EZUIError.UE_ERROR_INNER_VERIFYCODE_ERROR)){
    
            }else if(error.getErrorString().equalsIgnoreCase(EZUIError.UE_ERROR_NOT_FOUND_RECORD_FILES)){
                // TODO: 2017/5/12
                //未发现录像文件
                Toast.makeText(this,getString(R.string.string_not_found_recordfile),Toast.LENGTH_LONG).show();
            }
        }
    
        private int width;
        private int height;
    
        @Override
        public void onVideoSizeChange(int width, int height) {
            // TODO: 2017/2/16 播放视频分辨率回调
            Log.d(TAG,"onVideoSizeChange  width = "+width+"   height = "+height);
        }
    
        @Override
        public void onPrepared() {
            Log.d(TAG,"onPrepared");
            //播放
            mEZUIPlayer.startPlay();
        }
    
        @Override
        public void onPlayTime(Calendar calendar) {
            //Log.d(TAG,"onPlayTime");
            if (calendar != null) {
                // TODO: 2017/2/16 当前播放时间
                //Log.d(TAG,"onPlayTime calendar = "+calendar.getTime().toString());
            }
        }
    
        @Override
        public void onPlayFinish() {
            // TODO: 2017/2/16 播放结束
            Log.d(TAG,"onPlayFinish");
        }
    
    
    
        /**
         * 屏幕旋转时调用此方法
         */
        @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
            Log.d(TAG,"onConfigurationChanged");
            setSurfaceSize();
        }
    
        private void setSurfaceSize(){
            DisplayMetrics dm = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(dm);
            boolean isWideScrren = mOrientationDetector.isWideScrren();
            Log.d(TAG,"isWideScrren  = "+isWideScrren +"    dm.widthPixels = "+dm.widthPixels+"   dm.heightPixels =  "+dm.heightPixels);
            //竖屏
            if (!isWideScrren) {
                //竖屏调整播放区域大小,宽全屏,高根据视频分辨率自适应
                if (width == 0 ){
                    mEZUIPlayer.setSurfaceSize(dm.widthPixels, 0);
                }else{
                    mEZUIPlayer.setSurfaceSize(dm.widthPixels, height*dm.widthPixels/width);
                }
            } else {
                //横屏屏调整播放区域大小,宽、高均全屏,播放区域根据视频分辨率自适应
                mEZUIPlayer.setSurfaceSize(dm.widthPixels,dm.heightPixels);
            }
        }
    
        @Override
        public void onWindowSizeChanged(int w, int h, int oldW, int oldH) {
            if (mEZUIPlayer != null) {
                setSurfaceSize();
            }
        }
    
        public class MyOrientationDetector extends OrientationEventListener {
    
            private WindowManager mWindowManager;
            private int mLastOrientation = 0;
    
            public MyOrientationDetector(Context context) {
                super(context);
                mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
            }
    
            public boolean isWideScrren() {
                Display display = mWindowManager.getDefaultDisplay();
                Point pt = new Point();
                display.getSize(pt);
                return pt.x > pt.y;
            }
            @Override
            public void onOrientationChanged(int orientation) {
                int value = getCurentOrientationEx(orientation);
                if (value != mLastOrientation) {
                    mLastOrientation = value;
                    int current = getRequestedOrientation();
                    if (current == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
                            || current == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
                    }
                }
            }
    
            private int getCurentOrientationEx(int orientation) {
                int value = 0;
                if (orientation >= 315 || orientation < 45) {
                    // 0度
                    value = 0;
                    return value;
                }
                if (orientation >= 45 && orientation < 135) {
                    // 90度
                    value = 90;
                    return value;
                }
                if (orientation >= 135 && orientation < 225) {
                    // 180度
                    value = 180;
                    return value;
                }
                if (orientation >= 225 && orientation < 315) {
                    // 270度
                    value = 270;
                    return value;
                }
                return value;
            }
        }
    

     

    public static final String APPKEY = "";
    public static final String AccessToekn = "";
    public static final String PLAY_URL = "";

    这里
    APPKEY 、
    AccessToekn 是萤石平台申请的
    PLAY_URL 是拼接的//萤石平台拼接方法链接  https://open.ys7.com/doc/zh/readme/ezopen.html
    萤石到此为止,特此记录,
    免得下次忘了还得看sdk
    日常许愿5星曹大爷刘大爷+毒奶粉《神话equipment》

  • 相关阅读:
    python学习笔记--Django入门一 网页显示时间
    python学习笔记--easy_install和pip
    python学习笔记--Django入门0 安装dangjo
    Linux学习笔记总结--memcached配置
    python学习笔记--基础语法
    python学习笔记--导入tab键自动补全功能的配置
    Linux学习笔记总结--ssh认证登录
    ABAP 通过字段找表程序
    smod包含具体的增强(具体实施对象) / CMOD 包含一组smod编写的增强
    SE18 BADI定义 / SE19 BADI 实现
  • 原文地址:https://www.cnblogs.com/leshen/p/12627445.html
Copyright © 2011-2022 走看看