mirror of
https://github.com/oxyroid/M3UAndroid.git
synced 2025-05-17 19:35:58 +08:00
refactor: use spi to get codec instance.
This commit is contained in:
@ -33,6 +33,7 @@ dependencies {
|
||||
.startParameter
|
||||
.taskNames
|
||||
.find { it.contains("richCodec", ignoreCase = true) } != null
|
||||
implementation(project(":data:codec"))
|
||||
if (richCodec) {
|
||||
implementation(project(":data:codec:rich"))
|
||||
} else {
|
||||
|
23
data/codec/build.gradle.kts
Normal file
23
data/codec/build.gradle.kts
Normal file
@ -0,0 +1,23 @@
|
||||
plugins {
|
||||
alias(libs.plugins.com.android.library)
|
||||
alias(libs.plugins.org.jetbrains.kotlin.android)
|
||||
alias(libs.plugins.com.google.devtools.ksp)
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "com.m3u.data.codec"
|
||||
kotlinOptions {
|
||||
jvmTarget = "17"
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(libs.androidx.core.ktx)
|
||||
implementation(libs.androidx.appcompat)
|
||||
|
||||
implementation(libs.androidx.media3.exoplayer)
|
||||
|
||||
implementation(libs.auto.service.annotations)
|
||||
|
||||
ksp(libs.auto.service.ksp)
|
||||
}
|
0
data/codec/consumer-rules.pro
Normal file
0
data/codec/consumer-rules.pro
Normal file
@ -1,6 +1,7 @@
|
||||
plugins {
|
||||
alias(libs.plugins.com.android.library)
|
||||
alias(libs.plugins.org.jetbrains.kotlin.android)
|
||||
alias(libs.plugins.com.google.devtools.ksp)
|
||||
}
|
||||
|
||||
android {
|
||||
@ -11,8 +12,14 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":data:codec"))
|
||||
|
||||
implementation(libs.androidx.core.ktx)
|
||||
implementation(libs.androidx.appcompat)
|
||||
|
||||
implementation(libs.androidx.media3.exoplayer)
|
||||
|
||||
implementation(libs.auto.service.annotations)
|
||||
|
||||
ksp(libs.auto.service.ksp)
|
||||
}
|
@ -3,9 +3,11 @@ package com.m3u.data.codec
|
||||
import android.content.Context
|
||||
import androidx.media3.exoplayer.DefaultRenderersFactory
|
||||
import androidx.media3.exoplayer.RenderersFactory
|
||||
import com.google.auto.service.AutoService
|
||||
|
||||
object Codecs {
|
||||
fun createRenderersFactory(context: Context): RenderersFactory {
|
||||
@AutoService(Codecs::class)
|
||||
class LiteCodecs: Codecs {
|
||||
override fun createRenderersFactory(context: Context): RenderersFactory {
|
||||
return DefaultRenderersFactory(context).apply {
|
||||
setEnableDecoderFallback(true)
|
||||
}
|
21
data/codec/proguard-rules.pro
vendored
Normal file
21
data/codec/proguard-rules.pro
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
@ -1,6 +1,7 @@
|
||||
plugins {
|
||||
alias(libs.plugins.com.android.library)
|
||||
alias(libs.plugins.org.jetbrains.kotlin.android)
|
||||
alias(libs.plugins.com.google.devtools.ksp)
|
||||
}
|
||||
|
||||
android {
|
||||
@ -11,9 +12,15 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":data:codec"))
|
||||
|
||||
implementation(libs.androidx.core.ktx)
|
||||
implementation(libs.androidx.appcompat)
|
||||
|
||||
implementation(libs.androidx.media3.exoplayer)
|
||||
implementation(libs.nextlib.media3.ext)
|
||||
|
||||
implementation(libs.auto.service.annotations)
|
||||
|
||||
ksp(libs.auto.service.ksp)
|
||||
}
|
@ -3,10 +3,12 @@ package com.m3u.data.codec
|
||||
import android.content.Context
|
||||
import androidx.media3.exoplayer.DefaultRenderersFactory
|
||||
import androidx.media3.exoplayer.RenderersFactory
|
||||
import com.google.auto.service.AutoService
|
||||
import io.github.anilbeesetti.nextlib.media3ext.ffdecoder.NextRenderersFactory
|
||||
|
||||
object Codecs {
|
||||
fun createRenderersFactory(context: Context): RenderersFactory {
|
||||
@AutoService(Codecs::class)
|
||||
class RichCodec: Codecs {
|
||||
override fun createRenderersFactory(context: Context): RenderersFactory {
|
||||
return NextRenderersFactory(context).apply {
|
||||
setEnableDecoderFallback(true)
|
||||
setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON)
|
15
data/codec/src/main/java/com/m3u/data/codec/Codecs.kt
Normal file
15
data/codec/src/main/java/com/m3u/data/codec/Codecs.kt
Normal file
@ -0,0 +1,15 @@
|
||||
package com.m3u.data.codec
|
||||
|
||||
import android.content.Context
|
||||
import androidx.media3.exoplayer.RenderersFactory
|
||||
import java.util.ServiceLoader
|
||||
|
||||
interface Codecs {
|
||||
fun createRenderersFactory(context: Context): RenderersFactory
|
||||
|
||||
companion object {
|
||||
fun load(): Codecs {
|
||||
return ServiceLoader.load(Codecs::class.java).first()
|
||||
}
|
||||
}
|
||||
}
|
@ -369,7 +369,7 @@ class PlayerManagerImpl @Inject constructor(
|
||||
}
|
||||
|
||||
private val renderersFactory: RenderersFactory by lazy {
|
||||
Codecs.createRenderersFactory(context)
|
||||
Codecs.load().createRenderersFactory(context)
|
||||
}
|
||||
|
||||
private fun createTrackSelector(tunneling: Boolean): TrackSelector {
|
||||
|
@ -18,7 +18,7 @@ rootProject.name = "M3U"
|
||||
include(":app:smartphone", ":app:tv")
|
||||
include(":core")
|
||||
include(":data")
|
||||
include(":data:codec:lite", ":data:codec:rich")
|
||||
include(":data:codec", ":data:codec:lite", ":data:codec:rich")
|
||||
include(
|
||||
":business:foryou",
|
||||
":business:favorite",
|
||||
|
Reference in New Issue
Block a user