Bläddra i källkod

1.优化直播页面代码

王鹏鹏 2 år sedan
förälder
incheckning
51db00c2b8

+ 1 - 1
.idea/misc.xml

@@ -567,7 +567,7 @@
         <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/drawable/bg_live_status.xml" value="0.1715" />
         <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/drawable/selector_live_tab_center.xml" value="0.1715" />
         <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/drawable/selector_live_tab_left.xml" value="0.1715" />
-        <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/layout/activity_live_broadcast.xml" value="0.23697916666666666" />
+        <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/layout/activity_live_broadcast.xml" value="0.72" />
         <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/layout/activity_live_broadcast_list.xml" value="0.23697916666666666" />
         <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/layout/activity_video_player.xml" value="0.23697916666666666" />
         <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/layout/dialog_game_tasks.xml" value="0.536" />

+ 35 - 1
livebroadcast/src/main/java/com/yingyang/livebroadcast/activity/detail/LiveBroadcastActivity.kt

@@ -3,11 +3,14 @@ package com.yingyang.livebroadcast.activity.detail
 import android.annotation.SuppressLint
 import android.os.Bundle
 import android.text.TextUtils
+import android.util.Log
 import android.view.MotionEvent
 import android.view.View
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.tencent.bugly.crashreport.CrashReport
 import com.tencent.imsdk.v2.*
+import com.tencent.live2.V2TXLiveCode
+import com.tencent.live2.V2TXLiveDef
 import com.tencent.live2.V2TXLivePlayer
 import com.tencent.live2.V2TXLivePlayerObserver
 import com.tencent.live2.impl.V2TXLivePlayerImpl
@@ -39,15 +42,22 @@ class LiveBroadcastActivity :
     private var url: String = ""
     private var mLivePlayer: V2TXLivePlayer? = null
     private var mPlayFlag = false
