优化画中画模式支持,添加播放器释放逻辑,修复相关引用管理
This commit is contained in:
Binary file not shown.
@@ -201,6 +201,7 @@ class FeatureHubActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
private fun handleAliveItemClick(item: AliveStreamItem) {
|
||||
LivePlayActivity.closePipIfAny()
|
||||
val url = item.url?.trim().orEmpty()
|
||||
val intent = if (url.isNotEmpty()) {
|
||||
LivePlayActivity.createIntent(
|
||||
|
||||
@@ -55,6 +55,7 @@ import kotlinx.coroutines.launch
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
class LivePlayActivity : AppCompatActivity() {
|
||||
|
||||
@@ -80,6 +81,7 @@ class LivePlayActivity : AppCompatActivity() {
|
||||
private var firstAudioFrameCostMs: Long? = null
|
||||
private var isLatencyChasingActive: Boolean = false
|
||||
private var lastLatencyChasingSpeed: Float? = null
|
||||
private var hasReleasedPlayer: Boolean = false
|
||||
|
||||
private val logLines: ArrayDeque<String> = ArrayDeque()
|
||||
private val logTimeFormat = SimpleDateFormat("HH:mm:ss.SSS", Locale.getDefault())
|
||||
@@ -209,9 +211,12 @@ class LivePlayActivity : AppCompatActivity() {
|
||||
logEvent("释放播放器")
|
||||
logDialog?.dismiss()
|
||||
if (this::playerClient.isInitialized) {
|
||||
playerClient.release()
|
||||
releasePlayerIfNeeded()
|
||||
}
|
||||
uiScope.cancel()
|
||||
if (pipActivityRef?.get() === this) {
|
||||
pipActivityRef = null
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
@@ -228,6 +233,11 @@ class LivePlayActivity : AppCompatActivity() {
|
||||
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean, newConfig: Configuration) {
|
||||
super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)
|
||||
updatePipUi(isInPictureInPictureMode)
|
||||
if (isInPictureInPictureMode) {
|
||||
pipActivityRef = WeakReference(this)
|
||||
} else if (pipActivityRef?.get() === this) {
|
||||
pipActivityRef = null
|
||||
}
|
||||
}
|
||||
|
||||
private fun togglePlay() {
|
||||
@@ -258,6 +268,20 @@ class LivePlayActivity : AppCompatActivity() {
|
||||
pipController.enterPictureInPictureMode(renderView)
|
||||
}
|
||||
|
||||
private fun releasePlayerIfNeeded() {
|
||||
if (hasReleasedPlayer) return
|
||||
hasReleasedPlayer = true
|
||||
playerClient.release()
|
||||
}
|
||||
|
||||
private fun finishForNewPlayback() {
|
||||
logEvent("外部请求: 结束画中画播放")
|
||||
if (this::playerClient.isInitialized) {
|
||||
releasePlayerIfNeeded()
|
||||
}
|
||||
finish()
|
||||
}
|
||||
|
||||
private fun startPlayback() {
|
||||
val env = envStore.read()
|
||||
args.playParams?.let { params ->
|
||||
@@ -706,6 +730,8 @@ class LivePlayActivity : AppCompatActivity() {
|
||||
companion object {
|
||||
private const val TAG = "LivePlayActivity"
|
||||
private const val MAX_LOG_LINES = 200
|
||||
@Volatile
|
||||
private var pipActivityRef: WeakReference<LivePlayActivity>? = null
|
||||
const val EXTRA_PLAY_PROTOCOL = "play_protocol"
|
||||
const val EXTRA_STREAM_ID_OR_URL = "stream_id_or_url"
|
||||
const val EXTRA_PLAY_VHOST = "play_vhost"
|
||||
@@ -741,6 +767,24 @@ class LivePlayActivity : AppCompatActivity() {
|
||||
.putExtra(EXTRA_PLAY_STREAM_NAME, streamName)
|
||||
.putExtra(EXTRA_AUTO_START, autoStart)
|
||||
}
|
||||
|
||||
fun closePipIfAny(): Boolean {
|
||||
val activity = pipActivityRef?.get() ?: return false
|
||||
if (activity.isDestroyed || activity.isFinishing) {
|
||||
pipActivityRef = null
|
||||
return false
|
||||
}
|
||||
if (!activity.isInPictureInPictureMode) {
|
||||
pipActivityRef = null
|
||||
return false
|
||||
}
|
||||
if (Looper.myLooper() == Looper.getMainLooper()) {
|
||||
activity.finishForNewPlayback()
|
||||
} else {
|
||||
activity.runOnUiThread { activity.finishForNewPlayback() }
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
private fun resolveChannelId(input: String): String {
|
||||
|
||||
Reference in New Issue
Block a user