From c7b610efc80f0c9ebfa30ff5037b9776fe463017 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Tue, 2 Mar 2021 18:30:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E4=BA=86=E5=A4=9A=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E7=99=BB=E5=BD=95=E6=93=8D=E4=BD=9C=E6=9D=A5=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E5=90=8C=E4=B8=80=E8=AE=BE=E5=A4=87=E6=8E=A8=E6=B5=81?= =?UTF-8?q?=E5=90=8C=E6=97=B6=E6=8B=89=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/gradle.xml | 1 - app/src/main/AndroidManifest.xml | 6 +- .../java/com/mogo/cloud/BaseLiveActivity.java | 36 ++++- .../mogo/cloud/LivePlayAndPushActivity.java | 126 ++++++++++++++++++ .../java/com/mogo/cloud/LivePushActivity.java | 9 +- .../java/com/mogo/cloud/MainActivity.java | 8 +- .../main/res/layout/activity_live_play.xml | 2 +- .../layout/activity_live_play_and_push.xml | 106 +++++++++++++++ app/src/main/res/layout/activity_main.xml | 13 +- .../live/manager/LiveStreamManagerImpl.java | 53 +++++--- .../cloud/live/manager/MoGoLiveManager.java | 74 +++++++--- .../mogo/cloud/live/server/PushService.java | 68 ++-------- .../trafficlive/core/TrafficLiveManager.java | 46 +++++-- 13 files changed, 429 insertions(+), 119 deletions(-) create mode 100644 app/src/main/java/com/mogo/cloud/LivePlayAndPushActivity.java create mode 100644 app/src/main/res/layout/activity_live_play_and_push.xml 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="路况服务测试" /> +