+    private var title: String = ""
     private val timer = Timer()
 
     override fun onCreate(savedInstanceState: Bundle?) {
         url = intent.getStringExtra("url") ?: ""
         liveId = intent.getStringExtra("liveId") ?: ""
+        title = intent.getStringExtra("title") ?: ""
         super.onCreate(savedInstanceState)
     }
 
     override fun initViews() {
+        binding.tvTitle.text = if (TextUtils.isEmpty(title)) {
+            ""
+        } else {
+            title
+        }
         //初始化直播
         initPlayer()
         //上报直播间心跳
@@ -73,19 +83,42 @@ class LiveBroadcastActivity :
      */
     private fun initPlayer() {
         mLivePlayer = V2TXLivePlayerImpl(this@LiveBroadcastActivity)
+        mLivePlayer?.setCacheParams(1.0f, 5.0f)
+        (mLivePlayer as V2TXLivePlayerImpl).setRenderFillMode(V2TXLiveDef.V2TXLiveFillMode.V2TXLiveFillModeScaleFill)
         mLivePlayer?.setRenderView(binding.playTxCloudView)
         mLivePlayer?.setObserver(v2TXLivePlayerObserver)
         val result = mLivePlayer?.startLivePlay(url)
-        if (result == 0) {
+        if (result == V2TXLiveCode.V2TXLIVE_OK) {
             mPlayFlag = true
+        } else {
+            "播放失败,请重试".toast()
         }
     }
 
     private var v2TXLivePlayerObserver: V2TXLivePlayerObserver = object : V2TXLivePlayerObserver() {
         override fun onError(player: V2TXLivePlayer?, code: Int, msg: String?, extraInfo: Bundle?) {
             super.onError(player, code, msg, extraInfo)
+            when (code) {
+                V2TXLiveCode.V2TXLIVE_ERROR_REQUEST_TIMEOUT -> {
+                    "请求服务器超时".toast()
+                }
+
+                V2TXLiveCode.V2TXLIVE_ERROR_DISCONNECTED -> {
+                    "连接断开".toast()
+                }
+
+                V2TXLiveCode.V2TXLIVE_WARNING_NETWORK_BUSY -> {
+                    "网络状况不佳".toast()
+                }
+
+                V2TXLiveCode.V2TXLIVE_WARNING_VIDEO_BLOCK -> {
+                    "当前视频播放出现卡顿".toast()
+                }
+            }
             CrashReport.postCatchedException(Throwable("直播报错        ----->      [Player] onError: player-$player code-$code msg-$msg info-$extraInfo"))
         }
+
+
     }
 
     override fun onDestroy() {
@@ -185,6 +218,7 @@ class LiveBroadcastActivity :
             runOnUiThread {
                 if (msg != null) {
                     if (msg.isRead.not()) {
+                        Log.e("wpp", "--------------------------------" + GsonUtil.GsonString(msg))
                         makeMessageAsRead(msg)
                         if (msg.elemType == V2TIMMessage.V2TIM_ELEM_TYPE_CUSTOM) {
                             val customElem = msg.customElem

+ 6 - 5
livebroadcast/src/main/java/com/yingyang/livebroadcast/activity/list/LiveBroadcastListActivity.kt

@@ -73,7 +73,7 @@ class LiveBroadcastListActivity :
                             appointmentLive(id, position)
                         }
                         "直播中" -> {
-                            initPermission(url, id)
+                            initPermission(url, id, title)
                         }
                         "直播回放" -> {
                             ARouter.getInstance().build(RouterUrlCommon.videoPlayer)
@@ -198,15 +198,15 @@ class LiveBroadcastListActivity :
     /**
      * 获取应用权限
      */
-    private fun initPermission(url: String, id: String) {
+    private fun initPermission(url: String, id: String, title: String) {
         val isHasPermission = XXPermissions.isGranted(this, permissions)
         if (isHasPermission) {
-            getUserSign(url, id)
+            getUserSign(url, id, title)
         } else {
             XXPermissions.with(this).permission(permissions).request(object : OnPermissionCallback {
                 override fun onGranted(permissions: List<String>, all: Boolean) {
                     if (all) { // 全部获取权限成功
-                        getUserSign(url, id)
+                        getUserSign(url, id, title)
                     } else { // 部分获取权限成功
                         // 需要弹框处理
                         showTipDialog()
@@ -272,10 +272,11 @@ class LiveBroadcastListActivity :
     /**
      * 获取腾讯IM密钥
      */
-    private fun getUserSign(url: String, id: String) {
+    private fun getUserSign(url: String, id: String, title: String) {
         ARouter.getInstance().build(RouterUrlCommon.liveBroadcast)
             .withString("url", url)
             .withString("liveId", id)
+            .withString("title", title)
             .withTransition(R.anim.leftin, R.anim.leftout)
             .navigation(mContext)
     }

+ 63 - 52
livebroadcast/src/main/res/layout/activity_live_broadcast.xml

@@ -9,60 +9,79 @@
 
     </data>
 
-    <androidx.constraintlayout.widget.ConstraintLayout
+    <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:background="@drawable/bg_live_room">
+        android:background="@drawable/bg_live_room"
+        android:orientation="vertical">
 
-        <LinearLayout
-            android:id="@+id/backLayout"
-            android:layout_width="wrap_content"
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/divider_65px"
-            android:layout_marginTop="@dimen/divider_35px"
-            android:gravity="center"
-            android:orientation="horizontal"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent">
+            android:orientation="horizontal">
 
-            <androidx.appcompat.widget.AppCompatImageView
-                android:layout_width="@dimen/divider_48px"
-                android:layout_height="@dimen/divider_48px"
-                android:background="@mipmap/icon_back" />
+            <LinearLayout
+                android:id="@+id/backLayout"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="@dimen/divider_65px"
+                android:layout_marginTop="@dimen/divider_32px"
+                android:orientation="horizontal"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent">
+
+                <androidx.appcompat.widget.AppCompatImageView
+                    android:layout_width="@dimen/divider_48px"
+                    android:layout_height="@dimen/divider_48px"
+                    android:layout_gravity="center_vertical"
+                    android:background="@mipmap/icon_back" />
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_vertical"
+                    android:layout_marginStart="@dimen/divider_14px"
+                    android:text="@string/back_pager"
+                    android:textColor="@android:color/white"
+                    android:textSize="@dimen/divider_28px"
+                    android:textStyle="bold" />
+
+            </LinearLayout>
 
             <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tvTitle"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_marginStart="@dimen/divider_14px"
-                android:text="@string/back_pager"
+                android:layout_marginTop="@dimen/divider_32px"
+                android:gravity="center"
                 android:textColor="@android:color/white"
-                android:textSize="@dimen/divider_28px"
-                android:textStyle="bold" />
-
-        </LinearLayout>
-
-        <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/tvTitle"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="@dimen/divider_32px"
-            android:textColor="@android:color/white"
-            android:textSize="@dimen/divider_38px"
-            android:textStyle="bold"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent" />
-
-        <com.tencent.rtmp.ui.TXCloudVideoView
-            android:id="@+id/play_tx_cloud_view"
-            android:layout_width="match_parent"
-            android:layout_height="0dp"
+                android:textSize="@dimen/divider_38px"
+                android:textStyle="bold"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                tools:text="@string/complete" />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+        <com.google.android.material.card.MaterialCardView
+            android:layout_width="@dimen/divider_1078px"
+            android:layout_height="@dimen/divider_606px"
             android:layout_marginStart="@dimen/divider_58px"
+            android:layout_marginTop="@dimen/divider_52px"
             android:layout_marginEnd="@dimen/divider_58px"
-            app:layout_constraintBottom_toTopOf="@+id/statusLayout"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent" />
+            android:theme="@style/Theme.MaterialComponents.NoActionBar"
+            app:cardCornerRadius="@dimen/divider_40px">
+
+            <com.tencent.rtmp.ui.TXCloudVideoView
+                android:id="@+id/play_tx_cloud_view"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_gravity="center" />
+
+        </com.google.android.material.card.MaterialCardView>
 
         <LinearLayout
             android:id="@+id/statusLayout"
@@ -72,11 +91,7 @@
             android:layout_marginBottom="@dimen/divider_27px"
             android:gravity="center"
             android:orientation="horizontal"
-            android:visibility="gone"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@+id/play_tx_cloud_view">
+            android:visibility="gone">
 
             <androidx.appcompat.widget.AppCompatButton
                 android:id="@+id/btnYes"
@@ -101,11 +116,7 @@
                 android:textColor="@android:color/white"
                 android:textSize="@dimen/divider_28px"
                 android:textStyle="bold" />
-
-
         </LinearLayout>
-
-
-    </androidx.constraintlayout.widget.ConstraintLayout>
+    </LinearLayout>
 
 </layout>