路侧、车侧视频流播放优化

Signed-off-by: chenfufeng <chenfufeng@zhidaoauto.com>
This commit is contained in:
chenfufeng
2021-11-12 15:38:53 +08:00
parent a77056f537
commit 01505b4266
15 changed files with 205 additions and 43 deletions

View File

@@ -465,6 +465,10 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
}
}
override fun startRoadCameraLive(flvUrl: String) {
cameraListView?.startRoadCameraLive(flvUrl)
}
private fun showCameraList(cameraList: List<CameraEntity>?) {
context?.let {
if (cameraViewFloat == null) {
@@ -474,7 +478,11 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
}
cameraListView!!.setClickListener(object : CameraListView.ClickListener {
override fun onClose(v: View) {
// Builder和cameraListView都置空
dismissFloatView()
// 丢弃开启摄像头推流请求同时monitor回调hmi的startRoadCameraLive()
// 也做了cameraListView的非空判断
CallerMonitorManager.disposeCameraStream()
}
override fun onShowLive(isShow: Boolean) {

View File

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

View File

@@ -17,8 +17,10 @@ import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.cloud.trafficlive.api.ITrafficCarLiveCallBack
import com.mogo.cloud.trafficlive.api.MoGoAiCloudTrafficLive
import com.mogo.eagle.core.data.camera.CameraEntity
import com.mogo.eagle.core.function.call.monitor.CallerMonitorManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.widget.media.video.SimpleVideoPlayer
import com.mogo.utils.logger.Logger
import com.shuyu.gsyvideoplayer.GSYVideoManager
import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder
import com.shuyu.gsyvideoplayer.utils.GSYVideoType
@@ -60,6 +62,7 @@ class CameraListView : FrameLayout {
}
private var liveSn: String? = ""
private var isCarLive = false
private var isFirstPage = true
@JvmOverloads
constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : super(
@@ -79,6 +82,7 @@ class CameraListView : FrameLayout {
rvCameraList.adapter = CameraListAdapter(context, cameraInfoList) {
it.tag?.let { cameraEntity ->
showLiveView()
isFirstPage = false
isCloseStatus = false
isPlaySuccess = false
isCarLive = false
@@ -86,7 +90,12 @@ class CameraListView : FrameLayout {
when {
!cameraEntity.isCarLive() -> {
isCarLive = false
if (!cameraEntity.flvUrl.isNullOrEmpty()) gsyVideoPlay(cameraEntity.flvUrl!!)
// 开启摄像头推流
cameraEntity.ip?.let { ip ->
CallerMonitorManager.openCameraStream(ip)
// 测试一直打开的顺义摄像头,不需要调接口让摄像头开启推流
// if (!cameraEntity.flvUrl.isNullOrEmpty()) gsyVideoPlay(cameraEntity.flvUrl!!)
}
}
else -> {
isCarLive = true
@@ -104,6 +113,7 @@ class CameraListView : FrameLayout {
ivCloseIcon.setOnClickListener {
isPlaySuccess = false
isCarLive = false
isFirstPage = true
when {
isCloseStatus -> clickListener?.onClose(it)// 直接退出
else -> {// 返回摄像头列表
@@ -124,6 +134,7 @@ class CameraListView : FrameLayout {
GSYVideoType.setShowType(GSYVideoType.SCREEN_MATCH_FULL)
svpPlayer.setPlayListener(object : SimpleVideoPlayer.PlayListener {
override fun onPlayEvent(event: Int) {
Logger.d(TAG, "onPlayEvent: event is:$event")
when (event) {
SimpleVideoPlayer.PLAY_EVT_PLAY_LOADING -> {
@@ -135,7 +146,9 @@ class CameraListView : FrameLayout {
}
else -> {
showNoSignalView()
valueAnimator.start()
if (!valueAnimator.isStarted && !valueAnimator.isRunning) {
valueAnimator.start()
}
}
}
}
@@ -184,6 +197,10 @@ class CameraListView : FrameLayout {
}
}
fun startRoadCameraLive(flvUrl: String) {
gsyVideoPlay(flvUrl)
}
private fun handleSnLiveStatus(status: Int) {
when (status) {
0 -> {// 正在直播
@@ -197,22 +214,38 @@ class CameraListView : FrameLayout {
private val trafficCarLiveCallBack = object : ITrafficCarLiveCallBack {
override fun onLive(liveSn: String?) {
// 开始直播
progressBar.visibility = View.GONE
surfaceView.visibility = View.VISIBLE
isPlaySuccess = true
Logger.d(TAG, "onLive")
}
override fun onFirstFrame() {
Logger.d(TAG, "onFirstFrame:isFirstPage is:$isFirstPage,isCarLive is:$isCarLive")
if (!isFirstPage && isCarLive) {
// 开始直播
progressBar.visibility = View.GONE
surfaceView.visibility = View.VISIBLE
isPlaySuccess = true
}
}
override fun onDisConnect() {
// 断开连接
showNoSignalView()
valueAnimator.start()
Logger.e(TAG, "onDisConnect")
if (!isFirstPage && isCarLive) {
showNoSignalView()
if (!valueAnimator.isStarted && !valueAnimator.isRunning) {
valueAnimator.start()
}
}
}
override fun onError(errorMsg: String?) {
// 发生错误
showNoSignalView()
valueAnimator.start()
Logger.e(TAG, "onError msg is:${errorMsg}")
if (!isFirstPage && isCarLive) {
// 发生错误
showNoSignalView()
if (!valueAnimator.isStarted && !valueAnimator.isRunning) {
valueAnimator.start()
}
}
}
}
@@ -246,7 +279,6 @@ class CameraListView : FrameLayout {
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
stopLive()
svpPlayer.removeAllViews()
valueAnimator.cancel()
}