Fix audio for ac-hls (#1213)
This commit is contained in:
@ -6,7 +6,7 @@ ext {
|
|||||||
extName = 'AllAnime'
|
extName = 'AllAnime'
|
||||||
pkgNameSuffix = 'en.allanime'
|
pkgNameSuffix = 'en.allanime'
|
||||||
extClass = '.AllAnime'
|
extClass = '.AllAnime'
|
||||||
extVersionCode = 4
|
extVersionCode = 5
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ import kotlinx.serialization.json.Json
|
|||||||
import okhttp3.Headers
|
import okhttp3.Headers
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
import java.util.Locale
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class VideoLink(
|
data class VideoLink(
|
||||||
@ -28,6 +29,7 @@ data class VideoLink(
|
|||||||
data class Subtitles(
|
data class Subtitles(
|
||||||
val lang: String,
|
val lang: String,
|
||||||
val src: String,
|
val src: String,
|
||||||
|
val label: String? = null
|
||||||
)
|
)
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
@ -49,6 +51,26 @@ class AllAnimeExtractor(private val client: OkHttpClient) {
|
|||||||
|
|
||||||
private val json: Json by injectLazy()
|
private val json: Json by injectLazy()
|
||||||
|
|
||||||
|
private fun bytesIntoHumanReadable(bytes: Long): String? {
|
||||||
|
val kilobyte: Long = 1000
|
||||||
|
val megabyte = kilobyte * 1000
|
||||||
|
val gigabyte = megabyte * 1000
|
||||||
|
val terabyte = gigabyte * 1000
|
||||||
|
return if (bytes in 0 until kilobyte) {
|
||||||
|
"$bytes b/s"
|
||||||
|
} else if (bytes in kilobyte until megabyte) {
|
||||||
|
(bytes / kilobyte).toString() + " kb/s"
|
||||||
|
} else if (bytes in megabyte until gigabyte) {
|
||||||
|
(bytes / megabyte).toString() + " mb/s"
|
||||||
|
} else if (bytes in gigabyte until terabyte) {
|
||||||
|
(bytes / gigabyte).toString() + " gb/s"
|
||||||
|
} else if (bytes >= terabyte) {
|
||||||
|
(bytes / terabyte).toString() + " tb/s"
|
||||||
|
} else {
|
||||||
|
"$bytes bits/s"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun videoFromUrl(url: String, name: String): List<Video> {
|
fun videoFromUrl(url: String, name: String): List<Video> {
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
|
|
||||||
@ -68,7 +90,12 @@ class AllAnimeExtractor(private val client: OkHttpClient) {
|
|||||||
if (!link.subtitles.isNullOrEmpty()) {
|
if (!link.subtitles.isNullOrEmpty()) {
|
||||||
try {
|
try {
|
||||||
for (sub in link.subtitles) {
|
for (sub in link.subtitles) {
|
||||||
subtitles.add(Track(sub.src, sub.lang))
|
val label = if (sub.label != null) {
|
||||||
|
" - ${sub.label}"
|
||||||
|
} else {
|
||||||
|
""
|
||||||
|
}
|
||||||
|
subtitles.add(Track(sub.src, Locale(sub.lang).displayLanguage + label))
|
||||||
}
|
}
|
||||||
} catch (_: Error) {}
|
} catch (_: Error) {}
|
||||||
}
|
}
|
||||||
@ -102,9 +129,27 @@ class AllAnimeExtractor(private val client: OkHttpClient) {
|
|||||||
|
|
||||||
if (resp != null && resp.code == 200) {
|
if (resp != null && resp.code == 200) {
|
||||||
val masterPlaylist = resp.body!!.string()
|
val masterPlaylist = resp.body!!.string()
|
||||||
|
|
||||||
|
val audioList = mutableListOf<Track>()
|
||||||
|
if (masterPlaylist.contains("#EXT-X-MEDIA:TYPE=AUDIO")) {
|
||||||
|
val audioInfo = masterPlaylist.substringAfter("#EXT-X-MEDIA:TYPE=AUDIO")
|
||||||
|
.substringBefore("\n")
|
||||||
|
val language = audioInfo.substringAfter("NAME=\"").substringBefore("\"")
|
||||||
|
val url = audioInfo.substringAfter("URI=\"").substringBefore("\"")
|
||||||
|
audioList.add(
|
||||||
|
Track(url, language)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:")
|
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:")
|
||||||
.forEach {
|
.forEach {
|
||||||
val quality = it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p ($name - ${link.resolutionStr})"
|
val bandwidth = if (it.contains("AVERAGE-BANDWIDTH")) {
|
||||||
|
" " + bytesIntoHumanReadable(it.substringAfter("AVERAGE-BANDWIDTH=").substringBefore(",").toLong())
|
||||||
|
} else {
|
||||||
|
""
|
||||||
|
}
|
||||||
|
|
||||||
|
val quality = it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p$bandwidth ($name - ${link.resolutionStr})"
|
||||||
var videoUrl = it.substringAfter("\n").substringBefore("\n")
|
var videoUrl = it.substringAfter("\n").substringBefore("\n")
|
||||||
|
|
||||||
if (!videoUrl.startsWith("http")) {
|
if (!videoUrl.startsWith("http")) {
|
||||||
@ -112,7 +157,11 @@ class AllAnimeExtractor(private val client: OkHttpClient) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
if (audioList.isEmpty()) {
|
||||||
videoList.add(Video(videoUrl, quality, videoUrl, subtitleTracks = subtitles))
|
videoList.add(Video(videoUrl, quality, videoUrl, subtitleTracks = subtitles))
|
||||||
|
} else {
|
||||||
|
videoList.add(Video(videoUrl, quality, videoUrl, subtitleTracks = subtitles, audioTracks = audioList))
|
||||||
|
}
|
||||||
} catch (_: Error) {
|
} catch (_: Error) {
|
||||||
videoList.add(Video(videoUrl, quality, videoUrl))
|
videoList.add(Video(videoUrl, quality, videoUrl))
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user