/* * @ProjectName VideoGo * @Copyright null * * @FileName RealPlayActivity.java * @Description 这里对文件进行描述 * * @author chenxingyf1 * @data 2014-6-11 * * @note 这里写本文件的详细功能描述和注释 * @note 历史记录 * * @warning 这里写本文件的相关警告 */ package com.videogo.ui.realplay; import android.Manifest; import android.annotation.SuppressLint; import android.app.Application; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.SystemClock; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnKeyListener; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.view.WindowManager; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.TranslateAnimation; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.HorizontalScrollView; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.PopupWindow.OnDismissListener; import android.widget.RelativeLayout; import android.widget.RelativeLayout.LayoutParams; import android.widget.TextView; import android.widget.Toast; import com.ezviz.demo.common.DataTimeUtil; import com.videogo.EzvizApplication; import ezviz.ezopensdkcommon.common.RootActivity; import com.videogo.constant.Config; import com.videogo.constant.Constant; import com.videogo.constant.IntentConsts; import com.videogo.errorlayer.ErrorInfo; import com.videogo.exception.BaseException; import com.videogo.exception.ErrorCode; import com.videogo.exception.InnerException; import com.videogo.openapi.EZConstants; import com.videogo.openapi.EZConstants.EZPTZAction; import com.videogo.openapi.EZConstants.EZPTZCommand; import com.videogo.openapi.EZConstants.EZRealPlayConstants; import com.videogo.openapi.EZConstants.EZVideoLevel; import com.videogo.openapi.EZOpenSDKListener; import com.videogo.openapi.EZPlayer; import com.videogo.openapi.bean.EZCameraInfo; import com.videogo.openapi.bean.EZDeviceInfo; import com.videogo.openapi.bean.EZVideoQualityInfo; import com.videogo.realplay.RealPlayStatus; import com.videogo.ui.cameralist.EZCameraListActivity; import com.videogo.ui.common.ScreenOrientationHelper; import com.videogo.ui.util.ActivityUtils; import com.videogo.ui.util.AudioPlayUtil; import com.videogo.ui.util.DataManager; import com.videogo.ui.util.EZUtils; import com.videogo.ui.util.VerifyCodeInput; import com.videogo.util.ConnectionDetector; import com.videogo.util.DateTimeUtil; import com.videogo.util.LocalInfo; import com.videogo.util.LogUtil; import com.videogo.util.MediaScanner; import com.videogo.util.RotateViewUtil; import com.videogo.util.SDCardUtil; import com.videogo.util.Utils; import com.videogo.widget.CheckTextButton; import com.videogo.widget.CustomRect; import com.videogo.widget.CustomTouchListener; import com.videogo.widget.RingView; import com.videogo.widget.TitleBar; import com.videogo.widget.WaitDialog; import com.videogo.widget.loading.LoadingTextView; import org.MediaPlayer.PlayM4.Player; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Calendar; import java.util.Random; import java.util.Timer; import java.util.TimerTask; import ezviz.ezopensdk.debug.VideoFileUtil; import ezviz.ezopensdk.demo.DemoConfig; import ezviz.ezopensdk.R; import static com.videogo.openapi.EZConstants.MSG_GOT_STREAM_TYPE; import static com.videogo.openapi.EZConstants.MSG_VIDEO_SIZE_CHANGED; public class EZRealPlayActivity extends RootActivity implements OnClickListener, SurfaceHolder.Callback, Handler.Callback, OnTouchListener, VerifyCodeInput.VerifyCodeInputListener { private static final String TAG = EZRealPlayActivity.class.getSimpleName(); private static final int ANIMATION_DURING_TIME = 500; // UI消息 public static final int MSG_PLAY_UI_UPDATE = 200; public static final int MSG_AUTO_START_PLAY = 202; public static final int MSG_CLOSE_PTZ_PROMPT = 203; public static final int MSG_HIDE_PTZ_DIRECTION = 204; public static final int MSG_HIDE_PAGE_ANIM = 205; public static final int MSG_PLAY_UI_REFRESH = 206; public static final int MSG_PREVIEW_START_PLAY = 207; public static final int MSG_SET_VEDIOMODE_SUCCESS = 105; public static final int MSG_SET_VEDIOMODE_FAIL = 106; private String mRtspUrl = null; private RealPlaySquareInfo mRealPlaySquareInfo = null; private AudioPlayUtil mAudioPlayUtil = null; private LocalInfo mLocalInfo = null; private Handler mHandler = null; private float mRealRatio = Constant.LIVE_VIEW_RATIO; private int mStatus = RealPlayStatus.STATUS_INIT; private boolean mIsOnStop = false; private int mOrientation = Configuration.ORIENTATION_PORTRAIT; private int mForceOrientation = 0; private Rect mRealPlayRect = null; private LinearLayout mRealPlayPageLy = null; private TitleBar mPortraitTitleBar = null; private TitleBar mLandscapeTitleBar = null; private Button mTiletRightBtn = null; private RelativeLayout mRealPlayPlayRl = null; private SurfaceView mRealPlaySv = null; private SurfaceHolder mRealPlaySh = null; private CustomTouchListener mRealPlayTouchListener = null; private RelativeLayout mRealPlayLoadingRl; private TextView mRealPlayTipTv; private ImageView mRealPlayPlayIv; private LoadingTextView mRealPlayPlayLoading; private LinearLayout mRealPlayPlayPrivacyLy; private ImageView mPageAnimIv = null; private AnimationDrawable mPageAnimDrawable = null; private LinearLayout mRealPlayControlRl = null; private ImageButton mRealPlayBtn = null; private ImageButton mRealPlaySoundBtn = null; private TextView mRealPlayFlowTv = null; private int mControlDisplaySec = 0; // 播放比例 Play ratio private float mPlayScale = 1; private RelativeLayout mRealPlayCaptureRl = null; private LayoutParams mRealPlayCaptureRlLp = null; private ImageView mRealPlayCaptureIv = null; private ImageView mRealPlayCaptureWatermarkIv = null; private int mCaptureDisplaySec = 0; private LinearLayout mRealPlayRecordLy = null; private ImageView mRealPlayRecordIv = null; private TextView mRealPlayRecordTv = null; private boolean isRecording = false; private String mRecordTime = null; private int mRecordSecond = 0; private HorizontalScrollView mRealPlayOperateBar = null; private LinearLayout mRealPlayPtzBtnLy = null; private LinearLayout mRealPlayTalkBtnLy = null; private LinearLayout mRealPlaySslBtnLy = null; // private LinearLayout mRealPlayPrivacyBtnLy = null; private LinearLayout mRealPlayCaptureBtnLy = null; private LinearLayout mRealPlayRecordContainerLy = null; private ImageButton mRealPlayPtzBtn = null; private ImageButton mRealPlayTalkBtn = null; private Button mRealPlaySslBtn = null; private ImageButton mRealPlayPrivacyBtn = null; private ImageButton mRealPlayCaptureBtn = null; private View mRealPlayRecordContainer = null; private ImageButton mRealPlayRecordBtn = null; private ImageButton mRealPlayRecordStartBtn = null; private RotateViewUtil mRecordRotateViewUtil = null; private Button mRealPlayQualityBtn = null; private RelativeLayout mRealPlayFullOperateBar = null; private ImageButton mRealPlayFullPlayBtn = null; private ImageButton mRealPlayFullSoundBtn = null; private ImageButton mRealPlayFullTalkBtn = null; private ImageButton mRealPlayFullCaptureBtn = null; private ImageButton mRealPlayFullPtzBtn = null; private ImageButton mRealPlayFullRecordBtn = null; private ImageButton mRealPlayFullRecordStartBtn = null; private View mRealPlayFullRecordContainer = null; private LinearLayout mRealPlayFullFlowLy = null; private TextView mRealPlayFullRateTv = null; private TextView mRealPlayFullFlowTv = null; private TextView mRealPlayRatioTv = null; private ImageButton mRealPlayFullPtzAnimBtn = null; private ImageView mRealPlayFullPtzPromptIv = null; private boolean mIsOnPtz = false; private ImageView mRealPlayPtzDirectionIv = null; private ImageButton mRealPlayFullAnimBtn = null; private int[] mStartXy = new int[2]; private int[] mEndXy = new int[2]; private PopupWindow mQualityPopupWindow = null; private PopupWindow mPtzPopupWindow = null; private LinearLayout mPtzControlLy = null; private PopupWindow mTalkPopupWindow = null; private RingView mTalkRingView = null; private Button mTalkBackControlBtn = null; private WaitDialog mWaitDialog = null; private RealPlayBroadcastReceiver mBroadcastReceiver = null; private Timer mUpdateTimer = null; private TimerTask mUpdateTimerTask = null; // 全屏按钮 Full screen button private CheckTextButton mFullscreenButton; private CheckTextButton mFullscreenFullButton; private ScreenOrientationHelper mScreenOrientationHelper; // 弱提示预览信息 Weak prompt preview information private long mStartTime = 0; private long mStopTime = 0; // 云台控制状态 PTZ control status private float mZoomScale = 0; private int mCommand = -1; // 横屏对讲 Cross screen intercom private ImageButton mRealPlayFullTalkAnimBtn; // 对讲模式 Talkback mode private boolean mIsOnTalk = false; // 直播预告 Live announcements private TextView mRealPlayPreviewTv = null; private EZPlayer mEZPlayer = null; // private StubPlayer mStub = new StubPlayer(); private CheckTextButton mFullScreenTitleBarBackBtn; private EZVideoLevel mCurrentQulityMode = EZVideoLevel.VIDEO_LEVEL_HD; private EZDeviceInfo mDeviceInfo = null; private EZCameraInfo mCameraInfo = null; private String mVerifyCode; private long mStreamFlow = 0; private int mRealFlow = 0; // 视频宽高 private int mVideoWidth; private int mVideoHeight; public static void launch(Context context, EZDeviceInfo deviceInfo, EZCameraInfo cameraInfo) { Intent intent = new Intent(context, EZRealPlayActivity.class); intent.putExtra(IntentConsts.EXTRA_CAMERA_INFO, cameraInfo); intent.putExtra(IntentConsts.EXTRA_DEVICE_INFO, deviceInfo); context.startActivity(intent); } public static void launch(Context context, String deviceSerial, int cameraNo) { EZCameraInfo cameraInfo = new EZCameraInfo(); cameraInfo.setDeviceSerial(deviceSerial); cameraInfo.setCameraNo(cameraNo); launch(context, new EZDeviceInfo(), cameraInfo); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initData(); initView(); // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. // client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); } @Override protected void onResume() { super.onResume(); if (mOrientation == Configuration.ORIENTATION_LANDSCAPE) { return; } new Handler().postDelayed(new Runnable() { @Override public void run() { if (mRealPlaySv != null) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mRealPlaySv.getWindowToken(), 0); } } }, 200); initUI(); //mRealPlaySv.setVisibility(View.VISIBLE); LogUtil.i(TAG, "onResume real play status:" + mStatus); if (mCameraInfo != null && mDeviceInfo != null && mDeviceInfo.getStatus() != 1) { if (mStatus != RealPlayStatus.STATUS_STOP) { stopRealPlay(); } setRealPlayFailUI(getString(R.string.realplay_fail_device_not_exist)); } else { if (mStatus == RealPlayStatus.STATUS_PAUSE || mStatus == RealPlayStatus.STATUS_DECRYPT) { // 开始播放 startRealPlay(); } } mIsOnStop = false; updateQualityBtnVisibility(); } /** * 更新清晰切换按钮可见性 */ private void updateQualityBtnVisibility() { // 获取不到清晰度数据时,不展示清晰度 if (mCameraInfo != null && mCameraInfo.getVideoQualityInfos() != null && mCameraInfo.getVideoQualityInfos().size() > 0) { mRealPlayQualityBtn.setVisibility(View.VISIBLE); } else { mRealPlayQualityBtn.setVisibility(View.INVISIBLE); } } @Override protected void onStart() { super.onStart(); } @Override protected void onStop() { super.onStop(); if (mScreenOrientationHelper != null) { mScreenOrientationHelper.postOnStop(); } mHandler.removeMessages(MSG_AUTO_START_PLAY); hidePageAnim(); if (mCameraInfo == null && mRtspUrl == null) { return; } closePtzPopupWindow(); closeTalkPopupWindow(true, false); if (mStatus != RealPlayStatus.STATUS_STOP) { mIsOnStop = true; stopRealPlay(); mStatus = RealPlayStatus.STATUS_PAUSE; setRealPlayStopUI(); } else { setStopLoading(); } //mRealPlaySv.setVisibility(View.INVISIBLE); } /* * (non-Javadoc) * @see android.app.Activity#onDestroy() */ @Override protected void onDestroy() { super.onDestroy(); if (mEZPlayer != null) { mEZPlayer.release(); } mHandler.removeMessages(MSG_AUTO_START_PLAY); mHandler.removeMessages(MSG_HIDE_PTZ_DIRECTION); mHandler.removeMessages(MSG_CLOSE_PTZ_PROMPT); mHandler.removeMessages(MSG_HIDE_PAGE_ANIM); mHandler = null; if (mBroadcastReceiver != null) { // 取消锁屏广播的注册 Cancel the registration of the lock screen broadcast unregisterReceiver(mBroadcastReceiver); mBroadcastReceiver = null; } mScreenOrientationHelper = null; } private void exit() { closePtzPopupWindow(); closeTalkPopupWindow(true, false); if (mStatus != RealPlayStatus.STATUS_STOP) { stopRealPlay(); setRealPlayStopUI(); } mHandler.removeMessages(MSG_AUTO_START_PLAY); mHandler.removeMessages(MSG_HIDE_PTZ_DIRECTION); mHandler.removeMessages(MSG_CLOSE_PTZ_PROMPT); mHandler.removeMessages(MSG_HIDE_PAGE_ANIM); if (mBroadcastReceiver != null) { // Cancel the registration of the lock screen broadcast unregisterReceiver(mBroadcastReceiver); mBroadcastReceiver = null; } finish(); } @Override public void finish() { if (mCameraInfo != null) { Intent intent = new Intent(); intent.putExtra(IntentConsts.EXTRA_DEVICE_ID, mCameraInfo.getDeviceSerial()); intent.putExtra(IntentConsts.EXTRA_CAMERA_NO, mCameraInfo.getCameraNo()); intent.putExtra("video_level", mCameraInfo.getVideoLevel().getVideoLevel()); setResult(EZCameraListActivity.RESULT_CODE, intent); } super.finish(); } @Override public void onBackPressed() { if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_PORTRAIT) { mScreenOrientationHelper.portrait(); return; } exit(); } private void initData() { Application application = (Application) getApplication(); mAudioPlayUtil = AudioPlayUtil.getInstance(application); mLocalInfo = LocalInfo.getInstance(); DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metric); mLocalInfo.setScreenWidthHeight(metric.widthPixels, metric.heightPixels); mLocalInfo.setNavigationBarHeight((int) Math.ceil(25 * getResources().getDisplayMetrics().density)); mHandler = new Handler(this); mRecordRotateViewUtil = new RotateViewUtil(); mBroadcastReceiver = new RealPlayBroadcastReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_USER_PRESENT); filter.addAction(Intent.ACTION_SCREEN_OFF); registerReceiver(mBroadcastReceiver, filter); mRealPlaySquareInfo = new RealPlaySquareInfo(); Intent intent = getIntent(); if (intent != null) { mCameraInfo = intent.getParcelableExtra(IntentConsts.EXTRA_CAMERA_INFO); mDeviceInfo = intent.getParcelableExtra(IntentConsts.EXTRA_DEVICE_INFO); mRtspUrl = intent.getStringExtra(IntentConsts.EXTRA_RTSP_URL); if (mCameraInfo != null) { mCurrentQulityMode = (mCameraInfo.getVideoLevel()); } LogUtil.d(TAG, "rtspUrl:" + mRtspUrl); getRealPlaySquareInfo(); } if (mDeviceInfo != null && mDeviceInfo.getIsEncrypt() == 1) { mVerifyCode = DataManager.getInstance().getDeviceSerialVerifyCode(mCameraInfo.getDeviceSerial()); } } private void getRealPlaySquareInfo() { if (TextUtils.isEmpty(mRtspUrl)) { return; } Uri uri = Uri.parse(mRtspUrl.replaceFirst("&", "?")); try { mRealPlaySquareInfo.mSquareId = Integer.parseInt(uri.getQueryParameter("squareid")); } catch (NumberFormatException e) { e.printStackTrace(); } try { mRealPlaySquareInfo.mChannelNo = Integer.parseInt(Utils.getUrlValue(mRtspUrl, "channelno=", "&")); } catch (NumberFormatException e) { e.printStackTrace(); } mRealPlaySquareInfo.mCameraName = uri.getQueryParameter("cameraname"); try { mRealPlaySquareInfo.mSoundType = Integer.parseInt(uri.getQueryParameter("soundtype")); } catch (NumberFormatException e) { e.printStackTrace(); } mRealPlaySquareInfo.mCoverUrl = uri.getQueryParameter("md5Serial"); if (!TextUtils.isEmpty(mRealPlaySquareInfo.mCoverUrl)) { mRealPlaySquareInfo.mCoverUrl = mLocalInfo.getServAddr() + mRealPlaySquareInfo.mCoverUrl + "_mobile.jpeg"; } } private boolean isHandset = false; public void onClickSwitchBetweenSpeakerAndHandset(View view) { Button switchButton = (Button) view; if (isHandset) { if (mEZPlayer != null) { mEZPlayer.setSpeakerphoneOn(true); } switchButton.setText(getResources().getString(R.string.switch_to_handset)); isHandset = false; } else { if (mEZPlayer != null) { mEZPlayer.setSpeakerphoneOn(false); } switchButton.setText(getResources().getString(R.string.switch_to_speaker)); isHandset = true; } } private class RealPlayBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) { closePtzPopupWindow(); closeTalkPopupWindow(true, false); if (mStatus != RealPlayStatus.STATUS_STOP) { stopRealPlay(); mStatus = RealPlayStatus.STATUS_PAUSE; setRealPlayStopUI(); } } } } private void initTitleBar() { mPortraitTitleBar = (TitleBar) findViewById(R.id.title_bar_portrait); mPortraitTitleBar.addBackButton(new OnClickListener() { @Override public void onClick(View v) { closePtzPopupWindow(); closeTalkPopupWindow(true, false); if (mStatus != RealPlayStatus.STATUS_STOP) { stopRealPlay(); setRealPlayStopUI(); } finish(); } }); if (mRtspUrl == null) { } else { //mPortraitTitleBar.setBackgroundColor(getResources().getColor(R.color.black_bg)); } mLandscapeTitleBar = (TitleBar) findViewById(R.id.title_bar_landscape); mLandscapeTitleBar.setStyle(Color.rgb(0xff, 0xff, 0xff), getResources().getDrawable(R.color.dark_bg_70p), getResources().getDrawable(R.drawable.message_back_selector)); mLandscapeTitleBar.setOnTouchListener(this); mFullScreenTitleBarBackBtn = new CheckTextButton(this); mFullScreenTitleBarBackBtn.setBackground(getResources().getDrawable(R.drawable.common_title_back_selector)); mLandscapeTitleBar.addLeftView(mFullScreenTitleBarBackBtn); } private void initRealPlayPageLy() { mRealPlayPageLy = (LinearLayout) findViewById(R.id.realplay_page_ly); /** 测量状态栏高度 Measure the status bar height**/ ViewTreeObserver viewTreeObserver = mRealPlayPageLy.getViewTreeObserver(); viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { if (mRealPlayRect == null) { // 获取状况栏高度 mRealPlayRect = new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(mRealPlayRect); } } }); } private void initView() { setContentView(R.layout.ez_realplay_page); //保持屏幕常亮 Keep the screen on getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); initTitleBar(); initRealPlayPageLy(); initLoadingUI(); mRealPlayPlayRl = (RelativeLayout) findViewById(R.id.realplay_play_rl); mRealPlaySv = (SurfaceView) findViewById(R.id.realplay_sv); mRealPlaySh = mRealPlaySv.getHolder(); mRealPlaySh.addCallback(this); mRealPlayTouchListener = new CustomTouchListener() { @Override public boolean canZoom(float scale) { if (mStatus == RealPlayStatus.STATUS_PLAY) { return true; } else { return false; } } @Override public boolean canDrag(int direction) { if (mStatus != RealPlayStatus.STATUS_PLAY) { return false; } if (mEZPlayer != null && mDeviceInfo != null) { // 出界判断 Out of bounds if (DRAG_LEFT == direction || DRAG_RIGHT == direction) { // 左移/右移出界判断 Left / right out of bounds if (mDeviceInfo.isSupportPTZ()) { return true; } } else if (DRAG_UP == direction || DRAG_DOWN == direction) { // 上移/下移出界判断 Move up / down to judge if (mDeviceInfo.isSupportPTZ()) { return true; } } } return false; } @Override public void onSingleClick() { onRealPlaySvClick(); } @Override public void onDoubleClick(View v, MotionEvent e) { LogUtil.d(TAG, "onDoubleClick:"); changeZoomStatus(v, e); } @Override public void onZoom(float scale) { LogUtil.d(TAG, "onZoom:" + scale); if (mEZPlayer != null && mDeviceInfo != null && mDeviceInfo.isSupportZoom()) { startZoom(scale); } } @Override public void onDrag(int direction, float distance, float rate) { LogUtil.d(TAG, "onDrag:" + direction); if (mEZPlayer != null) { startDrag(direction, distance, rate); } } @Override public void onEnd(int mode) { LogUtil.d(TAG, "onEnd:" + mode); if (mEZPlayer != null) { stopDrag(false); } if (mEZPlayer != null && mDeviceInfo != null && mDeviceInfo.isSupportZoom()) { stopZoom(); } } @Override public void onZoomChange(float scale, CustomRect oRect, CustomRect curRect) { LogUtil.d(TAG, "onZoomChange:"); } /** * 未放大情况下,以双击点位置为坐标原点将画面放大2倍 * 已放大情况下,取消画面放大效果 */ @SuppressWarnings("PointlessArithmeticExpression") private void changeZoomStatus(View v, MotionEvent e) { if (hasZoomIn) { int invalid = -1; mEZPlayer.setDisplayRegion(invalid, invalid, invalid, invalid); } else { // x轴方向 double xOffsetRateOfAnchor = (e.getX() / (double) v.getWidth()) - 0.5; int left = (int) (mVideoWidth / 4 * 1 + xOffsetRateOfAnchor * mVideoWidth); int right = (int) (mVideoWidth / 4 * 3 + +xOffsetRateOfAnchor * mVideoWidth); if (left < 0) { // left超出边界,需要修正 left = 0; right = mVideoWidth / 2; } if (right > mVideoWidth) { // right超出边界,需要修正 right = mVideoWidth; left = mVideoWidth / 2; } // y轴方向 double yOffsetRateOfAnchor = (e.getY() / (double) v.getHeight()) - 0.5; int top = (int) (mVideoHeight / 4 * 1 + yOffsetRateOfAnchor * mVideoHeight); int bottom = (int) (mVideoHeight / 4 * 3 + +yOffsetRateOfAnchor * mVideoHeight); if (top < 0) { // top超出边界,需要修正 top = 0; bottom = mVideoHeight / 2; } if (bottom > mVideoHeight) { // bottom超出边界,需要修正 bottom = mVideoHeight; top = mVideoHeight / 2; } // 设置坐标 mEZPlayer.setDisplayRegion(left, top, right, bottom); } hasZoomIn = !hasZoomIn; } private boolean hasZoomIn; }; mRealPlaySv.setOnTouchListener(mRealPlayTouchListener); mRealPlayPtzDirectionIv = (ImageView) findViewById(R.id.realplay_ptz_direction_iv); mRealPlayControlRl = (LinearLayout) findViewById(R.id.realplay_control_rl); mRealPlayBtn = (ImageButton) findViewById(R.id.realplay_play_btn); mRealPlaySoundBtn = (ImageButton) findViewById(R.id.realplay_sound_btn); mRealPlayFlowTv = (TextView) findViewById(R.id.realplay_flow_tv); mRealPlayFlowTv.setText("0k/s"); mRealPlayCaptureRl = (RelativeLayout) findViewById(R.id.realplay_capture_rl); mRealPlayCaptureRlLp = (LayoutParams) mRealPlayCaptureRl.getLayoutParams(); mRealPlayCaptureIv = (ImageView) findViewById(R.id.realplay_capture_iv); mRealPlayCaptureWatermarkIv = (ImageView) findViewById(R.id.realplay_capture_watermark_iv); mRealPlayRecordLy = (LinearLayout) findViewById(R.id.realplay_record_ly); mRealPlayRecordIv = (ImageView) findViewById(R.id.realplay_record_iv); mRealPlayRecordTv = (TextView) findViewById(R.id.realplay_record_tv); mRealPlayQualityBtn = (Button) findViewById(R.id.realplay_quality_btn); mRealPlayFullFlowLy = (LinearLayout) findViewById(R.id.realplay_full_flow_ly); mRealPlayFullRateTv = (TextView) findViewById(R.id.realplay_full_rate_tv); mRealPlayFullFlowTv = (TextView) findViewById(R.id.realplay_full_flow_tv); mRealPlayRatioTv = (TextView) findViewById(R.id.realplay_ratio_tv); mRealPlayFullRateTv.setText("0k/s"); mRealPlayFullFlowTv.setText("0MB"); mFullscreenButton = (CheckTextButton) findViewById(R.id.fullscreen_button); mFullscreenFullButton = (CheckTextButton) findViewById(R.id.fullscreen_full_button); if (mRtspUrl == null) { initOperateBarUI(false); initFullOperateBarUI(); mRealPlayOperateBar.setVisibility(View.VISIBLE); } else { //mRealPlayPageLy.setBackgroundColor(getResources().getColor(R.color.black_bg)); LinearLayout.LayoutParams realPlayPlayRlLp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); realPlayPlayRlLp.gravity = Gravity.CENTER; //mj 2015/11/01 realPlayPlayRlLp.weight = 1; mRealPlayPlayRl.setLayoutParams(realPlayPlayRlLp); mRealPlayPlayRl.setBackgroundColor(getResources().getColor(R.color.common_bg)); } setRealPlaySvLayout(); initCaptureUI(); mScreenOrientationHelper = new ScreenOrientationHelper(this, mFullscreenButton, /*mFullscreenFullButton*/mFullScreenTitleBarBackBtn); mWaitDialog = new WaitDialog(this, android.R.style.Theme_Translucent_NoTitleBar); mWaitDialog.setCancelable(false); } public void startDrag(int direction, float distance, float rate) { } public void stopDrag(boolean control) { } private void startZoom(float scale) { if (mEZPlayer == null) { return; } hideControlRlAndFullOperateBar(false); boolean preZoomIn = mZoomScale > 1.01 ? true : false; boolean zoomIn = scale > 1.01 ? true : false; if (mZoomScale != 0 && preZoomIn != zoomIn) { LogUtil.d(TAG, "startZoom stop:" + mZoomScale); // mEZOpenSDK.controlPTZ(mZoomScale > 1.01 ? RealPlayStatus.PTZ_ZOOMIN // : RealPlayStatus.PTZ_ZOOMOUT, RealPlayStatus.PTZ_SPEED_DEFAULT, EZPlayer.PTZ_COMMAND_STOP); mZoomScale = 0; } if (scale != 0 && (mZoomScale == 0 || preZoomIn != zoomIn)) { mZoomScale = scale; LogUtil.d(TAG, "startZoom start:" + mZoomScale); // mEZOpenSDK.controlPTZ(mZoomScale > 1.01 ? RealPlayStatus.PTZ_ZOOMIN // : RealPlayStatus.PTZ_ZOOMOUT, RealPlayStatus.PTZ_SPEED_DEFAULT, EZPlayer.PTZ_COMMAND_START); } } private void stopZoom() { if (mEZPlayer == null) { return; } if (mZoomScale != 0) { LogUtil.d(TAG, "stopZoom stop:" + mZoomScale); // mEZOpenSDK.controlPTZ(mZoomScale > 1.01 ? RealPlayStatus.PTZ_ZOOMIN // : RealPlayStatus.PTZ_ZOOMOUT, RealPlayStatus.PTZ_SPEED_DEFAULT, EZPlayer.PTZ_COMMAND_STOP); mZoomScale = 0; } } private void setPtzDirectionIv(int command) { setPtzDirectionIv(command, 0); } private void setPtzDirectionIv(int command, int errorCode) { if (command != -1 && errorCode == 0) { LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); if (command == RealPlayStatus.PTZ_LEFT) { mRealPlayPtzDirectionIv.setBackgroundResource(R.drawable.left_twinkle); params.addRule(RelativeLayout.CENTER_VERTICAL); params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); mRealPlayPtzDirectionIv.setLayoutParams(params); } else if (command == RealPlayStatus.PTZ_RIGHT) { mRealPlayPtzDirectionIv.setBackgroundResource(R.drawable.right_twinkle); params.addRule(RelativeLayout.CENTER_VERTICAL); params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); mRealPlayPtzDirectionIv.setLayoutParams(params); } else if (command == RealPlayStatus.PTZ_UP) { mRealPlayPtzDirectionIv.setBackgroundResource(R.drawable.up_twinkle); params.addRule(RelativeLayout.CENTER_HORIZONTAL); params.addRule(RelativeLayout.ALIGN_PARENT_TOP); mRealPlayPtzDirectionIv.setLayoutParams(params); } else if (command == RealPlayStatus.PTZ_DOWN) { mRealPlayPtzDirectionIv.setBackgroundResource(R.drawable.down_twinkle); params.addRule(RelativeLayout.CENTER_HORIZONTAL); params.addRule(RelativeLayout.ALIGN_BOTTOM, R.id.realplay_sv); mRealPlayPtzDirectionIv.setLayoutParams(params); } mRealPlayPtzDirectionIv.setVisibility(View.VISIBLE); mHandler.removeMessages(MSG_HIDE_PTZ_DIRECTION); Message msg = new Message(); msg.what = MSG_HIDE_PTZ_DIRECTION; msg.arg1 = 1; mHandler.sendMessageDelayed(msg, 500); } else if (errorCode != 0) { LayoutParams svParams = (LayoutParams) mRealPlaySv.getLayoutParams(); LayoutParams params = null; if (errorCode == ErrorCode.ERROR_CAS_PTZ_ROTATION_LEFT_LIMIT_FAILED) { params = new LayoutParams(LayoutParams.WRAP_CONTENT, svParams.height); mRealPlayPtzDirectionIv.setBackgroundResource(R.drawable.ptz_left_limit); params.addRule(RelativeLayout.CENTER_VERTICAL); params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); mRealPlayPtzDirectionIv.setLayoutParams(params); } else if (errorCode == ErrorCode.ERROR_CAS_PTZ_ROTATION_RIGHT_LIMIT_FAILED) { params = new LayoutParams(LayoutParams.WRAP_CONTENT, svParams.height); mRealPlayPtzDirectionIv.setBackgroundResource(R.drawable.ptz_right_limit); params.addRule(RelativeLayout.CENTER_VERTICAL); params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); mRealPlayPtzDirectionIv.setLayoutParams(params); } else if (errorCode == ErrorCode.ERROR_CAS_PTZ_ROTATION_UP_LIMIT_FAILED) { params = new LayoutParams(svParams.width, LayoutParams.WRAP_CONTENT); mRealPlayPtzDirectionIv.setBackgroundResource(R.drawable.ptz_top_limit); params.addRule(RelativeLayout.CENTER_HORIZONTAL); params.addRule(RelativeLayout.ALIGN_PARENT_TOP); mRealPlayPtzDirectionIv.setLayoutParams(params); } else if (errorCode == ErrorCode.ERROR_CAS_PTZ_ROTATION_DOWN_LIMIT_FAILED) { params = new LayoutParams(svParams.width, LayoutParams.WRAP_CONTENT); mRealPlayPtzDirectionIv.setBackgroundResource(R.drawable.ptz_bottom_limit); params.addRule(RelativeLayout.CENTER_HORIZONTAL); params.addRule(RelativeLayout.ALIGN_BOTTOM, R.id.realplay_sv); mRealPlayPtzDirectionIv.setLayoutParams(params); } mRealPlayPtzDirectionIv.setVisibility(View.VISIBLE); mHandler.removeMessages(MSG_HIDE_PTZ_DIRECTION); Message msg = new Message(); msg.what = MSG_HIDE_PTZ_DIRECTION; msg.arg1 = 1; mHandler.sendMessageDelayed(msg, 500); } else { mRealPlayPtzDirectionIv.setVisibility(View.GONE); mHandler.removeMessages(MSG_HIDE_PTZ_DIRECTION); } } private int getSupportPtz() { if (mEZPlayer == null || mDeviceInfo == null) { return 0; } if (mDeviceInfo.isSupportPTZ() || mDeviceInfo.isSupportZoom()) { return 1; } else { return 0; } } @SuppressWarnings("deprecation") private void initUI() { mPageAnimDrawable = null; mRealPlaySoundBtn.setVisibility(View.VISIBLE); if (mCameraInfo != null) { mPortraitTitleBar.setTitle(mCameraInfo.getCameraName()); mLandscapeTitleBar.setTitle(mCameraInfo.getCameraName()); setCameraInfoTiletRightBtn(); if (mLocalInfo.isSoundOpen()) { mRealPlaySoundBtn.setBackgroundResource(R.drawable.ezopen_vertical_preview_sound_selector); mRealPlayFullSoundBtn.setBackgroundResource(R.drawable.play_full_soundon_btn_selector); } else { mRealPlaySoundBtn.setBackgroundResource(R.drawable.ezopen_vertical_preview_sound_off_selector); mRealPlayFullSoundBtn.setBackgroundResource(R.drawable.play_full_soundoff_btn_selector); } mRealPlayCaptureBtnLy.setVisibility(View.VISIBLE); mRealPlayFullCaptureBtn.setVisibility(View.VISIBLE); mRealPlayRecordContainerLy.setVisibility(View.VISIBLE); mRealPlayFullRecordContainer.setVisibility(View.VISIBLE); mRealPlayFullSoundBtn.setVisibility(View.VISIBLE); mRealPlayFullPtzAnimBtn.setVisibility(View.GONE); mRealPlayFullPtzPromptIv.setVisibility(View.GONE); updateUI(); } else if (mRtspUrl != null) { if (!TextUtils.isEmpty(mRealPlaySquareInfo.mCameraName)) { mPortraitTitleBar.setTitle(mRealPlaySquareInfo.mCameraName); mLandscapeTitleBar.setTitle(mRealPlaySquareInfo.mCameraName); } mRealPlaySoundBtn.setVisibility(View.GONE); } updateQualityBtnVisibility(); if (mOrientation == Configuration.ORIENTATION_LANDSCAPE) { updateOperatorUI(); } } private void setCameraInfoTiletRightBtn() { if (mTiletRightBtn != null && mDeviceInfo != null) { if (mDeviceInfo.getStatus() == 1) { mTiletRightBtn.setVisibility(View.VISIBLE); } else { mTiletRightBtn.setVisibility(View.GONE); } } } private void initOperateBarUI(boolean bigScreen) { bigScreen = false; if (mRealPlayOperateBar != null) { mRealPlayOperateBar.setVisibility(View.GONE); mRealPlayOperateBar = null; } if (bigScreen) { mRealPlayOperateBar = (HorizontalScrollView) findViewById(R.id.ezopen_realplay_operate_bar2); findViewById(R.id.ezopen_realplay_operate_bar).setVisibility(View.GONE); mRealPlayPtzBtnLy = (LinearLayout) findViewById(R.id.realplay_ptz_btn_ly2); mRealPlayTalkBtnLy = (LinearLayout) findViewById(R.id.realplay_talk_btn_ly2); mRealPlaySslBtnLy = (LinearLayout) findViewById(R.id.realplay_ssl_btn_ly2); mRealPlayCaptureBtnLy = (LinearLayout) findViewById(R.id.realplay_previously_btn_ly2); mRealPlayRecordContainerLy = (LinearLayout) findViewById(R.id.realplay_video_container_ly2); mRealPlayTalkBtn = (ImageButton) findViewById(R.id.realplay_talk_btn2); mRealPlaySslBtn = (Button) findViewById(R.id.realplay_ssl_btn2); mRealPlayPrivacyBtn = (ImageButton) findViewById(R.id.realplay_privacy_btn2); mRealPlayCaptureBtn = (ImageButton) findViewById(R.id.realplay_previously_btn2); mRealPlayRecordContainer = findViewById(R.id.realplay_video_container2); mRealPlayRecordBtn = (ImageButton) findViewById(R.id.realplay_video_btn2); mRealPlayRecordStartBtn = (ImageButton) findViewById(R.id.realplay_video_start_btn2); mRealPlayPtzBtn = (ImageButton) findViewById(R.id.realplay_ptz_btn2); } else { mRealPlayOperateBar = (HorizontalScrollView) findViewById(R.id.ezopen_realplay_operate_bar); findViewById(R.id.ezopen_realplay_operate_bar2).setVisibility(View.GONE); mRealPlayPtzBtnLy = (LinearLayout) findViewById(R.id.realplay_ptz_btn_ly); mRealPlayTalkBtnLy = (LinearLayout) findViewById(R.id.realplay_talk_btn_ly); mRealPlaySslBtnLy = (LinearLayout) findViewById(R.id.realplay_ssl_btn_ly); mRealPlayCaptureBtnLy = (LinearLayout) findViewById(R.id.realplay_previously_btn_ly); mRealPlayRecordContainerLy = (LinearLayout) findViewById(R.id.realplay_video_container_ly); mRealPlayTalkBtn = (ImageButton) findViewById(R.id.realplay_talk_btn); mRealPlaySslBtn = (Button) findViewById(R.id.realplay_ssl_btn); mRealPlayPrivacyBtn = (ImageButton) findViewById(R.id.realplay_privacy_btn); mRealPlayCaptureBtn = (ImageButton) findViewById(R.id.realplay_previously_btn); mRealPlayRecordContainer = findViewById(R.id.realplay_video_container); mRealPlayRecordBtn = (ImageButton) findViewById(R.id.realplay_video_btn); mRealPlayRecordStartBtn = (ImageButton) findViewById(R.id.realplay_video_start_btn); mRealPlayPtzBtn = (ImageButton) findViewById(R.id.realplay_ptz_btn); } mRealPlayTalkBtn.setEnabled(false); mRealPlayOperateBar.setVisibility(View.VISIBLE); } private void setBigScreenOperateBtnLayout() { } private void initFullOperateBarUI() { mRealPlayFullOperateBar = (RelativeLayout) findViewById(R.id.realplay_full_operate_bar); mRealPlayFullPlayBtn = (ImageButton) findViewById(R.id.realplay_full_play_btn); mRealPlayFullSoundBtn = (ImageButton) findViewById(R.id.realplay_full_sound_btn); mRealPlayFullTalkBtn = (ImageButton) findViewById(R.id.realplay_full_talk_btn); mRealPlayFullCaptureBtn = (ImageButton) findViewById(R.id.realplay_full_previously_btn); mRealPlayFullPtzBtn = (ImageButton) findViewById(R.id.realplay_full_ptz_btn); mRealPlayFullRecordContainer = findViewById(R.id.realplay_full_video_container); mRealPlayFullRecordBtn = (ImageButton) findViewById(R.id.realplay_full_video_btn); mRealPlayFullRecordStartBtn = (ImageButton) findViewById(R.id.realplay_full_video_start_btn); mRealPlayFullOperateBar.setOnTouchListener(this); mRealPlayFullPtzAnimBtn = (ImageButton) findViewById(R.id.realplay_full_ptz_anim_btn); mRealPlayFullPtzPromptIv = (ImageView) findViewById(R.id.realplay_full_ptz_prompt_iv); mRealPlayFullTalkAnimBtn = (ImageButton) findViewById(R.id.realplay_full_talk_anim_btn); mRealPlayFullAnimBtn = (ImageButton) findViewById(R.id.realplay_full_anim_btn); } private void startFullBtnAnim(final View animView, final int[] startXy, final int[] endXy, final AnimationListener animationListener) { animView.setVisibility(View.VISIBLE); TranslateAnimation anim = new TranslateAnimation(startXy[0], endXy[0], startXy[1], endXy[1]); anim.setAnimationListener(animationListener); anim.setDuration(ANIMATION_DURING_TIME); animView.startAnimation(anim); } private void setVideoLevel() { if (mCameraInfo == null || mEZPlayer == null || mDeviceInfo == null) { return; } if (mDeviceInfo.getStatus() == 1) { mRealPlayQualityBtn.setEnabled(true); } else { mRealPlayQualityBtn.setEnabled(false); } /************** * 本地数据保存 需要更新之前获取到的设备列表信息,开发者自己设置 * * Local data saved need to be updated before the obtained device list information, the developer's own settings * *********************/ mCameraInfo.setVideoLevel(mCurrentQulityMode.getVideoLevel()); // /** * * 视频质量,2-高清,1-标清,0-流畅 * Video quality, 2-HD, 1-standard, 0- smooth * */ if (mCurrentQulityMode.getVideoLevel() == EZVideoLevel.VIDEO_LEVEL_FLUNET.getVideoLevel()) { mRealPlayQualityBtn.setText(R.string.quality_flunet); } else if (mCurrentQulityMode.getVideoLevel() == EZVideoLevel.VIDEO_LEVEL_BALANCED.getVideoLevel()) { mRealPlayQualityBtn.setText(R.string.quality_balanced); } else if (mCurrentQulityMode.getVideoLevel() == EZVideoLevel.VIDEO_LEVEL_HD.getVideoLevel()) { mRealPlayQualityBtn.setText(R.string.quality_hd); } else if (mCurrentQulityMode.getVideoLevel() == EZVideoLevel.VIDEO_LEVEL_SUPERCLEAR.getVideoLevel()) { mRealPlayQualityBtn.setText(R.string.quality_super_hd); } else { mRealPlayQualityBtn.setText("unknown"); } } @Override public void onConfigurationChanged(Configuration newConfig) { mOrientation = newConfig.orientation; onOrientationChanged(); super.onConfigurationChanged(newConfig); } private void updateOrientation() { if (mIsOnTalk) { if (mEZPlayer != null && mDeviceInfo != null && mDeviceInfo.isSupportTalk() != EZConstants.EZTalkbackCapability.EZTalkbackNoSupport) { setOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); } else { setForceOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } } else { if (mStatus == RealPlayStatus.STATUS_PLAY) { setOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); } else { if (mOrientation == Configuration.ORIENTATION_PORTRAIT) { setOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else { setOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); } } } } private void updateOperatorUI() { if (mOrientation == Configuration.ORIENTATION_PORTRAIT) { fullScreen(false); updateOrientation(); mPortraitTitleBar.setVisibility(View.VISIBLE); mLandscapeTitleBar.setVisibility(View.GONE); mRealPlayControlRl.setVisibility(View.VISIBLE); if (mRtspUrl == null) { mRealPlayPageLy.setBackgroundColor(getResources().getColor(R.color.common_bg)); mRealPlayOperateBar.setVisibility(View.VISIBLE); mRealPlayFullOperateBar.setVisibility(View.GONE); mFullscreenFullButton.setVisibility(View.GONE); if (isRecording) { mRealPlayRecordBtn.setVisibility(View.GONE); mRealPlayRecordStartBtn.setVisibility(View.VISIBLE); } else { mRealPlayRecordBtn.setVisibility(View.VISIBLE); mRealPlayRecordStartBtn.setVisibility(View.GONE); } } } else { fullScreen(true); mPortraitTitleBar.setVisibility(View.GONE); // hide the mRealPlayControlRl.setVisibility(View.GONE); if (!mIsOnTalk && !mIsOnPtz) { mLandscapeTitleBar.setVisibility(View.VISIBLE); } if (mRtspUrl == null) { mRealPlayOperateBar.setVisibility(View.GONE); mRealPlayPageLy.setBackgroundColor(getResources().getColor(R.color.black_bg)); mRealPlayFullOperateBar.setVisibility(View.GONE); if (!mIsOnTalk && !mIsOnPtz) { mFullscreenFullButton.setVisibility(View.GONE); } if (isRecording) { mRealPlayFullRecordBtn.setVisibility(View.GONE); mRealPlayFullRecordStartBtn.setVisibility(View.VISIBLE); } else { mRealPlayFullRecordBtn.setVisibility(View.VISIBLE); mRealPlayFullRecordStartBtn.setVisibility(View.GONE); } } } // mRealPlayControlRl.setVisibility(View.GONE); closeQualityPopupWindow(); if (mStatus == RealPlayStatus.STATUS_START) { showControlRlAndFullOperateBar(); } } private void updatePtzUI() { if (!mIsOnPtz) { return; } if (mOrientation == Configuration.ORIENTATION_PORTRAIT) { setFullPtzStopUI(false); mHandler.post(new Runnable() { @Override public void run() { openPtzPopupWindow(mRealPlayPlayRl); } }); } else { closePtzPopupWindow(); setFullPtzStartUI(false); } } private void updateTalkUI() { if (!mIsOnTalk) { return; } if (mOrientation == Configuration.ORIENTATION_PORTRAIT) { if (mRealPlayFullTalkAnimBtn != null) { mRealPlayFullTalkAnimBtn.setVisibility(View.GONE); mFullscreenFullButton.setVisibility(View.GONE); } mHandler.post(new Runnable() { @Override public void run() { openTalkPopupWindow(false); } }); } else { if (mRealPlayFullTalkAnimBtn != null) { mRealPlayFullOperateBar.setVisibility(View.VISIBLE); mRealPlayFullOperateBar.post(new Runnable() { @Override public void run() { mRealPlayFullTalkBtn.getLocationInWindow(mStartXy); mEndXy[0] = Utils.dip2px(EZRealPlayActivity.this, 20); mEndXy[1] = mStartXy[1]; mRealPlayFullOperateBar.setVisibility(View.GONE); mRealPlayFullTalkAnimBtn.setVisibility(View.VISIBLE); // mFullscreenFullButton.setVisibility(View.VISIBLE); ((AnimationDrawable) mRealPlayFullTalkAnimBtn.getBackground()).start(); } }); } closeTalkPopupWindow(false, false); } } private void fullScreen(boolean enable) { if (enable) { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; getWindow().setAttributes(lp); getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } else { WindowManager.LayoutParams attr = getWindow().getAttributes(); attr.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().setAttributes(attr); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } } private void onOrientationChanged() { setRealPlaySvLayout(); updateOperatorUI(); updateCaptureUI(); updateTalkUI(); updatePtzUI(); } /* * (non-Javadoc) * @see android.view.SurfaceHolder.Callback#surfaceChanged(android.view.SurfaceHolder , int, * int, int) */ @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { if (mEZPlayer != null) { mEZPlayer.setSurfaceHold(holder); } mRealPlaySh = holder; } /* * (non-Javadoc) * @see android.view.SurfaceHolder.Callback#surfaceCreated(android.view.SurfaceHolder ) */ @Override public void surfaceCreated(SurfaceHolder holder) { if (mEZPlayer != null) { mEZPlayer.setSurfaceHold(holder); } mRealPlaySh = holder; if (mStatus == RealPlayStatus.STATUS_INIT) { // 开始播放 startRealPlay(); } } /* * (non-Javadoc) * @see android.view.SurfaceHolder.Callback#surfaceDestroyed(android.view. SurfaceHolder) */ @Override public void surfaceDestroyed(SurfaceHolder holder) { if (mEZPlayer != null) { mEZPlayer.setSurfaceHold(null); } mRealPlaySh = null; } /* * (non-Javadoc) * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View view) { int id = view.getId(); if (id == R.id.realplay_play_btn || id == R.id.realplay_full_play_btn || id == R.id.realplay_play_iv) { if (mStatus != RealPlayStatus.STATUS_STOP) { stopRealPlay(); setRealPlayStopUI(); } else { startRealPlay(); } } else if (id == R.id.realplay_previously_btn || id == R.id.realplay_previously_btn2 || id == R.id.realplay_full_previously_btn) { onCapturePicBtnClick(); } else if (id == R.id.realplay_capture_rl) { onCaptureRlClick(); } else if (id == R.id.realplay_video_btn || id == R.id.realplay_video_start_btn || id == R.id.realplay_video_btn2 || id == R.id.realplay_video_start_btn2 || id == R.id.realplay_full_video_btn || id == R.id.realplay_full_video_start_btn) { int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE); int permissionCheck1 = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); if (Build.VERSION_CODES.M <= Build.VERSION.SDK_INT && (permissionCheck == PackageManager.PERMISSION_DENIED || permissionCheck1 == PackageManager.PERMISSION_DENIED)) { ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 100); } else { onRecordBtnClick(); } } else if (id == R.id.realplay_talk_btn || id == R.id.realplay_talk_btn2 || id == R.id.realplay_full_talk_btn) { int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO); if (Build.VERSION_CODES.M <= Build.VERSION.SDK_INT && permissionCheck == PackageManager.PERMISSION_DENIED) { ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.RECORD_AUDIO }, 101); } else { startVoiceTalk(); } } else if (id == R.id.realplay_quality_btn) { openQualityPopupWindow(mRealPlayQualityBtn); } else if (id == R.id.realplay_ptz_btn || id == R.id.realplay_ptz_btn2) { openPtzPopupWindow(mRealPlayPlayRl); } else if (id == R.id.realplay_full_ptz_btn) { setFullPtzStartUI(true); } else if (id == R.id.realplay_full_ptz_anim_btn) { setFullPtzStopUI(true); } else if (id == R.id.realplay_sound_btn || id == R.id.realplay_full_sound_btn) { onSoundBtnClick(); } else if (id == R.id.realplay_full_talk_anim_btn) { closeTalkPopupWindow(true, true); } } private void setFullPtzStartUI(boolean startAnim) { mIsOnPtz = true; if (mLocalInfo.getPtzPromptCount() < 3) { mRealPlayFullPtzPromptIv.setBackgroundResource(R.drawable.ptz_prompt); mRealPlayFullPtzPromptIv.setVisibility(View.VISIBLE); mLocalInfo.setPtzPromptCount(mLocalInfo.getPtzPromptCount() + 1); mHandler.removeMessages(MSG_CLOSE_PTZ_PROMPT); mHandler.sendEmptyMessageDelayed(MSG_CLOSE_PTZ_PROMPT, 2000); } if (startAnim) { mRealPlayFullAnimBtn.setBackgroundResource(R.drawable.yuntai_pressed); mRealPlayFullPtzBtn.getLocationInWindow(mStartXy); mEndXy[0] = Utils.dip2px(this, 20); mEndXy[1] = mStartXy[1]; startFullBtnAnim(mRealPlayFullAnimBtn, mStartXy, mEndXy, new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { mRealPlayFullPtzAnimBtn.setVisibility(View.VISIBLE); mRealPlayFullAnimBtn.setVisibility(View.GONE); onRealPlaySvClick(); // mFullscreenFullButton.setVisibility(View.VISIBLE); } }); } else { mRealPlayFullOperateBar.setVisibility(View.VISIBLE); mRealPlayFullOperateBar.post(new Runnable() { @Override public void run() { mRealPlayFullPtzBtn.getLocationInWindow(mStartXy); mEndXy[0] = Utils.dip2px(EZRealPlayActivity.this, 20); mEndXy[1] = mStartXy[1]; mRealPlayFullOperateBar.setVisibility(View.GONE); mRealPlayFullPtzAnimBtn.setVisibility(View.VISIBLE); // mFullscreenFullButton.setVisibility(View.VISIBLE); } }); } } private void setFullPtzStopUI(boolean startAnim) { mIsOnPtz = false; if (startAnim) { mRealPlayFullPtzAnimBtn.setVisibility(View.GONE); mFullscreenFullButton.setVisibility(View.GONE); mRealPlayFullAnimBtn.setBackgroundResource(R.drawable.yuntai_pressed); startFullBtnAnim(mRealPlayFullAnimBtn, mEndXy, mStartXy, new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { mRealPlayFullAnimBtn.setVisibility(View.GONE); onRealPlaySvClick(); } }); } else { mRealPlayFullPtzAnimBtn.setVisibility(View.GONE); mFullscreenFullButton.setVisibility(View.GONE); } mRealPlayFullPtzPromptIv.setVisibility(View.GONE); mHandler.removeMessages(MSG_CLOSE_PTZ_PROMPT); } private void onSoundBtnClick() { if (mLocalInfo.isSoundOpen()) { mLocalInfo.setSoundOpen(false); mRealPlaySoundBtn.setBackgroundResource(R.drawable.ezopen_vertical_preview_sound_off_selector); if (mRealPlayFullSoundBtn != null) { mRealPlayFullSoundBtn.setBackgroundResource(R.drawable.play_full_soundoff_btn_selector); } } else { mLocalInfo.setSoundOpen(true); mRealPlaySoundBtn.setBackgroundResource(R.drawable.ezopen_vertical_preview_sound_selector); if (mRealPlayFullSoundBtn != null) { mRealPlayFullSoundBtn.setBackgroundResource(R.drawable.play_full_soundon_btn_selector); } } setRealPlaySound(); } private void setRealPlaySound() { if (mEZPlayer != null) { if (mRtspUrl == null) { if (mLocalInfo.isSoundOpen()) { mEZPlayer.openSound(); } else { mEZPlayer.closeSound(); } } else { if (mRealPlaySquareInfo.mSoundType == 0) { mEZPlayer.closeSound(); } else { mEZPlayer.openSound(); } } } } private void startVoiceTalk() { LogUtil.d(TAG, "startVoiceTalk"); if (mEZPlayer == null) { LogUtil.d(TAG, "EZPlaer is null"); return; } if (mCameraInfo == null) { return; } mIsOnTalk = true; updateOrientation(); Utils.showToast(this, R.string.start_voice_talk); mRealPlayTalkBtn.setEnabled(false); mRealPlayFullTalkBtn.setEnabled(false); mRealPlayFullTalkAnimBtn.setEnabled(false); if (mOrientation == Configuration.ORIENTATION_LANDSCAPE) { mRealPlayFullAnimBtn.setBackgroundResource(R.drawable.speech_1); mRealPlayFullTalkBtn.getLocationInWindow(mStartXy); mEndXy[0] = Utils.dip2px(this, 20); mEndXy[1] = mStartXy[1]; startFullBtnAnim(mRealPlayFullAnimBtn, mStartXy, mEndXy, new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { Utils.showToast(EZRealPlayActivity.this, R.string.realplay_full_talk_start_tip); mRealPlayFullTalkAnimBtn.setVisibility(View.VISIBLE); mRealPlayFullAnimBtn.setVisibility(View.GONE); onRealPlaySvClick(); // mFullscreenFullButton.setVisibility(View.VISIBLE); } }); } if (mEZPlayer != null) { mEZPlayer.closeSound(); } mEZPlayer.startVoiceTalk(); } private void stopVoiceTalk(boolean startAnim) { if (mCameraInfo == null || mEZPlayer == null) { return; } LogUtil.d(TAG, "stopVoiceTalk"); mEZPlayer.stopVoiceTalk(); handleVoiceTalkStoped(startAnim); } private OnClickListener mOnPopWndClickListener = new OnClickListener() { @Override public void onClick(View v) { int id = v.getId(); if (id == R.id.quality_super_hd_btn) { setQualityMode(EZVideoLevel.VIDEO_LEVEL_SUPERCLEAR); } else if (id == R.id.quality_hd_btn) { setQualityMode(EZVideoLevel.VIDEO_LEVEL_HD); } else if (id == R.id.quality_balanced_btn) { setQualityMode(EZVideoLevel.VIDEO_LEVEL_BALANCED); } else if (id == R.id.quality_flunet_btn) { setQualityMode(EZVideoLevel.VIDEO_LEVEL_FLUNET); } else if (id == R.id.ptz_close_btn) { closePtzPopupWindow(); } else if (id == R.id.ptz_flip_btn) {// setPtzFlip(); } else if (id == R.id.talkback_close_btn) { closeTalkPopupWindow(true, false); } } }; private void ptzOption(final EZPTZCommand command, final EZPTZAction action) { new Thread(new Runnable() { @Override public void run() { boolean ptz_result = false; try { ptz_result = EzvizApplication.getOpenSDK().controlPTZ(mCameraInfo.getDeviceSerial(), mCameraInfo.getCameraNo(), command, action, EZConstants.PTZ_SPEED_DEFAULT); } catch (BaseException e) { e.printStackTrace(); } LogUtil.i(TAG, "controlPTZ ptzCtrl result: " + ptz_result); } }).start(); } private OnTouchListener mOnTouchListener = new OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionevent) { boolean ptz_result = false; int action = motionevent.getAction(); final int speed = EZConstants.PTZ_SPEED_DEFAULT; switch (action) { case MotionEvent.ACTION_DOWN: int viewId = view.getId(); if (viewId == R.id.talkback_control_btn) { mTalkRingView.setVisibility(View.VISIBLE); mEZPlayer.setVoiceTalkStatus(true); } else if (viewId == R.id.ptz_top_btn) { mPtzControlLy.setBackgroundResource(R.drawable.ptz_up_sel); setPtzDirectionIv(RealPlayStatus.PTZ_UP); ptzOption(EZPTZCommand.EZPTZCommandUp, EZPTZAction.EZPTZActionSTART); } else if (viewId == R.id.ptz_bottom_btn) { mPtzControlLy.setBackgroundResource(R.drawable.ptz_bottom_sel); setPtzDirectionIv(RealPlayStatus.PTZ_DOWN); ptzOption(EZPTZCommand.EZPTZCommandDown, EZPTZAction.EZPTZActionSTART); } else if (viewId == R.id.ptz_left_btn) { mPtzControlLy.setBackgroundResource(R.drawable.ptz_left_sel); setPtzDirectionIv(RealPlayStatus.PTZ_LEFT); ptzOption(EZPTZCommand.EZPTZCommandLeft, EZPTZAction.EZPTZActionSTART); } else if (viewId == R.id.ptz_right_btn) { mPtzControlLy.setBackgroundResource(R.drawable.ptz_right_sel); setPtzDirectionIv(RealPlayStatus.PTZ_RIGHT); ptzOption(EZPTZCommand.EZPTZCommandRight, EZPTZAction.EZPTZActionSTART); } break; case MotionEvent.ACTION_UP: int id = view.getId(); if (id == R.id.talkback_control_btn) { mEZPlayer.setVoiceTalkStatus(false); mTalkRingView.setVisibility(View.GONE); } else if (id == R.id.ptz_top_btn) { mPtzControlLy.setBackgroundResource(R.drawable.ptz_bg); ptzOption(EZPTZCommand.EZPTZCommandUp, EZPTZAction.EZPTZActionSTOP); } else if (id == R.id.ptz_bottom_btn) { mPtzControlLy.setBackgroundResource(R.drawable.ptz_bg); ptzOption(EZPTZCommand.EZPTZCommandDown, EZPTZAction.EZPTZActionSTOP); } else if (id == R.id.ptz_left_btn) { mPtzControlLy.setBackgroundResource(R.drawable.ptz_bg); ptzOption(EZPTZCommand.EZPTZCommandLeft, EZPTZAction.EZPTZActionSTOP); } else if (id == R.id.ptz_right_btn) { mPtzControlLy.setBackgroundResource(R.drawable.ptz_bg); ptzOption(EZPTZCommand.EZPTZCommandRight, EZPTZAction.EZPTZActionSTOP); } break; default: break; } return false; } }; public void setSoundLocalization(int status) { } private void setQualityMode(final EZVideoLevel mode) { // 检查网络是否可用 Check if the network is available if (!ConnectionDetector.isNetworkAvailable(EZRealPlayActivity.this)) { // 提示没有连接网络 Prompt not to connect to the network Utils.showToast(EZRealPlayActivity.this, R.string.realplay_set_fail_network); return; } if (mEZPlayer != null) { mWaitDialog.setWaitText(this.getString(R.string.setting_video_level)); mWaitDialog.show(); Thread thr = new Thread(new Runnable() { @Override public void run() { try { // need to modify by yudan at 08-11 EzvizApplication.getOpenSDK().setVideoLevel(mCameraInfo.getDeviceSerial(), mCameraInfo.getCameraNo(), mode.getVideoLevel()); mCurrentQulityMode = mode; Message msg = Message.obtain(); msg.what = MSG_SET_VEDIOMODE_SUCCESS; mHandler.sendMessage(msg); LogUtil.i(TAG, "setQualityMode success"); } catch (BaseException e) { mCurrentQulityMode = EZVideoLevel.VIDEO_LEVEL_FLUNET; e.printStackTrace(); Message msg = Message.obtain(); msg.what = MSG_SET_VEDIOMODE_FAIL; mHandler.sendMessage(msg); LogUtil.i(TAG, "setQualityMode fail"); } } }) { }; thr.start(); } } private void openTalkPopupWindow(boolean showAnimation) { if (mEZPlayer == null && mDeviceInfo == null) { return; } closeTalkPopupWindow(false, false); LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); ViewGroup layoutView = (ViewGroup) layoutInflater.inflate(R.layout.realplay_talkback_wnd, null, true); layoutView.setFocusable(true); layoutView.setFocusableInTouchMode(true); layoutView.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View arg0, int arg1, KeyEvent arg2) { if (arg1 == KeyEvent.KEYCODE_BACK) { LogUtil.i(TAG, "KEYCODE_BACK DOWN"); closeTalkPopupWindow(true, false); } return false; } }); ImageButton talkbackCloseBtn = (ImageButton) layoutView.findViewById(R.id.talkback_close_btn); talkbackCloseBtn.setOnClickListener(mOnPopWndClickListener); mTalkRingView = (RingView) layoutView.findViewById(R.id.talkback_rv); mTalkBackControlBtn = (Button) layoutView.findViewById(R.id.talkback_control_btn); mTalkBackControlBtn.setOnTouchListener(mOnTouchListener); if (mDeviceInfo.isSupportTalk() == EZConstants.EZTalkbackCapability.EZTalkbackFullDuplex) { mTalkRingView.setVisibility(View.VISIBLE); mTalkBackControlBtn.setEnabled(false); mTalkBackControlBtn.setText(R.string.talking); } int height = mLocalInfo.getScreenHeight() - mPortraitTitleBar.getHeight() - mRealPlayPlayRl.getHeight() - (mRealPlayRect != null ? mRealPlayRect.top : mLocalInfo.getNavigationBarHeight()); mTalkPopupWindow = new PopupWindow(layoutView, LayoutParams.MATCH_PARENT, height, true); // mTalkPopupWindow.setBackgroundDrawable(new BitmapDrawable()); if (showAnimation) { mTalkPopupWindow.setAnimationStyle(R.style.popwindowUpAnim); } mTalkPopupWindow.setFocusable(false); mTalkPopupWindow.setOutsideTouchable(false); mTalkPopupWindow.showAsDropDown(mRealPlayPlayRl); // mTalkPopupWindow.setOnDismissListener(new OnDismissListener() { // // @Override // public void onDismiss() { // LogUtil.i(TAG, "KEYCODE_BACK DOWN"); // mTalkPopupWindow = null; // closeTalkPopupWindow(); // } // }); mTalkPopupWindow.update(); mTalkRingView.post(new Runnable() { @Override public void run() { if (mTalkRingView != null) { mTalkRingView.setMinRadiusAndDistance(mTalkBackControlBtn.getHeight() / 2f, Utils.dip2px(EZRealPlayActivity.this, 22)); } } }); } private void closeTalkPopupWindow(boolean stopTalk, boolean startAnim) { if (mTalkPopupWindow != null) { LogUtil.i(TAG, "closeTalkPopupWindow"); dismissPopWindow(mTalkPopupWindow); mTalkPopupWindow = null; } mTalkRingView = null; if (stopTalk) stopVoiceTalk(startAnim); } private void openPtzPopupWindow(View parent) { closePtzPopupWindow(); mIsOnPtz = true; LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); ViewGroup layoutView = (ViewGroup) layoutInflater.inflate(R.layout.realplay_ptz_wnd, null, true); mPtzControlLy = (LinearLayout) layoutView.findViewById(R.id.ptz_control_ly); ImageButton ptzCloseBtn = (ImageButton) layoutView.findViewById(R.id.ptz_close_btn); ptzCloseBtn.setOnClickListener(mOnPopWndClickListener); ImageButton ptzTopBtn = (ImageButton) layoutView.findViewById(R.id.ptz_top_btn); ptzTopBtn.setOnTouchListener(mOnTouchListener); ImageButton ptzBottomBtn = (ImageButton) layoutView.findViewById(R.id.ptz_bottom_btn); ptzBottomBtn.setOnTouchListener(mOnTouchListener); ImageButton ptzLeftBtn = (ImageButton) layoutView.findViewById(R.id.ptz_left_btn); ptzLeftBtn.setOnTouchListener(mOnTouchListener); ImageButton ptzRightBtn = (ImageButton) layoutView.findViewById(R.id.ptz_right_btn); ptzRightBtn.setOnTouchListener(mOnTouchListener); ImageButton ptzFlipBtn = (ImageButton) layoutView.findViewById(R.id.ptz_flip_btn); ptzFlipBtn.setOnClickListener(mOnPopWndClickListener); int height = mLocalInfo.getScreenHeight() - mPortraitTitleBar.getHeight() - mRealPlayPlayRl.getHeight() - (mRealPlayRect != null ? mRealPlayRect.top : mLocalInfo.getNavigationBarHeight()); mPtzPopupWindow = new PopupWindow(layoutView, LayoutParams.MATCH_PARENT, height, true); mPtzPopupWindow.setBackgroundDrawable(new BitmapDrawable()); mPtzPopupWindow.setAnimationStyle(R.style.popwindowUpAnim); mPtzPopupWindow.setFocusable(true); mPtzPopupWindow.setOutsideTouchable(true); mPtzPopupWindow.showAsDropDown(parent); mPtzPopupWindow.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss() { LogUtil.i(TAG, "KEYCODE_BACK DOWN"); mPtzPopupWindow = null; mPtzControlLy = null; closePtzPopupWindow(); } }); mPtzPopupWindow.update(); } private void closePtzPopupWindow() { mIsOnPtz = false; if (mPtzPopupWindow != null) { dismissPopWindow(mPtzPopupWindow); mPtzPopupWindow = null; mPtzControlLy = null; setForceOrientation(0); } } private void openQualityPopupWindow(View anchor) { if (mEZPlayer == null) { return; } closeQualityPopupWindow(); LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); ViewGroup layoutView = (ViewGroup) layoutInflater.inflate(R.layout.realplay_quality_items, null, true); Button qualitySuperHdBtn = (Button) layoutView.findViewById(R.id.quality_super_hd_btn); qualitySuperHdBtn.setOnClickListener(mOnPopWndClickListener); Button qualityHdBtn = (Button) layoutView.findViewById(R.id.quality_hd_btn); qualityHdBtn.setOnClickListener(mOnPopWndClickListener); Button qualityBalancedBtn = (Button) layoutView.findViewById(R.id.quality_balanced_btn); qualityBalancedBtn.setOnClickListener(mOnPopWndClickListener); Button qualityFlunetBtn = (Button) layoutView.findViewById(R.id.quality_flunet_btn); qualityFlunetBtn.setOnClickListener(mOnPopWndClickListener); qualityFlunetBtn.setVisibility(View.GONE); qualityBalancedBtn.setVisibility(View.GONE); qualityHdBtn.setVisibility(View.GONE); qualitySuperHdBtn.setVisibility(View.GONE); // 清晰度 0-流畅,1-均衡,2-高清,3-超清 for (EZVideoQualityInfo qualityInfo : mCameraInfo.getVideoQualityInfos()) { if (mCameraInfo.getVideoLevel().getVideoLevel() == qualityInfo.getVideoLevel()) { // 当前清晰度不添加到可切换清晰度列表中 continue; } int videoLevel = qualityInfo.getVideoLevel(); if (videoLevel == 0) { qualityFlunetBtn.setVisibility(View.VISIBLE); } else if (videoLevel == 1) { qualityBalancedBtn.setVisibility(View.VISIBLE); } else if (videoLevel == 2) { qualityHdBtn.setVisibility(View.VISIBLE); } else if (videoLevel == 3) { qualitySuperHdBtn.setVisibility(View.VISIBLE); } } mQualityPopupWindow = new PopupWindow(layoutView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true); mQualityPopupWindow.setBackgroundDrawable(new BitmapDrawable()); mQualityPopupWindow.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss() { LogUtil.i(TAG, "KEYCODE_BACK DOWN"); mQualityPopupWindow = null; closeQualityPopupWindow(); } }); try { int widthMode = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); int heightMode = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); mQualityPopupWindow.getContentView().measure(widthMode, heightMode); int yOffset = -(anchor.getHeight() + mQualityPopupWindow.getContentView().getMeasuredHeight()); mQualityPopupWindow.showAsDropDown(anchor, 0, yOffset); } catch (Exception e) { e.printStackTrace(); closeQualityPopupWindow(); } } private void closeQualityPopupWindow() { if (mQualityPopupWindow != null) { dismissPopWindow(mQualityPopupWindow); mQualityPopupWindow = null; } } private String mCurrentRecordPath = null; private void onRecordBtnClick() { mControlDisplaySec = 0; if (isRecording) { stopRealPlayRecord(); return; } if (!SDCardUtil.isSDCardUseable()) { // 提示SD卡不可用 //Prompt SD card is not available Utils.showToast(EZRealPlayActivity.this, R.string.remoteplayback_SDCard_disable_use); return; } if (SDCardUtil.getSDCardRemainSize() < SDCardUtil.PIC_MIN_MEM_SPACE) { // 提示内存不足 //Prompt for insufficient memory Utils.showToast(EZRealPlayActivity.this, R.string.remoteplayback_record_fail_for_memory); return; } if (mEZPlayer != null) { final String strRecordFile = DemoConfig.getRecordsFolder() + "/" + System.currentTimeMillis() + ".mp4"; LogUtil.i(TAG, "recorded video file path is " + strRecordFile); mEZPlayer.setStreamDownloadCallback(new EZOpenSDKListener.EZStreamDownloadCallback() { @Override public void onSuccess(String filepath) { LogUtil.i(TAG, "EZStreamDownloadCallback onSuccess " + filepath); dialog("Record result", "saved to " + mCurrentRecordPath); } @Override public void onError(EZOpenSDKListener.EZStreamDownloadError code) { LogUtil.e(TAG, "EZStreamDownloadCallback onError " + code.name()); } }); if (mEZPlayer.startLocalRecordWithFile(strRecordFile)) { isRecording = true; mCurrentRecordPath = strRecordFile; mCaptureDisplaySec = 4; updateCaptureUI(); mAudioPlayUtil.playAudioFile(AudioPlayUtil.RECORD_SOUND); handleRecordSuccess(strRecordFile); } else { handleRecordFail(); } } } private void stopRealPlayRecord() { if (mEZPlayer == null || !isRecording) { return; } // 设置录像按钮为check状态 //Set the recording button to the check status if (mOrientation == Configuration.ORIENTATION_PORTRAIT) { if (!mIsOnStop) { mRecordRotateViewUtil.applyRotation(mRealPlayRecordContainer, mRealPlayRecordStartBtn, mRealPlayRecordBtn, 0, 90); } else { mRealPlayRecordStartBtn.setVisibility(View.GONE); mRealPlayRecordBtn.setVisibility(View.VISIBLE); } mRealPlayFullRecordStartBtn.setVisibility(View.GONE); mRealPlayFullRecordBtn.setVisibility(View.VISIBLE); } else { if (!mIsOnStop) { mRecordRotateViewUtil.applyRotation(mRealPlayFullRecordContainer, mRealPlayFullRecordStartBtn, mRealPlayFullRecordBtn, 0, 90); } else { mRealPlayFullRecordStartBtn.setVisibility(View.GONE); mRealPlayFullRecordBtn.setVisibility(View.VISIBLE); } mRealPlayRecordStartBtn.setVisibility(View.GONE); mRealPlayRecordBtn.setVisibility(View.VISIBLE); } mAudioPlayUtil.playAudioFile(AudioPlayUtil.RECORD_SOUND); mEZPlayer.stopLocalRecord(); // 计时按钮不可见 //The timed button is not visible mRealPlayRecordLy.setVisibility(View.GONE); mCaptureDisplaySec = 0; updateCaptureUI(); isRecording = false; } private void onCaptureRlClick() { } private void onCapturePicBtnClick() { mControlDisplaySec = 0; if (!SDCardUtil.isSDCardUseable()) { // 提示SD卡不可用 //Prompt SD card is not available Utils.showToast(EZRealPlayActivity.this, R.string.remoteplayback_SDCard_disable_use); return; } if (SDCardUtil.getSDCardRemainSize() < SDCardUtil.PIC_MIN_MEM_SPACE) { // 提示内存不足 //Prompt for insufficient memory Utils.showToast(EZRealPlayActivity.this, R.string.remoteplayback_capture_fail_for_memory); return; } if (mEZPlayer != null) { mCaptureDisplaySec = 4; updateCaptureUI(); Thread thr = new Thread() { @Override public void run() { Bitmap bmp = mEZPlayer.capturePicture(); if (bmp != null) { try { mAudioPlayUtil.playAudioFile(AudioPlayUtil.CAPTURE_SOUND); final String strCaptureFile = DemoConfig.getCapturesFolder() + "/" + System.currentTimeMillis() + ".jpg"; LogUtil.e(TAG, "captured picture file path is " + strCaptureFile); if (TextUtils.isEmpty(strCaptureFile)) { bmp.recycle(); bmp = null; return; } EZUtils.saveCapturePictrue(strCaptureFile, bmp); MediaScanner mMediaScanner = new MediaScanner(EZRealPlayActivity.this); mMediaScanner.scanFile(strCaptureFile, "jpg"); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(EZRealPlayActivity.this, getResources().getString(R.string.already_saved_to_volume) + strCaptureFile, Toast.LENGTH_SHORT).show(); } }); } catch (InnerException e) { e.printStackTrace(); } finally { if (bmp != null) { bmp.recycle(); bmp = null; return; } } } else { showToast("抓图失败, 检查是否开启了硬件解码"); } super.run(); } }; thr.start(); } } private void onRealPlaySvClick() { if (mCameraInfo != null && mEZPlayer != null && mDeviceInfo != null) { if (mDeviceInfo.getStatus() != 1) { return; } if (mOrientation == Configuration.ORIENTATION_PORTRAIT) { setRealPlayControlRlVisibility(); } else { setRealPlayFullOperateBarVisibility(); } } else if (mRtspUrl != null) { setRealPlayControlRlVisibility(); } } private void setRealPlayControlRlVisibility() { if (mLandscapeTitleBar.getVisibility() == View.VISIBLE || mRealPlayControlRl.getVisibility() == View.VISIBLE) { // mRealPlayControlRl.setVisibility(View.GONE); mLandscapeTitleBar.setVisibility(View.GONE); closeQualityPopupWindow(); } else { mRealPlayControlRl.setVisibility(View.VISIBLE); if (mOrientation == Configuration.ORIENTATION_LANDSCAPE) { if (!mIsOnTalk && !mIsOnPtz) { mLandscapeTitleBar.setVisibility(View.VISIBLE); } } else { mLandscapeTitleBar.setVisibility(View.GONE); } mControlDisplaySec = 0; } } private void setRealPlayFullOperateBarVisibility() { if (mLandscapeTitleBar.getVisibility() == View.VISIBLE) { mRealPlayFullOperateBar.setVisibility(View.GONE); if (!mIsOnTalk && !mIsOnPtz) { mFullscreenFullButton.setVisibility(View.GONE); } mLandscapeTitleBar.setVisibility(View.GONE); } else { if (!mIsOnTalk && !mIsOnPtz) { //mj mRealPlayFullOperateBar.setVisibility(View.VISIBLE); // mFullscreenFullButton.setVisibility(View.VISIBLE); mLandscapeTitleBar.setVisibility(View.VISIBLE); } mControlDisplaySec = 0; } } private void startRealPlay() { // 增加手机客户端操作信息记录 //Increase the mobile client operation information record LogUtil.d(TAG, "startRealPlay"); if (mStatus == RealPlayStatus.STATUS_START || mStatus == RealPlayStatus.STATUS_PLAY) { return; } // 检查网络是否可用 //Check if the network is available if (!ConnectionDetector.isNetworkAvailable(this)) { // 提示没有连接网络 //Prompt not to connect to the network setRealPlayFailUI(getString(R.string.realplay_play_fail_becauseof_network)); return; } mStatus = RealPlayStatus.STATUS_START; setRealPlayLoadingUI(); if (mCameraInfo != null) { mEZPlayer = EzvizApplication.getOpenSDK().createPlayer(mCameraInfo.getDeviceSerial(), mCameraInfo.getCameraNo()); if (mEZPlayer == null) return; if (mDeviceInfo == null) { return; } mEZPlayer.setPlayVerifyCode(DataManager.getInstance().getDeviceSerialVerifyCode(mCameraInfo.getDeviceSerial())); // if (mDeviceInfo.getIsEncrypt() == 1) { // mEZPlayer.setPlayVerifyCode(DataManager.getInstance().getDeviceSerialVerifyCode(mCameraInfo.getDeviceSerial())); // } mEZPlayer.setHandler(mHandler); mEZPlayer.setSurfaceHold(mRealPlaySh); // 不建议使用,会导致抓图功能失效 // mEZPlayer.setHardDecode(true); startRecordOriginVideo(); mEZPlayer.startRealPlay(); } else if (mRtspUrl != null) { mEZPlayer = EzvizApplication.getOpenSDK().createPlayerWithUrl(mRtspUrl); if (mEZPlayer == null) return; mEZPlayer.setHandler(mHandler); mEZPlayer.setSurfaceHold(mRealPlaySh); // 不建议使用,会导致抓图功能失效 // mEZPlayer.setHardDecode(true); startRecordOriginVideo(); mEZPlayer.startRealPlay(); } updateLoadingProgress(0); } private void startRecordOriginVideo() { String fileName = DemoConfig.getStreamsFolder() + "/origin_video_real_play_" + DataTimeUtil.INSTANCE.getSimpleTimeInfoForTmpFile() + ".ps"; VideoFileUtil.startRecordOriginVideo(mEZPlayer, fileName); } private void stopRealPlay() { LogUtil.d(TAG, "stopRealPlay"); mStatus = RealPlayStatus.STATUS_STOP; stopUpdateTimer(); if (mEZPlayer != null) { stopRealPlayRecord(); mEZPlayer.stopRealPlay(); } mStreamFlow = 0; } private void setRealPlayLoadingUI() { mStartTime = System.currentTimeMillis(); setStartloading(); mRealPlayBtn.setBackgroundResource(R.drawable.play_stop_selector); if (mCameraInfo != null && mDeviceInfo != null) { mRealPlayCaptureBtn.setEnabled(false); mRealPlayRecordBtn.setEnabled(false); if (mDeviceInfo.getStatus() == 1) { mRealPlayQualityBtn.setEnabled(true); } else { mRealPlayQualityBtn.setEnabled(false); } mRealPlayPtzBtn.setEnabled(false); mRealPlayFullPlayBtn.setBackgroundResource(R.drawable.play_full_stop_selector); mRealPlayFullCaptureBtn.setEnabled(false); mRealPlayFullRecordBtn.setEnabled(false); mRealPlayFullFlowLy.setVisibility(View.GONE); mRealPlayFullPtzBtn.setEnabled(false); } showControlRlAndFullOperateBar(); } private void showControlRlAndFullOperateBar() { if (mRtspUrl != null || mOrientation == Configuration.ORIENTATION_PORTRAIT) { mRealPlayControlRl.setVisibility(View.VISIBLE); if (mOrientation == Configuration.ORIENTATION_LANDSCAPE) { if (!mIsOnTalk && !mIsOnPtz) { mLandscapeTitleBar.setVisibility(View.VISIBLE); } } else { mLandscapeTitleBar.setVisibility(View.GONE); } mControlDisplaySec = 0; } else { if (!mIsOnTalk && !mIsOnPtz) { mRealPlayFullOperateBar.setVisibility(View.VISIBLE); // mFullscreenFullButton.setVisibility(View.VISIBLE); mLandscapeTitleBar.setVisibility(View.VISIBLE); } mControlDisplaySec = 0; } } private void setRealPlayStopUI() { stopUpdateTimer(); updateOrientation(); setRealPlaySvLayout(); setStopLoading(); hideControlRlAndFullOperateBar(true); mRealPlayBtn.setBackgroundResource(R.drawable.play_play_selector); if (mCameraInfo != null && mDeviceInfo != null) { closePtzPopupWindow(); setFullPtzStopUI(false); mRealPlayCaptureBtn.setEnabled(false); mRealPlayRecordBtn.setEnabled(false); if (mDeviceInfo.getStatus() == 1) { mRealPlayQualityBtn.setEnabled(true); } else { mRealPlayQualityBtn.setEnabled(false); } mRealPlayFullPtzBtn.setEnabled(false); if (mDeviceInfo.getStatus() == 1) { mRealPlayPrivacyBtn.setEnabled(true); mRealPlaySslBtn.setEnabled(true); } else { mRealPlayPrivacyBtn.setEnabled(false); mRealPlaySslBtn.setEnabled(false); } mRealPlayFullPlayBtn.setBackgroundResource(R.drawable.play_full_play_selector); mRealPlayFullCaptureBtn.setEnabled(false); mRealPlayFullRecordBtn.setEnabled(false); mRealPlayPtzBtn.setEnabled(false); } } private void setRealPlayFailUI(String errorStr) { mStopTime = System.currentTimeMillis(); showType(); stopUpdateTimer(); updateOrientation(); { setLoadingFail(errorStr); } mRealPlayFullFlowLy.setVisibility(View.GONE); mRealPlayBtn.setBackgroundResource(R.drawable.play_play_selector); hideControlRlAndFullOperateBar(true); if (mCameraInfo != null && mDeviceInfo != null) { closePtzPopupWindow(); setFullPtzStopUI(false); mRealPlayCaptureBtn.setEnabled(false); mRealPlayRecordBtn.setEnabled(false); if (mDeviceInfo.getStatus() == 1 && (mEZPlayer == null)) { mRealPlayQualityBtn.setEnabled(true); } else { mRealPlayQualityBtn.setEnabled(false); } mRealPlayPtzBtn.setEnabled(false); if (mDeviceInfo.getStatus() == 1) { mRealPlayPrivacyBtn.setEnabled(true); mRealPlaySslBtn.setEnabled(true); } else { mRealPlayPrivacyBtn.setEnabled(false); mRealPlaySslBtn.setEnabled(false); } mRealPlayFullPlayBtn.setBackgroundResource(R.drawable.play_full_play_selector); mRealPlayFullCaptureBtn.setEnabled(false); mRealPlayFullRecordBtn.setEnabled(false); mRealPlayFullPtzBtn.setEnabled(false); } } private void setRealPlaySuccessUI() { mStopTime = System.currentTimeMillis(); showType(); updateOrientation(); setLoadingSuccess(); mRealPlayFlowTv.setVisibility(View.VISIBLE); mRealPlayFullFlowLy.setVisibility(View.VISIBLE); mRealPlayBtn.setBackgroundResource(R.drawable.play_stop_selector); if (mCameraInfo != null && mDeviceInfo != null) { mRealPlayCaptureBtn.setEnabled(true); mRealPlayRecordBtn.setEnabled(true); if (mDeviceInfo.getStatus() == 1) { mRealPlayQualityBtn.setEnabled(true); } else { mRealPlayQualityBtn.setEnabled(false); } if (getSupportPtz() == 1) { mRealPlayPtzBtn.setEnabled(true); } mRealPlayFullPlayBtn.setBackgroundResource(R.drawable.play_full_stop_selector); mRealPlayFullCaptureBtn.setEnabled(true); mRealPlayFullRecordBtn.setEnabled(true); mRealPlayFullPtzBtn.setEnabled(true); } // setRealPlaySound(); startUpdateTimer(); } private void checkRealPlayFlow() { if ((mEZPlayer != null && mRealPlayFlowTv.getVisibility() == View.VISIBLE)) { // 更新流量数据 //Update traffic data long streamFlow = mEZPlayer.getStreamFlow(); updateRealPlayFlowTv(streamFlow); } } private void updateRealPlayFlowTv(long streamFlow) { long streamFlowUnit = streamFlow - mStreamFlow; if (streamFlowUnit < 0) streamFlowUnit = 0; float fKBUnit = (float) streamFlowUnit / (float) Constant.KB; String descUnit = String.format("%.2f k/s ", fKBUnit); mRealPlayFlowTv.setText(descUnit); mStreamFlow = streamFlow; } private void setOrientation(int sensor) { if (mForceOrientation != 0) { LogUtil.d(TAG, "setOrientation mForceOrientation:" + mForceOrientation); return; } if (sensor == ActivityInfo.SCREEN_ORIENTATION_SENSOR) mScreenOrientationHelper.enableSensorOrientation(); else mScreenOrientationHelper.disableSensorOrientation(); } public void setForceOrientation(int orientation) { if (mForceOrientation == orientation) { LogUtil.d(TAG, "setForceOrientation no change"); return; } mForceOrientation = orientation; if (mForceOrientation != 0) { if (mForceOrientation != mOrientation) { if (mForceOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { mScreenOrientationHelper.portrait(); } else { mScreenOrientationHelper.landscape(); } } mScreenOrientationHelper.disableSensorOrientation(); } else { updateOrientation(); } } /* * (non-Javadoc) * @see android.os.Handler.Callback#handleMessage(android.os.Message) */ @SuppressLint("NewApi") @Override public boolean handleMessage(Message msg) { if (this.isFinishing()) { return false; } LogUtil.i(TAG, "handleMessage:" + msg.what); // do nothing if (msg.what == MSG_VIDEO_SIZE_CHANGED) { LogUtil.d(TAG, "MSG_VIDEO_SIZE_CHANGED"); try { String temp = (String) msg.obj; String[] strings = temp.split(":"); mVideoWidth = Integer.parseInt(strings[0]); mVideoHeight = Integer.parseInt(strings[1]); } catch (Exception e) { e.printStackTrace(); } } else if (msg.what == EZRealPlayConstants.MSG_GET_CAMERA_INFO_SUCCESS) { updateLoadingProgress(20); handleGetCameraInfoSuccess(); } else if (msg.what == EZRealPlayConstants.MSG_REALPLAY_PLAY_START) { updateLoadingProgress(40); } else if (msg.what == EZRealPlayConstants.MSG_REALPLAY_CONNECTION_START) { updateLoadingProgress(60); } else if (msg.what == EZRealPlayConstants.MSG_REALPLAY_CONNECTION_SUCCESS) { updateLoadingProgress(80); } else if (msg.what == EZRealPlayConstants.MSG_REALPLAY_PLAY_SUCCESS) { ViewGroup playInfoVg = (ViewGroup) findViewById(R.id.vg_play_info); if (playInfoVg != null) { playInfoVg.setVisibility(View.VISIBLE); } showDecodeType(); handlePlaySuccess(msg); } else if (msg.what == EZRealPlayConstants.MSG_REALPLAY_PLAY_FAIL) { handlePlayFail(msg.obj); } else if (msg.what == EZRealPlayConstants.MSG_SET_VEDIOMODE_SUCCESS) { handleSetVedioModeSuccess(); } else if (msg.what == EZRealPlayConstants.MSG_SET_VEDIOMODE_FAIL) { handleSetVedioModeFail(msg.arg1); } else if (msg.what == EZRealPlayConstants.MSG_PTZ_SET_FAIL) { handlePtzControlFail(msg); } else if (msg.what == EZRealPlayConstants.MSG_REALPLAY_VOICETALK_SUCCESS) { handleVoiceTalkSucceed(); } else if (msg.what == EZRealPlayConstants.MSG_REALPLAY_VOICETALK_STOP) { handleVoiceTalkStoped(false); } else if (msg.what == EZRealPlayConstants.MSG_REALPLAY_VOICETALK_FAIL) { ErrorInfo errorInfo = (ErrorInfo) msg.obj; handleVoiceTalkFailed(errorInfo); } else if (msg.what == MSG_PLAY_UI_UPDATE) { updateRealPlayUI(); } else if (msg.what == MSG_AUTO_START_PLAY) { startRealPlay(); } else if (msg.what == MSG_CLOSE_PTZ_PROMPT) { mRealPlayFullPtzPromptIv.setVisibility(View.GONE); } else if (msg.what == MSG_HIDE_PTZ_DIRECTION) { handleHidePtzDirection(msg); } else if (msg.what == MSG_HIDE_PAGE_ANIM) { hidePageAnim(); } else if (msg.what == MSG_PLAY_UI_REFRESH) { initUI(); } else if (msg.what == MSG_PREVIEW_START_PLAY) { mPageAnimIv.setVisibility(View.GONE); mRealPlayPreviewTv.setVisibility(View.GONE); mStatus = RealPlayStatus.STATUS_INIT; startRealPlay(); } else if (msg.what == MSG_GOT_STREAM_TYPE) { showStreamType(msg.arg1); } return false; } private void showDecodeType() { if (mEZPlayer != null && mEZPlayer.getPlayPort() >= 0) { int intDecodeType = Player.getInstance().getDecoderType(mEZPlayer.getPlayPort()); String strDecodeType; if (intDecodeType == 1) { strDecodeType = "hard"; } else { strDecodeType = "soft"; } String streamTypeMsg = "decode type: " + strDecodeType; TextView streamTypeTv = (TextView) findViewById(R.id.tv_decode_type); if (streamTypeTv != null) { streamTypeTv.setText(streamTypeMsg); streamTypeTv.setVisibility(View.VISIBLE); } } } private void showStreamType(int streamType) { String streamTypeMsg = getApplicationContext().getString(R.string.stream_type) + changeIntTypeToStringType(streamType); TextView streamTypeTv = (TextView) findViewById(R.id.tv_stream_type); if (streamTypeTv != null) { streamTypeTv.setText(streamTypeMsg); streamTypeTv.setVisibility(View.VISIBLE); } } private String changeIntTypeToStringType(int streamType) { String strStreamType = ""; /* 取流方式切换到私有流媒体转发模式 */ if (streamType == 0) { strStreamType = "private_stream"; /* 取流方式切换到P2P模式 */ } else if (streamType == 1) { strStreamType = "p2p"; /* 取流方式切换到内网直连模式 */ } else if (streamType == 2) { strStreamType = "direct_inner"; /* 取流方式切换到外网直连模式 */ } else if (streamType == 3) { strStreamType = "direct_outer"; /* 取流方式切换到云存储回放 */ } else if (streamType == 4) { strStreamType = "cloud_playback"; /* 取流方式切换到云存储留言 */ } else if (streamType == 5) { strStreamType = "cloud_leave_msg"; /* 取流方式切换到反向直连模式 */ } else if (streamType == 6) { strStreamType = "direct_reverse"; /* 取流方式切换到HCNETSDK */ } else if (streamType == 7) { strStreamType = "hcnetsdk"; } else { strStreamType = "unknown(" + streamType + ")"; } return strStreamType; } private void handleHidePtzDirection(Message msg) { if (mHandler == null) { return; } mHandler.removeMessages(MSG_HIDE_PTZ_DIRECTION); if (msg.arg1 > 2) { mRealPlayPtzDirectionIv.setVisibility(View.GONE); } else { mRealPlayPtzDirectionIv.setVisibility(msg.arg1 == 1 ? View.GONE : View.VISIBLE); Message message = new Message(); message.what = MSG_HIDE_PTZ_DIRECTION; message.arg1 = msg.arg1 + 1; mHandler.sendMessageDelayed(message, 500); } } private void handlePtzControlFail(Message msg) { LogUtil.d(TAG, "handlePtzControlFail:" + msg.arg1); // 当前正在开启隐私遮蔽 Is currently opening privacy masking // 当前正在关闭隐私遮蔽 The privacy mask is currently being turned off // 设备正在键控动作(上下左右)(一个客户端在上下左右控制,另外一个在开其它东西) The device is keying action (up and down left and right) (a client in the upper and lower left and right control, the other one in the open other things) // 云台当前操作失败 PTZ current operation failed // 设备云台旋转到达上限位 The PTZ rotation reaches the upper limit // 设备云台旋转到达下限位 The PTZ rotation reaches the lower limit // 设备云台旋转到达左限位 The PTZ rotation reaches the left limit if (msg.arg1 == ErrorCode.ERROR_CAS_PTZ_CONTROL_CALLING_PRESET_FAILED) {// 正在调用预置点,键控动作无效 //Calling preset point, name action is invalid Utils.showToast(EZRealPlayActivity.this, R.string.camera_lens_too_busy, msg.arg1); } else if (msg.arg1 == ErrorCode.ERROR_CAS_PTZ_PRESET_PRESETING_FAILE) {// 当前正在调用预置点 Utils.showToast(EZRealPlayActivity.this, R.string.ptz_is_preseting, msg.arg1); } else if (msg.arg1 == ErrorCode.ERROR_CAS_PTZ_CONTROL_TIMEOUT_SOUND_LACALIZATION_FAILED) {// 当前正在声源定位 //Is currently locating at sound source } else if (msg.arg1 == ErrorCode.ERROR_CAS_PTZ_CONTROL_TIMEOUT_CRUISE_TRACK_FAILED) {// 键控动作超时(当前正在轨迹巡航) //Key action timeout (currently tracing) Utils.showToast(EZRealPlayActivity.this, R.string.ptz_control_timeout_cruise_track_failed, msg.arg1); } else if (msg.arg1 == ErrorCode.ERROR_CAS_PTZ_PRESET_INVALID_POSITION_FAILED) {// 当前预置点信息无效 //The current preset information is invalid Utils.showToast(EZRealPlayActivity.this, R.string.ptz_preset_invalid_position_failed, msg.arg1); } else if (msg.arg1 == ErrorCode.ERROR_CAS_PTZ_PRESET_CURRENT_POSITION_FAILED) {// 该预置点已是当前位置 //The preset point is the current position Utils.showToast(EZRealPlayActivity.this, R.string.ptz_preset_current_position_failed, msg.arg1); } else if (msg.arg1 == ErrorCode.ERROR_CAS_PTZ_PRESET_SOUND_LOCALIZATION_FAILED) {// 设备正在响应本次声源定位 //The device is responding to this sound source location Utils.showToast(EZRealPlayActivity.this, R.string.ptz_preset_sound_localization_failed, msg.arg1); } else if (msg.arg1 == ErrorCode.ERROR_CAS_PTZ_OPENING_PRIVACY_FAILED || msg.arg1 == ErrorCode.ERROR_CAS_PTZ_CLOSING_PRIVACY_FAILED || msg.arg1 == ErrorCode.ERROR_CAS_PTZ_MIRRORING_FAILED) {// 设备正在镜像操作(设备镜像要几秒钟,防止频繁镜像操作)The device is mirroring (the device mirroring takes a few seconds to prevent frequent mirroring) Utils.showToast(EZRealPlayActivity.this, R.string.ptz_operation_too_frequently, msg.arg1); } else if (msg.arg1 == ErrorCode.ERROR_CAS_PTZ_CONTROLING_FAILED) { } else if (msg.arg1 == ErrorCode.ERROR_CAS_PTZ_FAILED) { } else if (msg.arg1 == ErrorCode.ERROR_CAS_PTZ_PRESET_EXCEED_MAXNUM_FAILED) {// 当前预置点超过最大个数 The current preset exceeds the maximum number Utils.showToast(EZRealPlayActivity.this, R.string.ptz_preset_exceed_maxnum_failed, msg.arg1); } else if (msg.arg1 == ErrorCode.ERROR_CAS_PTZ_PRIVACYING_FAILED) {// 设备处于隐私遮蔽状态(关闭了镜头,再去操作云台相关)The device is in a privacy state (close the lens, and then operate the PTZ related) Utils.showToast(EZRealPlayActivity.this, R.string.ptz_privacying_failed, msg.arg1); } else if (msg.arg1 == ErrorCode.ERROR_CAS_PTZ_TTSING_FAILED) {// 设备处于语音对讲状态(区别以前的语音对讲错误码,云台单独列一个)Equipment in the voice intercom state (the difference between the previous voice intercom error code, PTZ separate one) Utils.showToast(EZRealPlayActivity.this, R.string.ptz_mirroring_failed, msg.arg1); } else if (msg.arg1 == ErrorCode.ERROR_CAS_PTZ_ROTATION_UP_LIMIT_FAILED || msg.arg1 == ErrorCode.ERROR_CAS_PTZ_ROTATION_DOWN_LIMIT_FAILED || msg.arg1 == ErrorCode.ERROR_CAS_PTZ_ROTATION_LEFT_LIMIT_FAILED || msg.arg1 == ErrorCode.ERROR_CAS_PTZ_ROTATION_RIGHT_LIMIT_FAILED) {// 设备云台旋转到达右限位 The PTZ rotation reaches the right limit setPtzDirectionIv(-1, msg.arg1); } else { Utils.showToast(EZRealPlayActivity.this, R.string.ptz_operation_failed, msg.arg1); } } private void hidePageAnim() { mHandler.removeMessages(MSG_HIDE_PAGE_ANIM); if (mPageAnimDrawable != null) { if (mPageAnimDrawable.isRunning()) { mPageAnimDrawable.stop(); } mPageAnimDrawable = null; mPageAnimIv.setBackgroundDrawable(null); mPageAnimIv.setVisibility(View.GONE); } if (mPageAnimIv != null) { mPageAnimIv.setBackgroundDrawable(null); mPageAnimIv.setVisibility(View.GONE); } } private void setRealPlayTalkUI() { if (mEZPlayer != null && mDeviceInfo != null && (mDeviceInfo.isSupportTalk() != EZConstants.EZTalkbackCapability.EZTalkbackNoSupport)) { mRealPlayTalkBtnLy.setVisibility(View.VISIBLE); if (mCameraInfo != null && mDeviceInfo.getStatus() == 1) { mRealPlayTalkBtn.setEnabled(true); } else { mRealPlayTalkBtn.setEnabled(false); } if (mDeviceInfo.isSupportTalk() != EZConstants.EZTalkbackCapability.EZTalkbackNoSupport) { mRealPlayFullTalkBtn.setVisibility(View.VISIBLE); } else { mRealPlayFullTalkBtn.setVisibility(View.GONE); } } else { mRealPlayTalkBtnLy.setVisibility(View.GONE); mRealPlayFullTalkBtn.setVisibility(View.GONE); } mRealPlayTalkBtnLy.setVisibility(View.VISIBLE); //mRealPlayTalkBtn.setEnabled(false); } private void updatePermissionUI() { mRealPlayTalkBtnLy.setVisibility(View.VISIBLE); } private void updateUI() { setRealPlayTalkUI(); setVideoLevel(); /* if (mRealPlayMgr != null && mRealPlayMgr.getSupportPtzPrivacy() == 1) { mRealPlayPrivacyBtnLy.setVisibility(View.VISIBLE); if (mCameraInfo.getOnlineStatus() == 1 && mRealPlayMgr.getPrivacyStatus() != 1) { mRealPlayQualityBtn.setEnabled(true); } else { mRealPlayQualityBtn.setEnabled(false); } } else { mRealPlayPrivacyBtnLy.setVisibility(View.GONE); } */ // mRealPlayPrivacyBtnLy.setVisibility(View.GONE); // setSoundLocalizationUI(); { mRealPlaySslBtnLy.setVisibility(View.GONE); } if (getSupportPtz() == 1) { mRealPlayPtzBtnLy.setVisibility(View.VISIBLE); mRealPlayFullPtzBtn.setVisibility(View.VISIBLE); } else { //mRealPlayPtzBtnLy.setVisibility(View.GONE); //mRealPlayFullPtzBtn.setVisibility(View.GONE); mRealPlayPtzBtnLy.setEnabled(false); mRealPlayFullPtzBtn.setEnabled(false); } updatePermissionUI(); } private void handleGetCameraInfoSuccess() { LogUtil.i(TAG, "handleGetCameraInfoSuccess"); updateUI(); } private void handleVoiceTalkSucceed() { if (mOrientation == Configuration.ORIENTATION_PORTRAIT) { openTalkPopupWindow(true); } else { mRealPlayFullTalkAnimBtn.setVisibility(View.VISIBLE); // mFullscreenFullButton.setVisibility(View.VISIBLE); ((AnimationDrawable) mRealPlayFullTalkAnimBtn.getBackground()).start(); } mRealPlayTalkBtn.setEnabled(true); mRealPlayFullTalkBtn.setEnabled(true); mRealPlayFullTalkAnimBtn.setEnabled(true); } private void handleVoiceTalkFailed(ErrorInfo errorInfo) { LogUtil.d(TAG, "Talkback failed. " + errorInfo.toString()); closeTalkPopupWindow(true, false); if (errorInfo.errorCode == ErrorCode.ERROR_TRANSF_DEVICE_TALKING) { Utils.showToast(EZRealPlayActivity.this, R.string.realplay_play_talkback_fail_ison); } else if (errorInfo.errorCode == ErrorCode.ERROR_TRANSF_DEVICE_PRIVACYON) { Utils.showToast(EZRealPlayActivity.this, R.string.realplay_play_talkback_fail_privacy); } else if (errorInfo.errorCode == ErrorCode.ERROR_TRANSF_DEVICE_OFFLINE) { Utils.showToast(EZRealPlayActivity.this, R.string.realplay_fail_device_not_exist); } else if (errorInfo.errorCode == ErrorCode.ERROR_TTS_MSG_REQ_TIMEOUT || errorInfo.errorCode == ErrorCode.ERROR_TTS_MSG_SVR_HANDLE_TIMEOUT || errorInfo.errorCode == ErrorCode.ERROR_TTS_WAIT_TIMEOUT || errorInfo.errorCode == ErrorCode.ERROR_TTS_HNADLE_TIMEOUT) { Utils.showToast(EZRealPlayActivity.this, R.string.realplay_play_talkback_request_timeout, errorInfo.errorCode); } else if (errorInfo.errorCode == ErrorCode.ERROR_CAS_AUDIO_SOCKET_ERROR || errorInfo.errorCode == ErrorCode.ERROR_CAS_AUDIO_RECV_ERROR || errorInfo.errorCode == ErrorCode.ERROR_CAS_AUDIO_SEND_ERROR) { Utils.showToast(EZRealPlayActivity.this, R.string.realplay_play_talkback_network_exception, errorInfo.errorCode); } else { Utils.showToast(EZRealPlayActivity.this, R.string.realplay_play_talkback_fail, errorInfo.errorCode); } } private void handleVoiceTalkStoped(boolean startAnim) { if (mIsOnTalk) { mIsOnTalk = false; setForceOrientation(0); } if (mOrientation == Configuration.ORIENTATION_LANDSCAPE) { if (startAnim) { mRealPlayFullTalkAnimBtn.setVisibility(View.GONE); mFullscreenFullButton.setVisibility(View.GONE); mRealPlayFullAnimBtn.setBackgroundResource(R.drawable.speech_1); startFullBtnAnim(mRealPlayFullAnimBtn, mEndXy, mStartXy, new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { mRealPlayFullAnimBtn.setVisibility(View.GONE); onRealPlaySvClick(); } }); } else { mRealPlayFullTalkAnimBtn.setVisibility(View.GONE); mFullscreenFullButton.setVisibility(View.GONE); } } mRealPlayTalkBtn.setEnabled(true); mRealPlayFullTalkBtn.setEnabled(true); mRealPlayFullTalkAnimBtn.setEnabled(true); if (mStatus == RealPlayStatus.STATUS_PLAY) { if (mEZPlayer != null) { if (mLocalInfo.isSoundOpen()) { mEZPlayer.openSound(); } else { mEZPlayer.closeSound(); } } } } private void handleSetVedioModeSuccess() { closeQualityPopupWindow(); setVideoLevel(); try { mWaitDialog.setWaitText(null); mWaitDialog.dismiss(); } catch (Exception e) { e.printStackTrace(); } if (mStatus == RealPlayStatus.STATUS_PLAY) { // 停止对讲 closeTalkPopupWindow(true, false); // 停止播放 Stop play stopRealPlay(); SystemClock.sleep(500); // 开始播放 start play startRealPlay(); } } private void handleSetVedioModeFail(int errorCode) { closeQualityPopupWindow(); setVideoLevel(); try { mWaitDialog.setWaitText(null); mWaitDialog.dismiss(); } catch (Exception e) { e.printStackTrace(); } Utils.showToast(EZRealPlayActivity.this, R.string.realplay_set_vediomode_fail, errorCode); } private void handleRecordSuccess(String recordFilePath) { if (mCameraInfo == null) { return; } if (mOrientation == Configuration.ORIENTATION_PORTRAIT) { if (!mIsOnStop) { mRecordRotateViewUtil.applyRotation(mRealPlayRecordContainer, mRealPlayRecordBtn, mRealPlayRecordStartBtn, 0, 90); } else { mRealPlayRecordBtn.setVisibility(View.GONE); mRealPlayRecordStartBtn.setVisibility(View.VISIBLE); } mRealPlayFullRecordBtn.setVisibility(View.GONE); mRealPlayFullRecordStartBtn.setVisibility(View.VISIBLE); } else { if (!mIsOnStop) { mRecordRotateViewUtil.applyRotation(mRealPlayFullRecordContainer, mRealPlayFullRecordBtn, mRealPlayFullRecordStartBtn, 0, 90); } else { mRealPlayFullRecordBtn.setVisibility(View.GONE); mRealPlayFullRecordStartBtn.setVisibility(View.VISIBLE); } mRealPlayRecordBtn.setVisibility(View.GONE); mRealPlayRecordStartBtn.setVisibility(View.VISIBLE); } isRecording = true; mRealPlayRecordLy.setVisibility(View.VISIBLE); mRealPlayRecordTv.setText("00:00"); mRecordSecond = 0; } private void handleRecordFail() { Utils.showToast(EZRealPlayActivity.this, R.string.remoteplayback_record_fail); if (isRecording) { stopRealPlayRecord(); } } private void hideControlRlAndFullOperateBar(boolean excludeLandscapeTitle) { // mRealPlayControlRl.setVisibility(View.GONE); closeQualityPopupWindow(); if (mRealPlayFullOperateBar != null) { mRealPlayFullOperateBar.setVisibility(View.GONE); if (mOrientation == Configuration.ORIENTATION_PORTRAIT) { mFullscreenFullButton.setVisibility(View.GONE); } else { if (!mIsOnTalk && !mIsOnPtz) { mFullscreenFullButton.setVisibility(View.GONE); } } } if (excludeLandscapeTitle && mOrientation == Configuration.ORIENTATION_LANDSCAPE) { if (!mIsOnTalk && !mIsOnPtz) { mLandscapeTitleBar.setVisibility(View.VISIBLE); } } else { mLandscapeTitleBar.setVisibility(View.GONE); } } private void updateRealPlayUI() { if (mControlDisplaySec == 5) { mControlDisplaySec = 0; hideControlRlAndFullOperateBar(false); } checkRealPlayFlow(); updateCaptureUI(); if (isRecording) { updateRecordTime(); } } private void initCaptureUI() { mCaptureDisplaySec = 0; mRealPlayCaptureRl.setVisibility(View.GONE); mRealPlayCaptureIv.setImageURI(null); mRealPlayCaptureWatermarkIv.setTag(null); mRealPlayCaptureWatermarkIv.setVisibility(View.GONE); } // 更新抓图/录像显示UI //Update the capture / video display UI private void updateCaptureUI() { if (mRealPlayCaptureRl.getVisibility() == View.VISIBLE) { if (mOrientation == Configuration.ORIENTATION_PORTRAIT) { if (mRealPlayControlRl.getVisibility() == View.VISIBLE) { mRealPlayCaptureRlLp.setMargins(0, 0, 0, Utils.dip2px(this, 40)); } else { mRealPlayCaptureRlLp.setMargins(0, 0, 0, 0); } mRealPlayCaptureRl.setLayoutParams(mRealPlayCaptureRlLp); } else { LayoutParams realPlayCaptureRlLp = new LayoutParams( Utils.dip2px(this, 65), Utils.dip2px(this, 45)); realPlayCaptureRlLp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); realPlayCaptureRlLp.addRule(RelativeLayout.ALIGN_PARENT_LEFT); mRealPlayCaptureRl.setLayoutParams(realPlayCaptureRlLp); } if (mRealPlayCaptureWatermarkIv.getTag() != null) { mRealPlayCaptureWatermarkIv.setVisibility(View.VISIBLE); mRealPlayCaptureWatermarkIv.setTag(null); } } if (mCaptureDisplaySec >= 4) { initCaptureUI(); } } private void updateRecordTime() { if (mRealPlayRecordIv.getVisibility() == View.VISIBLE) { mRealPlayRecordIv.setVisibility(View.INVISIBLE); } else { mRealPlayRecordIv.setVisibility(View.VISIBLE); } int leftSecond = mRecordSecond % 3600; int minitue = leftSecond / 60; int second = leftSecond % 60; String recordTime = String.format("%02d:%02d", minitue, second); mRealPlayRecordTv.setText(recordTime); } // 处理密码错误 //Processing password is wrong private void handlePasswordError(int title_resid, int msg1_resid, int msg2_resid) { stopRealPlay(); setRealPlayStopUI(); LogUtil.d(TAG, "startRealPlay"); if (mCameraInfo == null || mStatus == RealPlayStatus.STATUS_START || mStatus == RealPlayStatus.STATUS_PLAY) { return; } // Check if the network is available if (!ConnectionDetector.isNetworkAvailable(this)) { // 提示没有连接网络 Prompt not to connect to the network setRealPlayFailUI(getString(R.string.realplay_play_fail_becauseof_network)); return; } mStatus = RealPlayStatus.STATUS_START; setRealPlayLoadingUI(); updateLoadingProgress(0); } private void handlePlaySuccess(Message msg) { LogUtil.d(TAG, "handlePlaySuccess"); mStatus = RealPlayStatus.STATUS_PLAY; // 声音处理 Sound processing setRealPlaySound(); // temp solution for OPENSDK-92 // Android 预览3Q10的时候切到流畅之后 视频播放窗口变大了 // if (description.arg1 != 0) { // mRealRatio = (float) description.arg2 / description.arg1; // } else { // mRealRatio = Constant.LIVE_VIEW_RATIO; // } mRealRatio = Constant.LIVE_VIEW_RATIO; boolean bSupport = true;//(float) mLocalInfo.getScreenHeight() / mLocalInfo.getScreenWidth() >= BIG_SCREEN_RATIO; if (bSupport) { initOperateBarUI(mRealRatio <= Constant.LIVE_VIEW_RATIO); initUI(); if (mRealRatio <= Constant.LIVE_VIEW_RATIO) { setBigScreenOperateBtnLayout(); } } setRealPlaySvLayout(); setRealPlaySuccessUI(); updatePtzUI(); // startPrivacyAnim(); updateTalkUI(); if (mDeviceInfo != null && mDeviceInfo.isSupportTalk() != EZConstants.EZTalkbackCapability.EZTalkbackNoSupport) { mRealPlayTalkBtn.setEnabled(true); } else { mRealPlayTalkBtn.setEnabled(false); } if (mEZPlayer != null) { mStreamFlow = mEZPlayer.getStreamFlow(); } } private void setRealPlaySvLayout() { final int screenWidth = mLocalInfo.getScreenWidth(); final int screenHeight = (mOrientation == Configuration.ORIENTATION_PORTRAIT) ? (mLocalInfo.getScreenHeight() - mLocalInfo .getNavigationBarHeight()) : mLocalInfo.getScreenHeight(); final LayoutParams realPlaySvlp = Utils.getPlayViewLp(mRealRatio, mOrientation, mLocalInfo.getScreenWidth(), (int) (mLocalInfo.getScreenWidth() * Constant.LIVE_VIEW_RATIO), screenWidth, screenHeight); LayoutParams svLp = new LayoutParams(realPlaySvlp.width, realPlaySvlp.height); ViewGroup playWindowVg = (ViewGroup) findViewById(R.id.vg_play_window); playWindowVg.setLayoutParams(svLp); if (mRtspUrl == null) { // do nothing } else { LinearLayout.LayoutParams realPlayPlayRlLp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); realPlayPlayRlLp.gravity = Gravity.CENTER; mRealPlayPlayRl.setLayoutParams(realPlayPlayRlLp); } mRealPlayTouchListener.setSacaleRect(Constant.MAX_SCALE, 0, 0, realPlaySvlp.width, realPlaySvlp.height); } private void handlePlayFail(Object obj) { int errorCode = 0; if (obj != null) { ErrorInfo errorInfo = (ErrorInfo) obj; errorCode = errorInfo.errorCode; LogUtil.d(TAG, "handlePlayFail:" + errorInfo.errorCode); } hidePageAnim(); stopRealPlay(); updateRealPlayFailUI(errorCode); } private void updateRealPlayFailUI(int errorCode) { String txt = null; LogUtil.i(TAG, "updateRealPlayFailUI: errorCode:" + errorCode); // 判断返回的错误码 if (errorCode == ErrorCode.ERROR_TRANSF_ACCESSTOKEN_ERROR) { ActivityUtils.goToLoginAgain(EZRealPlayActivity.this); return; } else if (errorCode == ErrorCode.ERROR_CAS_MSG_PU_NO_RESOURCE) { txt = getString(R.string.remoteplayback_over_link); } else if (errorCode == ErrorCode.ERROR_TRANSF_DEVICE_OFFLINE) { if (mCameraInfo != null) { mCameraInfo.setIsShared(0); } txt = getString(R.string.realplay_fail_device_not_exist); } else if (errorCode == ErrorCode.ERROR_INNER_STREAM_TIMEOUT) { txt = getString(R.string.realplay_fail_connect_device); } else if (errorCode == ErrorCode.ERROR_WEB_CODE_ERROR) {//VerifySmsCodeUtil.openSmsVerifyDialog(Constant.SMS_VERIFY_LOGIN, this, this); //txt = Utils.getErrorTip(this, R.string.check_feature_code_fail, errorCode); } else if (errorCode == ErrorCode.ERROR_WEB_HARDWARE_SIGNATURE_OP_ERROR) {//VerifySmsCodeUtil.openSmsVerifyDialog(Constant.SMS_VERIFY_HARDWARE, this, null); // SecureValidate.secureValidateDialog(this, this); //txt = Utils.getErrorTip(this, R.string.check_feature_code_fail, errorCode); } else if (errorCode == ErrorCode.ERROR_TRANSF_TERMINAL_BINDING) { txt = "请在萤石客户端关闭终端绑定 " + "Please close the terminal binding on the fluorite client"; // 收到这两个错误码,可以弹出对话框,让用户输入密码后,重新取流预览 } else if (errorCode == ErrorCode.ERROR_INNER_VERIFYCODE_NEED || errorCode == ErrorCode.ERROR_INNER_VERIFYCODE_ERROR) { DataManager.getInstance().setDeviceSerialVerifyCode(mCameraInfo.getDeviceSerial(), null); VerifyCodeInput.VerifyCodeInputDialog(this, this).show(); } else { txt = Utils.getErrorTip(this, R.string.realplay_play_fail, errorCode); } if (!TextUtils.isEmpty(txt)) { setRealPlayFailUI(txt); } else { setRealPlayStopUI(); } } private void startUpdateTimer() { stopUpdateTimer(); mUpdateTimer = new Timer(); mUpdateTimerTask = new TimerTask() { @Override public void run() { if (mLandscapeTitleBar != null && mRealPlayControlRl != null && (mLandscapeTitleBar.getVisibility() == View.VISIBLE || mRealPlayControlRl.getVisibility() == View.VISIBLE) && mControlDisplaySec < 5) { mControlDisplaySec++; } if (mRealPlayCaptureRl != null && mRealPlayCaptureRl.getVisibility() == View.VISIBLE && mCaptureDisplaySec < 4) { mCaptureDisplaySec++; } if (mEZPlayer != null && isRecording) { Calendar OSDTime = mEZPlayer.getOSDTime(); if (OSDTime != null) { String playtime = Utils.OSD2Time(OSDTime); if (!TextUtils.equals(playtime, mRecordTime)) { mRecordSecond++; mRecordTime = playtime; } } } if (mHandler != null) { mHandler.sendEmptyMessage(MSG_PLAY_UI_UPDATE); } } }; mUpdateTimer.schedule(mUpdateTimerTask, 0, 1000); } private void stopUpdateTimer() { mCaptureDisplaySec = 4; updateCaptureUI(); mHandler.removeMessages(MSG_PLAY_UI_UPDATE); if (mUpdateTimer != null) { mUpdateTimer.cancel(); mUpdateTimer = null; } if (mUpdateTimerTask != null) { mUpdateTimerTask.cancel(); mUpdateTimerTask = null; } } private void dismissPopWindow(PopupWindow popupWindow) { if (popupWindow != null && !isFinishing()) { try { popupWindow.dismiss(); } catch (Exception e) { // TODO: handle exception } } } /* * (non-Javadoc) * @see android.view.View.OnTouchListener#onTouch(android.view.View, android.view.MotionEvent) */ @Override public boolean onTouch(View v, MotionEvent event) { int id = v.getId(); if (id == R.id.realplay_pages_gallery) { mRealPlayTouchListener.touch(v, event); } else if (id == R.id.realplay_full_operate_bar) { return true; } return false; } private void showType() { if (Config.LOGGING && mEZPlayer != null) { Utils.showLog(EZRealPlayActivity.this, "cost: " + (mStopTime - mStartTime) + " ms"); } } private void initLoadingUI() { mRealPlayLoadingRl = (RelativeLayout) findViewById(R.id.realplay_loading_rl); mRealPlayTipTv = (TextView) findViewById(R.id.realplay_tip_tv); mRealPlayPlayIv = (ImageView) findViewById(R.id.realplay_play_iv); mRealPlayPlayLoading = (LoadingTextView) findViewById(R.id.realplay_loading); mRealPlayPlayPrivacyLy = (LinearLayout) findViewById(R.id.realplay_privacy_ly); mRealPlayPlayIv.setOnClickListener(this); mPageAnimIv = (ImageView) findViewById(R.id.realplay_page_anim_iv); } private void updateLoadingProgress(final int progress) { mRealPlayPlayLoading.setTag(Integer.valueOf(progress)); mRealPlayPlayLoading.setText(progress + "%"); mHandler.postDelayed(new Runnable() { @Override public void run() { if (mRealPlayPlayLoading != null) { Integer tag = (Integer) mRealPlayPlayLoading.getTag(); if (tag != null && tag.intValue() == progress) { Random r = new Random(); mRealPlayPlayLoading.setText((progress + r.nextInt(20)) + "%"); } } } }, 500); } private void setStartloading() { mRealPlayLoadingRl.setVisibility(View.VISIBLE); mRealPlayTipTv.setVisibility(View.GONE); mRealPlayPlayLoading.setVisibility(View.VISIBLE); mRealPlayPlayIv.setVisibility(View.GONE); mRealPlayPlayPrivacyLy.setVisibility(View.GONE); } public void setStopLoading() { mRealPlayLoadingRl.setVisibility(View.VISIBLE); mRealPlayTipTv.setVisibility(View.GONE); mRealPlayPlayLoading.setVisibility(View.GONE); mRealPlayPlayIv.setVisibility(View.VISIBLE); mRealPlayPlayPrivacyLy.setVisibility(View.GONE); } public void setLoadingFail(String errorStr) { mRealPlayLoadingRl.setVisibility(View.VISIBLE); mRealPlayTipTv.setVisibility(View.VISIBLE); mRealPlayTipTv.setText(errorStr); mRealPlayPlayLoading.setVisibility(View.GONE); mRealPlayPlayIv.setVisibility(View.GONE); mRealPlayPlayPrivacyLy.setVisibility(View.GONE); } private void setPrivacy() { mRealPlayLoadingRl.setVisibility(View.VISIBLE); mRealPlayTipTv.setVisibility(View.GONE); mRealPlayPlayLoading.setVisibility(View.GONE); mRealPlayPlayIv.setVisibility(View.GONE); mRealPlayPlayPrivacyLy.setVisibility(View.VISIBLE); } private void setLoadingSuccess() { mRealPlayLoadingRl.setVisibility(View.INVISIBLE); mRealPlayTipTv.setVisibility(View.GONE); mRealPlayPlayLoading.setVisibility(View.GONE); mRealPlayPlayIv.setVisibility(View.GONE); } @Override public void onInputVerifyCode(final String verifyCode) { LogUtil.d(TAG, "verify code is " + verifyCode); DataManager.getInstance().setDeviceSerialVerifyCode(mCameraInfo.getDeviceSerial(), verifyCode); if (mEZPlayer != null) { startRealPlay(); } } FileOutputStream mOs; private EZOpenSDKListener.EZStandardFlowCallback mLocalRecordCb = new EZOpenSDKListener.EZStandardFlowCallback() { @Override public void onStandardFlowCallback(int type, byte[] data, int dataLen) { LogUtil.v(TAG, "standard flow. type is " + type + ". dataLen is " + dataLen + ". data0 is " + data[0]); if (mOs == null) { File f = new File("/sdcard/videogo.mp4"); try { mOs = new FileOutputStream(f); } catch (FileNotFoundException e) { e.printStackTrace(); LogUtil.e(TAG, "new record file failed"); return; } } try { mOs.write(data, 0, dataLen); } catch (IOException e) { e.printStackTrace(); } finally { } } }; }