mirror of
https://github.com/oxyroid/M3UAndroid.git
synced 2025-05-20 21:06:34 +08:00
refactor: use spi to get codec instance.
This commit is contained in:
@ -33,6 +33,7 @@ dependencies {
|
|||||||
.startParameter
|
.startParameter
|
||||||
.taskNames
|
.taskNames
|
||||||
.find { it.contains("richCodec", ignoreCase = true) } != null
|
.find { it.contains("richCodec", ignoreCase = true) } != null
|
||||||
|
implementation(project(":data:codec"))
|
||||||
if (richCodec) {
|
if (richCodec) {
|
||||||
implementation(project(":data:codec:rich"))
|
implementation(project(":data:codec:rich"))
|
||||||
} else {
|
} 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 {
|
plugins {
|
||||||
alias(libs.plugins.com.android.library)
|
alias(libs.plugins.com.android.library)
|
||||||
alias(libs.plugins.org.jetbrains.kotlin.android)
|
alias(libs.plugins.org.jetbrains.kotlin.android)
|
||||||
|
alias(libs.plugins.com.google.devtools.ksp)
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
@ -11,8 +12,14 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(":data:codec"))
|
||||||
|
|
||||||
implementation(libs.androidx.core.ktx)
|
implementation(libs.androidx.core.ktx)
|
||||||
implementation(libs.androidx.appcompat)
|
implementation(libs.androidx.appcompat)
|
||||||
|
|
||||||
implementation(libs.androidx.media3.exoplayer)
|
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 android.content.Context
|
||||||
import androidx.media3.exoplayer.DefaultRenderersFactory
|
import androidx.media3.exoplayer.DefaultRenderersFactory
|
||||||
import androidx.media3.exoplayer.RenderersFactory
|
import androidx.media3.exoplayer.RenderersFactory
|
||||||
|
import com.google.auto.service.AutoService
|
||||||
|
|
||||||
object Codecs {
|
@AutoService(Codecs::class)
|
||||||
fun createRenderersFactory(context: Context): RenderersFactory {
|
class LiteCodecs: Codecs {
|
||||||
|
override fun createRenderersFactory(context: Context): RenderersFactory {
|
||||||
return DefaultRenderersFactory(context).apply {
|
return DefaultRenderersFactory(context).apply {
|
||||||
setEnableDecoderFallback(true)
|
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 {
|
plugins {
|
||||||
alias(libs.plugins.com.android.library)
|
alias(libs.plugins.com.android.library)
|
||||||
alias(libs.plugins.org.jetbrains.kotlin.android)
|
alias(libs.plugins.org.jetbrains.kotlin.android)
|
||||||
|
alias(libs.plugins.com.google.devtools.ksp)
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
@ -11,9 +12,15 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(":data:codec"))
|
||||||
|
|
||||||
implementation(libs.androidx.core.ktx)
|
implementation(libs.androidx.core.ktx)
|
||||||
implementation(libs.androidx.appcompat)
|
implementation(libs.androidx.appcompat)
|
||||||
|
|
||||||
implementation(libs.androidx.media3.exoplayer)
|
implementation(libs.androidx.media3.exoplayer)
|
||||||
implementation(libs.nextlib.media3.ext)
|
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 android.content.Context
|
||||||
import androidx.media3.exoplayer.DefaultRenderersFactory
|
import androidx.media3.exoplayer.DefaultRenderersFactory
|
||||||
import androidx.media3.exoplayer.RenderersFactory
|
import androidx.media3.exoplayer.RenderersFactory
|
||||||
|
import com.google.auto.service.AutoService
|
||||||
import io.github.anilbeesetti.nextlib.media3ext.ffdecoder.NextRenderersFactory
|
import io.github.anilbeesetti.nextlib.media3ext.ffdecoder.NextRenderersFactory
|
||||||
|
|
||||||
object Codecs {
|
@AutoService(Codecs::class)
|
||||||
fun createRenderersFactory(context: Context): RenderersFactory {
|
class RichCodec: Codecs {
|
||||||
|
override fun createRenderersFactory(context: Context): RenderersFactory {
|
||||||
return NextRenderersFactory(context).apply {
|
return NextRenderersFactory(context).apply {
|
||||||
setEnableDecoderFallback(true)
|
setEnableDecoderFallback(true)
|
||||||
setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON)
|
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 {
|
private val renderersFactory: RenderersFactory by lazy {
|
||||||
Codecs.createRenderersFactory(context)
|
Codecs.load().createRenderersFactory(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createTrackSelector(tunneling: Boolean): TrackSelector {
|
private fun createTrackSelector(tunneling: Boolean): TrackSelector {
|
||||||
|
@ -18,7 +18,7 @@ rootProject.name = "M3U"
|
|||||||
include(":app:smartphone", ":app:tv")
|
include(":app:smartphone", ":app:tv")
|
||||||
include(":core")
|
include(":core")
|
||||||
include(":data")
|
include(":data")
|
||||||
include(":data:codec:lite", ":data:codec:rich")
|
include(":data:codec", ":data:codec:lite", ":data:codec:rich")
|
||||||
include(
|
include(
|
||||||
":business:foryou",
|
":business:foryou",
|
||||||
":business:favorite",
|
":business:favorite",
|
||||||
|
Reference in New Issue
Block a user