mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-09-23 19:59:25 +02:00
Avoids using Video Cache for live streams.
This commit is contained in:
@@ -34,41 +34,38 @@ import androidx.media3.session.MediaSession
|
|||||||
import androidx.media3.session.MediaSessionService
|
import androidx.media3.session.MediaSessionService
|
||||||
import com.vitorpamplona.amethyst.Amethyst
|
import com.vitorpamplona.amethyst.Amethyst
|
||||||
import com.vitorpamplona.amethyst.service.HttpClientManager
|
import com.vitorpamplona.amethyst.service.HttpClientManager
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class WssOrHttpFactory(httpClient: OkHttpClient) : MediaSource.Factory {
|
/**
|
||||||
@UnstableApi
|
* HLS LiveStreams cannot use cache.
|
||||||
val http = DefaultMediaSourceFactory(OkHttpDataSource.Factory(httpClient))
|
*/
|
||||||
|
@UnstableApi
|
||||||
|
class CustomMediaSourceFactory() : MediaSource.Factory {
|
||||||
|
private var cachingFactory: MediaSource.Factory =
|
||||||
|
DefaultMediaSourceFactory(Amethyst.instance.videoCache.get(HttpClientManager.getHttpClient()))
|
||||||
|
private var nonCachingFactory: MediaSource.Factory =
|
||||||
|
DefaultMediaSourceFactory(OkHttpDataSource.Factory(HttpClientManager.getHttpClient()))
|
||||||
|
|
||||||
@UnstableApi
|
|
||||||
val wss = DefaultMediaSourceFactory(WssStreamDataSource.Factory(httpClient))
|
|
||||||
|
|
||||||
@OptIn(UnstableApi::class)
|
|
||||||
override fun setDrmSessionManagerProvider(drmSessionManagerProvider: DrmSessionManagerProvider): MediaSource.Factory {
|
override fun setDrmSessionManagerProvider(drmSessionManagerProvider: DrmSessionManagerProvider): MediaSource.Factory {
|
||||||
http.setDrmSessionManagerProvider(drmSessionManagerProvider)
|
cachingFactory.setDrmSessionManagerProvider(drmSessionManagerProvider)
|
||||||
wss.setDrmSessionManagerProvider(drmSessionManagerProvider)
|
nonCachingFactory.setDrmSessionManagerProvider(drmSessionManagerProvider)
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(UnstableApi::class)
|
|
||||||
override fun setLoadErrorHandlingPolicy(loadErrorHandlingPolicy: LoadErrorHandlingPolicy): MediaSource.Factory {
|
override fun setLoadErrorHandlingPolicy(loadErrorHandlingPolicy: LoadErrorHandlingPolicy): MediaSource.Factory {
|
||||||
http.setLoadErrorHandlingPolicy(loadErrorHandlingPolicy)
|
cachingFactory.setLoadErrorHandlingPolicy(loadErrorHandlingPolicy)
|
||||||
wss.setLoadErrorHandlingPolicy(loadErrorHandlingPolicy)
|
nonCachingFactory.setLoadErrorHandlingPolicy(loadErrorHandlingPolicy)
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(UnstableApi::class)
|
|
||||||
override fun getSupportedTypes(): IntArray {
|
override fun getSupportedTypes(): IntArray {
|
||||||
return http.supportedTypes
|
return nonCachingFactory.supportedTypes
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(UnstableApi::class)
|
|
||||||
override fun createMediaSource(mediaItem: MediaItem): MediaSource {
|
override fun createMediaSource(mediaItem: MediaItem): MediaSource {
|
||||||
return if (mediaItem.mediaId.startsWith("wss")) {
|
if (mediaItem.mediaId.contains(".m3u8", true)) {
|
||||||
wss.createMediaSource(mediaItem)
|
return nonCachingFactory.createMediaSource(mediaItem)
|
||||||
} else {
|
|
||||||
http.createMediaSource(mediaItem)
|
|
||||||
}
|
}
|
||||||
|
return cachingFactory.createMediaSource(mediaItem)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +78,7 @@ class PlaybackService : MediaSessionService() {
|
|||||||
fun newAllInOneDataSource(): MediaSource.Factory {
|
fun newAllInOneDataSource(): MediaSource.Factory {
|
||||||
// This might be needed for live kit.
|
// This might be needed for live kit.
|
||||||
// return WssOrHttpFactory(HttpClientManager.getHttpClient())
|
// return WssOrHttpFactory(HttpClientManager.getHttpClient())
|
||||||
return DefaultMediaSourceFactory(Amethyst.instance.videoCache.get(HttpClientManager.getHttpClient()))
|
return CustomMediaSourceFactory()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun lazyDS(): MultiPlayerPlaybackManager {
|
fun lazyDS(): MultiPlayerPlaybackManager {
|
||||||
|
Reference in New Issue
Block a user