[Fix]解决视频直播问题
1. SurfaceView换成TextureView解决不能显示圆角问题 2. 从播放页回到摄像头列表页刷新下数据 3. UI细节调整
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user