diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 8116b81..1563bc1 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -26,7 +26,6 @@ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d060819..7ea2c35 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -43,12 +43,12 @@ android:label="配置信息" android:launchMode="singleTask" /> { Toast.makeText(getApplicationContext(), buttonView.getText(), Toast.LENGTH_SHORT).show(); @@ -67,6 +77,15 @@ public abstract class BaseLiveActivity extends AppCompatActivity { tbLiveStatus = findViewById(R.id.tbLiveStatus); + surfacePlayView = findViewById(R.id.surfacePlayView); + etLookRoomId = findViewById(R.id.etLookRoomId); + liveToggleBtn = findViewById(R.id.liveToggleBtn); + liveToggleBtn.setOnCheckedChangeListener((buttonView, isChecked) -> { + Toast.makeText(getApplicationContext(), buttonView.getText(), Toast.LENGTH_SHORT).show(); + togglePlay(isChecked); + }); + tvWifiState = findViewById(R.id.tvWifiState); + initCamer(); } @@ -106,7 +125,7 @@ public abstract class BaseLiveActivity extends AppCompatActivity { }); // 这里是纯预览 - surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { + surfacePreviewView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { Log.i(TAG, "addSurfaceCallBack id"); @@ -157,4 +176,11 @@ public abstract class BaseLiveActivity extends AppCompatActivity { */ public abstract void toggleCameraState(boolean isLive); + /** + * 开关查看直播 + * + * @param isPlay true-查看直播,false-不查看直播 + */ + public abstract void togglePlay(boolean isPlay); + } \ No newline at end of file diff --git a/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java b/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java new file mode 100644 index 0000000..1766c43 --- /dev/null +++ b/app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java @@ -0,0 +1,126 @@ +package com.mogo.cloud; + +import android.net.wifi.WifiInfo; +import android.os.Bundle; +import android.util.Log; + +import com.mogo.cloud.live.listener.ILiveStatusListener; +import com.mogo.cloud.live.manager.ILiveStreamManager; +import com.mogo.cloud.live.manager.LiveStreamManagerImpl; +import com.mogo.cloud.passport.MoGoAiCloudClientConfig; +import com.mogo.cloud.trafficlive.api.ITrafficLiveCallBack; +import com.mogo.cloud.trafficlive.api.MoGoAiCloudTrafficLive; +import com.mogo.cloud.wifi.IWifiStateListener; +import com.mogo.cloud.wifi.WifiStateManager; + + +/** + * 推流和拉流页面 + */ +public class LivePlayAndPushActivity extends BaseLiveActivity implements ITrafficLiveCallBack, IWifiStateListener { + public static final String TAG = "PushActivity"; + + private String liveSn; + + ILiveStreamManager liveStreamManager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + WifiStateManager.getInstance().registerWifiStateListener(this); + + // 初始化直播流管理 + liveStreamManager = LiveStreamManagerImpl.getInstance(this.getApplication(), + MoGoAiCloudClientConfig.getInstance().getThirdPartyDeviceId()); + + // 设置状态回调 + liveStreamManager.setLiveStatusChangeCallback(new ILiveStatusListener() { + @Override + public void onChange(String camId, int status) { + tbLiveStatus.post(new Runnable() { + @Override + public void run() { + if (status == 0) { + tbLiveStatus.setTextColor(getResources().getColor(R.color.colorStartLive)); + tbLiveStatus.setChecked(true); + } else { + tbLiveStatus.setTextColor(getResources().getColor(R.color.colorStopLive)); + tbLiveStatus.setChecked(false); + } + } + }); + } + }); + } + + @Override + public void onVideoFrame(byte[] bytes, int bytesLength) { + //Log.i(TAG, "onVideoFrame byte length: " + bytesLength); + if (liveStreamManager != null) { + // 将摄像头采集的YUV数据推送到ZEGO + liveStreamManager.notifyYUVData(bytes, 1280, 720, 3); + } + } + + @Override + public void toggleLive(boolean isLive) { + + } + + @Override + public void toggleCameraState(boolean isLive) { + Log.i(TAG, "toggleCameraState isLive: " + isLive); + if (isLive) { + // 上报摄像头状态,1-可用,2-不可用 + liveStreamManager.uploadCamStatus(1, 1); + } else { + liveStreamManager.uploadCamStatus(2, 2); + } + } + + @Override + public void togglePlay(boolean isPlay) { + if (isPlay) { + liveSn = etLookRoomId.getText().toString().trim(); + MoGoAiCloudTrafficLive.viewVehicleHeadLive(this.getApplication(), + liveSn, surfacePlayView, this); + } else { + MoGoAiCloudTrafficLive.stopLive(liveSn); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (liveStreamManager != null) { + // 停止 + liveStreamManager.stopLiveStream(); + // 释放资源 + liveStreamManager.release(); + } + + MoGoAiCloudTrafficLive.stopLive(liveSn); + MoGoAiCloudTrafficLive.destroyLive(); + WifiStateManager.getInstance().unRegisterWifiStateListener(this); + } + + @Override + public void onLive() { + Log.d(TAG, "开始直播 onLive"); + } + + @Override + public void onDisConnect() { + Log.d(TAG, "失去连接 onDisConnect"); + } + + @Override + public void onError(String errorMsg) { + Log.d(TAG, "发生错误 onError msg: " + errorMsg); + } + + @Override + public void onWifiState(WifiInfo wifiInfo) { + tvWifiState.setText("wifiLevel: " + Math.abs(wifiInfo.getRssi())); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/mogo/cloud/LivePushActivity.java b/app/src/main/java/com/mogo/cloud/LivePushActivity.java index 639510f..5d26f04 100644 --- a/app/src/main/java/com/mogo/cloud/LivePushActivity.java +++ b/app/src/main/java/com/mogo/cloud/LivePushActivity.java @@ -21,8 +21,10 @@ public class LivePushActivity extends BaseLiveActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 初始化直播流管理 - liveStreamManager = LiveStreamManagerImpl.getInstance(this, + liveStreamManager = LiveStreamManagerImpl.getInstance(this.getApplication(), MoGoAiCloudClientConfig.getInstance().getThirdPartyDeviceId()); + + // 设置状态回调 liveStreamManager.setLiveStatusChangeCallback(new ILiveStatusListener() { @Override public void onChange(String camId, int status) { @@ -67,6 +69,11 @@ public class LivePushActivity extends BaseLiveActivity { } } + @Override + public void togglePlay(boolean isPlay) { + + } + @Override protected void onDestroy() { super.onDestroy(); diff --git a/app/src/main/java/com/mogo/cloud/MainActivity.java b/app/src/main/java/com/mogo/cloud/MainActivity.java index d43d3af..7ebc22a 100644 --- a/app/src/main/java/com/mogo/cloud/MainActivity.java +++ b/app/src/main/java/com/mogo/cloud/MainActivity.java @@ -7,7 +7,6 @@ import android.text.TextUtils; import android.widget.Button; import android.widget.TextView; - import com.mogo.cloud.network.NetworkActivity; import com.mogo.cloud.passport.IMoGoTokenCallback; import com.mogo.cloud.passport.MoGoAiCloudClient; @@ -19,6 +18,7 @@ public class MainActivity extends AppCompatActivity { private Button btnJumpNetWorkPort; private Button btnJumpRealTime; private Button btnJumpRoadCondition; + private Button btnJumpLivePlayAndPush; private Button btnJumpLivePush; private Button btnJumpLivePlay; @@ -66,6 +66,12 @@ public class MainActivity extends AppCompatActivity { startActivity(intent); }); + btnJumpLivePlayAndPush = findViewById(R.id.btnJumpLivePlayAndPush); + btnJumpLivePlayAndPush.setOnClickListener(v -> { + Intent intent = new Intent(MainActivity.this, LivePlayAndPushActivity.class); + startActivity(intent); + }); + btnJumpLivePush = findViewById(R.id.btnJumpLivePush); btnJumpLivePush.setOnClickListener(v -> { Intent intent = new Intent(MainActivity.this, LivePushActivity.class); diff --git a/app/src/main/res/layout/activity_live_play.xml b/app/src/main/res/layout/activity_live_play.xml index dd0eca0..efd8e5d 100644 --- a/app/src/main/res/layout/activity_live_play.xml +++ b/app/src/main/res/layout/activity_live_play.xml @@ -14,7 +14,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入要查看的车机SN" - android:text="F803BB2037EZD00071" + android:text="F803EB2046PZD00149" android:textColor="#FFFF" app:layout_constraintBottom_toTopOf="@+id/liveToggleBtn" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/activity_live_play_and_push.xml b/app/src/main/res/layout/activity_live_play_and_push.xml new file mode 100644 index 0000000..bc80b7d --- /dev/null +++ b/app/src/main/res/layout/activity_live_play_and_push.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index ecde731..c3e69bd 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -72,16 +72,25 @@ android:layout_height="match_parent" android:text="路况服务测试" /> +