解决冲突

pull/1296/head
ag2s20150909 4 years ago
parent 28bcf5960a
commit 724cb167e5
  1. 8
      app/build.gradle
  2. 59
      app/src/main/java/io/legado/app/help/ExoPlayerHelper.kt
  3. 6
      app/src/main/java/io/legado/app/service/AudioPlayService.kt

@ -153,10 +153,10 @@ dependencies {
def exoplayer_version = '2.15.0' def exoplayer_version = '2.15.0'
implementation "com.google.android.exoplayer:exoplayer-core:$exoplayer_version" implementation "com.google.android.exoplayer:exoplayer-core:$exoplayer_version"
implementation "com.google.android.exoplayer:extension-okhttp:$exoplayer_version" implementation "com.google.android.exoplayer:extension-okhttp:$exoplayer_version"
implementation "com.google.android.exoplayer:exoplayer-hls:$exoplayer_version" // implementation "com.google.android.exoplayer:exoplayer-hls:$exoplayer_version"
implementation "com.google.android.exoplayer:exoplayer-smoothstreaming:$exoplayer_version" // implementation "com.google.android.exoplayer:exoplayer-smoothstreaming:$exoplayer_version"
implementation "com.google.android.exoplayer:exoplayer-dash:$exoplayer_version" // implementation "com.google.android.exoplayer:exoplayer-dash:$exoplayer_version"
implementation "com.google.android.exoplayer:exoplayer-rtsp:$exoplayer_version" // implementation "com.google.android.exoplayer:exoplayer-rtsp:$exoplayer_version"
//Splitties //Splitties
def splitties_version = '2.1.1' def splitties_version = '2.1.1'

@ -1,33 +1,68 @@
package io.legado.app.help package io.legado.app.help
import android.net.Uri import android.net.Uri
import com.google.android.exoplayer2.C
import com.google.android.exoplayer2.MediaItem import com.google.android.exoplayer2.MediaItem
import com.google.android.exoplayer2.database.ExoDatabaseProvider
import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource
import com.google.android.exoplayer2.source.MediaSource import com.google.android.exoplayer2.source.MediaSource
import com.google.android.exoplayer2.source.ProgressiveMediaSource import com.google.android.exoplayer2.source.ProgressiveMediaSource
import com.google.android.exoplayer2.source.dash.DashMediaSource import com.google.android.exoplayer2.upstream.cache.Cache
import com.google.android.exoplayer2.source.hls.HlsMediaSource import com.google.android.exoplayer2.upstream.cache.LeastRecentlyUsedCacheEvictor
import com.google.android.exoplayer2.source.smoothstreaming.SsMediaSource import com.google.android.exoplayer2.upstream.cache.SimpleCache
import com.google.android.exoplayer2.util.Util.inferContentType import io.legado.app.help.http.okHttpClient
import splitties.init.appCtx
import java.io.File
object ExoPlayerHelper { object ExoPlayerHelper {
fun createMediaSource( fun createMediaSource(
uri: Uri, uri: Uri,
dataSourceFactory: OkHttpDataSource.Factory, defaultRequestProperties: Map<String, String>,
overrideExtension: String? = null overrideExtension: String? = null
): MediaSource { ): MediaSource {
val mediaItem = MediaItem.fromUri(uri) val mediaItem = MediaItem.fromUri(uri)
val mediaSourceFactory = when (inferContentType(uri, overrideExtension)) { val mediaSourceFactory = ProgressiveMediaSource.Factory(
C.TYPE_SS -> SsMediaSource.Factory(dataSourceFactory) cacheDataSourceFactory.setDefaultRequestProperties(defaultRequestProperties)
C.TYPE_DASH -> DashMediaSource.Factory(dataSourceFactory) )
C.TYPE_HLS -> HlsMediaSource.Factory(dataSourceFactory)
else -> ProgressiveMediaSource.Factory(dataSourceFactory)
}
return mediaSourceFactory.createMediaSource(mediaItem) return mediaSourceFactory.createMediaSource(mediaItem)
} }
/**
* 支持缓存的DataSource.Factory
*/
private val cacheDataSourceFactory by lazy {
//使用自定义的CacheDataSource以支持设置UA
return@lazy OkhttpCacheDataSource.Factory()
.setCache(cache)
.setUpstreamDataSourceFactory(okhttpDataFactory)
}
/**
* Okhttp DataSource.Factory
*/
private val okhttpDataFactory by lazy {
OkHttpDataSource.Factory(okHttpClient)
}
/**
* Exoplayer 内置的缓存
*/
private val cache: Cache by lazy {
val databaseProvider = ExoDatabaseProvider(appCtx)
return@lazy SimpleCache(
//Exoplayer的缓存路径
File(appCtx.externalCacheDir, "exoplayer"),
//100M的缓存
LeastRecentlyUsedCacheEvictor((100 * 1024 * 1024).toLong()),
//记录缓存的数据库
databaseProvider
);
}
} }

@ -16,7 +16,6 @@ import androidx.media.AudioFocusRequestCompat
import com.google.android.exoplayer2.PlaybackException import com.google.android.exoplayer2.PlaybackException
import com.google.android.exoplayer2.Player import com.google.android.exoplayer2.Player
import com.google.android.exoplayer2.SimpleExoPlayer import com.google.android.exoplayer2.SimpleExoPlayer
import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseService import io.legado.app.base.BaseService
import io.legado.app.constant.AppConst import io.legado.app.constant.AppConst
@ -28,7 +27,6 @@ import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookChapter import io.legado.app.data.entities.BookChapter
import io.legado.app.help.ExoPlayerHelper import io.legado.app.help.ExoPlayerHelper
import io.legado.app.help.MediaHelp import io.legado.app.help.MediaHelp
import io.legado.app.help.http.okHttpClient
import io.legado.app.model.AudioPlay import io.legado.app.model.AudioPlay
import io.legado.app.model.ReadAloud import io.legado.app.model.ReadAloud
import io.legado.app.model.analyzeRule.AnalyzeUrl import io.legado.app.model.analyzeRule.AnalyzeUrl
@ -135,10 +133,8 @@ class AudioPlayService : BaseService(),
useWebView = true useWebView = true
) )
val uri = Uri.parse(analyzeUrl.url) val uri = Uri.parse(analyzeUrl.url)
val dataSourceFactory = OkHttpDataSource.Factory(okHttpClient)
.setDefaultRequestProperties(analyzeUrl.headerMap)
val mediaSource = ExoPlayerHelper val mediaSource = ExoPlayerHelper
.createMediaSource(uri, dataSourceFactory) .createMediaSource(uri, analyzeUrl.headerMap)
exoPlayer.setMediaSource(mediaSource) exoPlayer.setMediaSource(mediaSource)
exoPlayer.playWhenReady = true exoPlayer.playWhenReady = true
exoPlayer.prepare() exoPlayer.prepare()

Loading…
Cancel
Save