Skip to content

Commit cfef00b

Browse files
Merge pull request #48 from Noob-Pigeon/develop
fix: prevent ANR during playback (develop)
2 parents a218ab3 + b0d1781 commit cfef00b

2 files changed

Lines changed: 18 additions & 10 deletions

File tree

app/shared/src/main/kotlin/dev/aaa1115910/bv/viewmodel/VideoPlayerV3ViewModel.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -399,12 +399,15 @@ class VideoPlayerV3ViewModel(
399399
logger.fInfo { "Select audio: $audioItem" }
400400
addLogs("音频编码:${(Audio.fromCode(audioItem?.codecId ?: 0))?.getDisplayName(BVApp.context) ?: "未知"}")
401401

402-
withContext(Dispatchers.Main) {
403-
currentVideoHeight = videoItem?.height ?: 0
404-
currentVideoWidth = videoItem?.width ?: 0
405-
logger.info { "Video url: $videoUrl" }
406-
logger.info { "Audio url: $audioUrl" }
402+
currentVideoHeight = videoItem?.height ?: 0
403+
currentVideoWidth = videoItem?.width ?: 0
404+
logger.info { "Video url: $videoUrl" }
405+
logger.info { "Audio url: $audioUrl" }
406+
// 将 playUrl 移到 IO 线程,避免主线程阻塞
407+
withContext(Dispatchers.IO) {
407408
videoPlayer!!.playUrl(videoUrl, audioUrl)
409+
}
410+
withContext(Dispatchers.Main) {
408411
videoPlayer!!.prepare()
409412
showBuffering = true
410413
}

player/core/src/main/kotlin/dev/aaa1115910/bv/player/impl/exo/ExoMediaPlayer.kt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import dev.aaa1115910.bv.player.AbstractVideoPlayer
1818
import dev.aaa1115910.bv.player.OkHttpUtil
1919
import dev.aaa1115910.bv.player.VideoPlayerOptions
2020
import dev.aaa1115910.bv.util.formatHourMinSec
21+
import java.util.concurrent.TimeUnit
2122

2223
@OptIn(UnstableApi::class)
2324
class ExoMediaPlayer(
@@ -28,11 +29,15 @@ class ExoMediaPlayer(
2829
protected var mMediaSource: MediaSource? = null
2930

3031
@OptIn(UnstableApi::class)
31-
private val dataSourceFactory =
32-
OkHttpDataSource.Factory(OkHttpUtil.generateCustomSslOkHttpClient(context)).apply {
33-
options.userAgent?.let { setUserAgent(it) }
34-
options.referer?.let { setDefaultRequestProperties(mapOf("referer" to it)) }
35-
}
32+
private val dataSourceFactory = OkHttpDataSource.Factory(
33+
OkHttpUtil.generateCustomSslOkHttpClient(context).newBuilder()
34+
.connectTimeout(15, TimeUnit.SECONDS)
35+
.readTimeout(15, TimeUnit.SECONDS)
36+
.build()
37+
).apply {
38+
options.userAgent?.let { setUserAgent(it) }
39+
options.referer?.let { setDefaultRequestProperties(mapOf("referer" to it)) }
40+
}
3641

3742
init {
3843
initPlayer()

0 commit comments

Comments
 (0)