MainActivity:package com.videogo.ui.login;
import android.content.res.Configuration;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.videogo.exception.BaseException;
import com.videogo.exception.ErrorCode;
import com.videogo.openapi.EZConstants;
import com.videogo.openapi.EZOpenSDK;
import com.videogo.openapi.EZPlayer;
import ezviz.ezopensdk.R;
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback, Handler.Callback {
private static final String TAG = "EZPreview";
private static final int MSG_VIDEO_SIZE_CHANGED = 1;
private static final int MSG_REALPLAY_PLAY_SUCCESS = 2001;
private static final int MSG_REALPLAY_PLAY_FAIL = 2002;
// 接收的参数键
private static final String KEY_APPKEY = "appkey";
private static final String KEY_SERIAL = "serial";
private static final String KEY_VERIFYCODE = "VerifyCode";
private static final String KEY_ACCESSTOKEN = "accessToken";
private static final String KEY_CAMERANO = "cameraNo";
private EZPlayer mEZPlayer;
private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
// 从Intent中获取的参数
private String mAppKey;
private String mDeviceSerial;
private String mVerifyCode;
private String mAccessToken;
private int mCameraNo = 0; // 默认通道号0
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activitymain);
// 1. 从Intent中获取参数
extractParametersFromIntent();
// 2. 初始化UI
initUI();
// 3. 初始化SDK并创建播放器
initSDKAndCreatePlayer();
}
/**
* 从Intent中提取传递的参数
*/
private void extractParametersFromIntent() {
Bundle extras = getIntent().getExtras();
if (extras != null) {
mAppKey = extras.getString(KEY_APPKEY, "");
mDeviceSerial = extras.getString(KEY_SERIAL, "");
mVerifyCode = extras.getString(KEY_VERIFYCODE, "");
mAccessToken = extras.getString(KEY_ACCESSTOKEN, "");
mCameraNo = extras.getInt(KEY_CAMERANO, 0);
Log.d(TAG, "Received parameters:");
Log.d(TAG, "AppKey: " + mAppKey);
Log.d(TAG, "DeviceSerial: " + mDeviceSerial);
Log.d(TAG, "VerifyCode: " + mVerifyCode);
Log.d(TAG, "AccessToken: " + mAccessToken);
Log.d(TAG, "CameraNo: " + mCameraNo);
} else {
Log.e(TAG, "No parameters received from intent");
// 如果没有参数,可以显示错误信息并退出
finish();
}
}
/**
* 初始化UI组件
*/
private void initUI() {
mSurfaceView = findViewById(R.id.realplay_sv);
if (mSurfaceView != null) {
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);
} else {
Log.e(TAG, "SurfaceView not found with ID realplay_sv");
}
}
/**
* 初始化SDK并创建播放器
*/
private void initSDKAndCreatePlayer() {
try {
// 1. 初始化SDK
EZOpenSDK.initLib(getApplication(), mAppKey);
EZOpenSDK.getInstance().setAccessToken(mAccessToken);
// 2. 创建播放器
createPlayer();
} catch (Exception e) {
Log.e(TAG, "SDK initialization failed", e);
}
}
/**
* 创建播放器并开始播放
*/
private void createPlayer() {
try {
// 1. 创建播放器实例
mEZPlayer = EZOpenSDK.getInstance().createPlayer(mDeviceSerial, mCameraNo);
// 2. 配置播放器
mEZPlayer.setHandler(new Handler(this));
if (mSurfaceHolder != null) {
mEZPlayer.setSurfaceHold(mSurfaceHolder);
}
if (mVerifyCode != null && !mVerifyCode.isEmpty()) {
mEZPlayer.setPlayVerifyCode(mVerifyCode);
}
// 3. 开始播放
mEZPlayer.startRealPlay();
} catch (Exception e) {
Log.e(TAG, "Player creation failed", e);
}
}
// 处理屏幕旋转按钮点击
public void changeScreen(View view) {
Log.d(TAG, "Change screen orientation requested");
// 实际切换屏幕方向的代码
int currentOrientation = getResources().getConfiguration().orientation;
if (currentOrientation == Configuration.ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
// Surface回调接口实现
@Override
public void surfaceCreated(@NonNull SurfaceHolder holder) {
if (mEZPlayer != null) {
mEZPlayer.setSurfaceHold(holder);
}
}
@Override
public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {}
@Override
public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
if (mEZPlayer != null) {
mEZPlayer.setSurfaceHold(null);
}
}
@Override
protected void onStop() {
super.onStop();
if (mEZPlayer != null) {
mEZPlayer.stopRealPlay();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mEZPlayer != null) {
mEZPlayer.release();
mEZPlayer = null;
}
}
// Handler回调处理播放状态
@Override
public boolean handleMessage(@NonNull Message msg) {
Log.d(TAG, "handleMessage: " + msg.what);
switch (msg.what) {
case MSG_VIDEO_SIZE_CHANGED:
// 视频尺寸变化,可以调整SurfaceView的布局
break;
case MSG_REALPLAY_PLAY_SUCCESS:
Log.i(TAG, "播放成功");
break;
case MSG_REALPLAY_PLAY_FAIL:
Log.e(TAG, "播放失败");
BaseException error = (BaseException) msg.obj;
int errorCode = error.getErrorCode();
if (errorCode == ErrorCode.ERROR_INNER_VERIFYCODE_NEED ||
errorCode == ErrorCode.ERROR_INNER_VERIFYCODE_ERROR) {
// 处理验证码错误
// 这里应该提示用户输入验证码,然后重新设置并播放
// 示例中暂时保留模拟输入验证码
mVerifyCode = "123456";
if (mEZPlayer != null) {
mEZPlayer.setPlayVerifyCode(mVerifyCode);
mEZPlayer.startRealPlay();
}
} else {
Log.e(TAG, "播放失败,错误码: " + errorCode);
}
break;
}
return true;
}
}
activity.xml:<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff2f2f2"
tools:context="com.videogo.ui.login.MainActivity">
<RelativeLayout
android:id="@+id/ra_title"
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="@mipmap/title_bg">
<TextView
android:id="@+id/titlename"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:text="易丰视频监控"
android:textColor="@android:color/white"
android:textSize="18sp" />
<ImageButton
android:id="@+id/back"
android:layout_width="40dp"
android:layout_height="match_parent"
android:background="@null"
android:contentDescription="@null"
android:paddingLeft="10dp"
android:src="@mipmap/img_back" />
<ImageButton
android:id="@+id/ib_rotate"
android:layout_width="50dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:contentDescription="@null"
android:onClick="changeScreen"
android:layout_marginRight="6dp"
android:scaleType="centerInside"
android:background="@drawable/gps_select"
android:src="@mipmap/ic_size_sel" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl_control"
android:layout_width="match_parent"
android:layout_height="266dp"
android:layout_alignParentBottom="true"
>
<LinearLayout
android:id="@+id/ll_center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerInParent="true"
android:background="@mipmap/ycjk_yp"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_kb1" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_kb2" />
<ImageButton
android:visibility="gone"
android:id="@+id/left_up"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_kb3" />
</LinearLayout>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_kb4" />
</LinearLayout>
<ImageButton
android:id="@+id/ptz_top_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/nnew_video_up" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_kb1" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_kb3" />
<ImageButton
android:visibility="gone"
android:id="@+id/right_up"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_kb2" />
</LinearLayout>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_kb4" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent" >
<ImageButton
android:id="@+id/ptz_left_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/nnew_video_left" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_zj" />
<ImageButton
android:id="@+id/ptz_right_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/nnew_video_right" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_kb4" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_kb2" />
<ImageButton
android:visibility="gone"
android:id="@+id/left_down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_kb3" />
</LinearLayout>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_kb1" />
</LinearLayout>
<ImageButton
android:id="@+id/ptz_bottom_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/nnew_video_down" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_kb4" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_kb3" />
<ImageButton
android:visibility="gone"
android:id="@+id/right_down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_kb2" />
</LinearLayout>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ycjk_kb1" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toLeftOf="@id/ll_center"
android:gravity="center"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageButton
android:id="@+id/focus_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/video_more1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="16dp"
android:text="焦距 +"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" >
<ImageButton
android:id="@+id/guangquan_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/video_more3" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:text="光圈 +"
android:textSize="16dp"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" >
<ImageButton
android:id="@+id/zoom_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/video_more5" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:text="变倍 +"
android:textSize="16dp"
/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toRightOf="@id/ll_center"
android:gravity="center"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" >
<ImageButton
android:id="@+id/foucus_reduce"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/video_more2" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:text="焦距 -"
android:textSize="16dp"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" >
<ImageButton
android:id="@+id/guangquan_reduce"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/video_more4" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:text="光圈 -"
android:textSize="16dp"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" >
<ImageButton
android:id="@+id/zoom_reduce"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/video_more6" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:text="变倍 -"
android:textSize="16dp"
/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<RelativeLayout
android:layout_above="@id/rl_control"
android:layout_below="@id/ra_title"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<SurfaceView
android:id="@+id/realplay_sv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent" />
<ImageButton
android:id="@+id/ib_rotate2"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentLeft="true"
android:layout_marginLeft="3dp"
android:background="@color/green"
android:contentDescription="@null"
android:onClick="changeScreen"
android:src="@mipmap/img_systems_close" />
<ProgressBar
android:id="@+id/liveProgressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
<LinearLayout
android:id="@+id/ll_hc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="1" >
<ImageButton
android:id="@+id/ptz_top_btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/h_up" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="1" >
<ImageButton
android:id="@+id/ptz_bottom_btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/h_down" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="1" >
<ImageButton
android:id="@+id/ptz_left_btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/h_left" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="1" >
<ImageButton
android:id="@+id/ptz_right_btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/h_right" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="1" >
<ImageButton
android:id="@+id/focus_add2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/video_more1" />
</LinearLayout>
<LinearLayout
android:gravity="center"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" >
<ImageButton
android:id="@+id/foucus_reduce2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/video_more2" />
</LinearLayout>
<LinearLayout
android:gravity="center"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" >
<ImageButton
android:id="@+id/zoom_add2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/video_more5" />
</LinearLayout>
<LinearLayout
android:gravity="center"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" >
<ImageButton
android:id="@+id/zoom_reduce2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/video_more6" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
在上述代码中设置当直播画面realplay_sv在开始播放的时候隐藏就android:id="@+id/liveProgressBar"这个加载图标,当手机是竖屏的时候隐藏android:id="@+id/ll_hc"这一模块中的8个按钮以及android:id="@+id/ib_rotate2"这一个按钮,其他正常显示。当手机是横屏的时候隐藏android:id="@+id/rl_control"这一模块所有布局,其他正常显示。
最新发布