[Fix]解决视频直播问题

1. SurfaceView换成TextureView解决不能显示圆角问题
2. 从播放页回到摄像头列表页刷新下数据
3. UI细节调整
This commit is contained in:
chenfufeng
2021-11-25 11:13:56 +08:00
parent dc7f3c1f68
commit 337b03b22b
5 changed files with 54 additions and 28 deletions

View File

@@ -490,6 +490,10 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
else -> ivCameraIcon.setBackgroundResource(R.drawable.icon_camera_nor)
}
}
override fun refreshCameraList() {
cameraListView?.refreshCameraList(CallerMonitorManager.getCameraList())
}
})
cameraViewFloat = WarningFloat.with(it)
.setTag("CameraListFloat")

View File

@@ -36,7 +36,7 @@ class CameraListAdapter : Adapter<CameraListAdapter.CameraListHolder> {
data?.let {
val cameraEntity = it[position]
holder.cameraInfo.text = with(cameraEntity) {
if (!isCarLive()) "${crossingName}${headingDesc}${getHeadingStr()}" else "${street}${township}"
if (!isCarLive()) "${crossingName}${headingDesc}${getHeadingStr()}" else "${street ?: ""}${township}"
}
holder.bottomLine.visibility =
if (it.size - 1 == position) View.INVISIBLE else View.VISIBLE

View File

@@ -1,6 +1,7 @@
package com.mogo.eagle.core.function.hmi.ui.camera
import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.app.Application
import android.content.Context
import android.graphics.Color
@@ -42,7 +43,9 @@ class CameraListView : FrameLayout {
private val TAG = "CameraListView"
var cameraInfoList = ArrayList<CameraEntity>()
private val cameraInfoList by lazy {
ArrayList<CameraEntity>()
}
private var clickListener: ClickListener? = null
private val gsyVideoOptionBuilder by lazy {
GSYVideoOptionBuilder()
@@ -96,7 +99,10 @@ class CameraListView : FrameLayout {
when {
!cameraEntity.isCarLive() -> {
if (!cameraEntity.flvUrl.isNullOrEmpty()) {
Logger.d(TAG, "播放地址为:${cameraEntity.flvUrl!!}ip为${cameraEntity.ip}")
Logger.d(
TAG,
"播放地址为:${cameraEntity.flvUrl!!}ip为${cameraEntity.ip}"
)
gsyVideoPlay(cameraEntity.flvUrl!!)
} else if (!cameraEntity.ip.isNullOrEmpty()) {
Logger.d(TAG, "打开推流的摄像头ip为${cameraEntity.ip}")
@@ -109,7 +115,7 @@ class CameraListView : FrameLayout {
liveSn = cameraEntity.sn
MoGoAiCloudTrafficLive.viewDesignativeVehicleLive(
liveSn,
surfaceView,
textureView,
trafficCarLiveCallBack
)
}
@@ -122,15 +128,9 @@ class CameraListView : FrameLayout {
isCloseStatus -> clickListener?.onClose(it)// 直接退出
else -> {// 返回摄像头列表
showCameraList()
clickListener?.refreshCameraList()
isCloseStatus = true
// 无信号倒计时时点击返回
if (ivSignalIcon.visibility == View.VISIBLE) {
clickListener?.onShowLive(false)
}
stopLive()
if (valueAnimator.isRunning) {
valueAnimator.cancel()
}
}
}
clickListener?.onShowLive(false)
@@ -165,7 +165,10 @@ class CameraListView : FrameLayout {
}
}
})
progressBar.indeterminateDrawable.colorFilter = PorterDuffColorFilter(ContextCompat.getColor(context, R.color.notice_blue), PorterDuff.Mode.MULTIPLY)
progressBar.indeterminateDrawable.colorFilter = PorterDuffColorFilter(
ContextCompat.getColor(context, R.color.notice_blue),
PorterDuff.Mode.MULTIPLY
)
// 后期可改为动态获取3s起始位置暂时写死
spannableStringBuilder.setSpan(
ForegroundColorSpan(Color.parseColor("#2966EE")),
@@ -181,12 +184,14 @@ class CameraListView : FrameLayout {
)
valueAnimator.duration = 3000
valueAnimator.addUpdateListener {
if (rvCameraList.visibility == View.VISIBLE) return@addUpdateListener
when (val currentValue = it.animatedValue as Int) {
0 -> {
if (isPlaySuccess) {
clickListener?.onClose(ivSignalIcon)
} else {
showCameraList()
clickListener?.refreshCameraList()
clickListener?.onShowLive(false)
}
isPlaySuccess = false
@@ -203,7 +208,8 @@ class CameraListView : FrameLayout {
}
}
liveStreamManager.setLiveStatusChangeCallback {
surfaceView.post {
textureView
.post {
handleSnLiveStatus(it)
}
}
@@ -250,7 +256,7 @@ class CameraListView : FrameLayout {
}
// 开始直播
progressBar.visibility = View.GONE
surfaceView.visibility = View.VISIBLE
textureView.visibility = View.VISIBLE
isPlaySuccess = true
}
}
@@ -284,6 +290,16 @@ class CameraListView : FrameLayout {
}
}
@SuppressLint("NotifyDataSetChanged")
fun refreshCameraList(cameraInfoList: List<CameraEntity>?) {
Logger.d(TAG, "refreshCameraList")
this.cameraInfoList.clear()
cameraInfoList?.let {
this.cameraInfoList.addAll(it)
}
rvCameraList.adapter?.notifyDataSetChanged()
}
fun setClickListener(clickListener: ClickListener) {
this.clickListener = clickListener
}
@@ -308,7 +324,9 @@ class CameraListView : FrameLayout {
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
stopLive()
valueAnimator.cancel()
if (valueAnimator.isStarted || valueAnimator.isRunning) {
valueAnimator.cancel()
}
}
private fun stopLive() {
@@ -329,7 +347,7 @@ class CameraListView : FrameLayout {
private fun showLiveView() {
if (!isCarLive()) {
surfaceView.visibility = View.GONE
textureView.visibility = View.GONE
} else {
svpPlayer.visibility = View.GONE
}
@@ -343,10 +361,13 @@ class CameraListView : FrameLayout {
}
private fun showCameraList() {
if (valueAnimator.isStarted || valueAnimator.isRunning) {
valueAnimator.cancel()
}
tvCameraTitle.visibility = View.VISIBLE
rvCameraList.visibility = View.VISIBLE
svpPlayer.visibility = View.GONE
surfaceView.visibility = View.GONE
textureView.visibility = View.GONE
progressBar.visibility = View.GONE
ivSignalIcon.visibility = View.GONE
tvTipContent.visibility = View.GONE
@@ -359,7 +380,7 @@ class CameraListView : FrameLayout {
tvTipContent.visibility = View.VISIBLE
tvCameraTitle.visibility = View.GONE
rvCameraList.visibility = View.GONE
surfaceView.visibility = View.GONE
textureView.visibility = View.GONE
svpPlayer.visibility = View.GONE
progressBar.visibility = View.GONE
shadowView.visibility = View.GONE
@@ -368,5 +389,6 @@ class CameraListView : FrameLayout {
interface ClickListener {
fun onShowLive(isShow: Boolean)
fun onClose(v: View)
fun refreshCameraList()
}
}

View File

@@ -66,8 +66,8 @@
app:layout_constraintTop_toTopOf="parent" />
<!--摄像头数据需要两种播放方式-->
<SurfaceView
android:id="@+id/surfaceView"
<TextureView
android:id="@+id/textureView"
android:layout_width="778px"
android:layout_height="487px"
android:visibility="gone"

View File

@@ -63,21 +63,21 @@ SERVICE_CHAIN_VERSION=1.0.30
LOGLIB_VERSION=1.0.4
######## MogoAiCloudSDK Version ########
# 网络请求
MOGO_NETWORK_VERSION=1.3.8
MOGO_NETWORK_VERSION=1.3.9
# 鉴权
MOGO_PASSPORT_VERSION=1.3.8
MOGO_PASSPORT_VERSION=1.3.9
# 常链接
MOGO_SOCKET_VERSION=1.3.8
MOGO_SOCKET_VERSION=1.3.9
# 数据采集
MOGO_REALTIME_VERSION=1.3.8
MOGO_REALTIME_VERSION=1.3.9
# 探路,道路事件发布,获取
MOGO_TANLU_VERSION=1.3.8
MOGO_TANLU_VERSION=1.3.9
# 直播推流
MOGO_LIVE_VERSION=1.3.8
MOGO_LIVE_VERSION=1.3.9
# 直播拉流
MOGO_TRAFFICLIVE_VERSION=1.3.8
MOGO_TRAFFICLIVE_VERSION=1.3.9
# 定位服务
MOGO_LOCATION_VERSION=1.3.8
MOGO_LOCATION_VERSION=1.3.9
######## MogoAiCloudSDK Version ########
# 自研地图
MAP_SDK_VERSION=V2.0.0.9