Fix audio for ac-hls (#1213)
This commit is contained in:
@ -6,7 +6,7 @@ ext {
|
||||
extName = 'AllAnime'
|
||||
pkgNameSuffix = 'en.allanime'
|
||||
extClass = '.AllAnime'
|
||||
extVersionCode = 4
|
||||
extVersionCode = 5
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
|
@ -9,6 +9,7 @@ import kotlinx.serialization.json.Json
|
||||
import okhttp3.Headers
|
||||
import okhttp3.OkHttpClient
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import java.util.Locale
|
||||
|
||||
@Serializable
|
||||
data class VideoLink(
|
||||
@ -28,6 +29,7 @@ data class VideoLink(
|
||||
data class Subtitles(
|
||||
val lang: String,
|
||||
val src: String,
|
||||
val label: String? = null
|
||||
)
|
||||
|
||||
@Serializable
|
||||
@ -49,6 +51,26 @@ class AllAnimeExtractor(private val client: OkHttpClient) {
|
||||
|
||||
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> {
|
||||
val videoList = mutableListOf<Video>()
|
||||
|
||||
@ -68,7 +90,12 @@ class AllAnimeExtractor(private val client: OkHttpClient) {
|
||||
if (!link.subtitles.isNullOrEmpty()) {
|
||||
try {
|
||||
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) {}
|
||||
}
|
||||
@ -102,9 +129,27 @@ class AllAnimeExtractor(private val client: OkHttpClient) {
|
||||
|
||||
if (resp != null && resp.code == 200) {
|
||||
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:")
|
||||
.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")
|
||||
|
||||
if (!videoUrl.startsWith("http")) {
|
||||
@ -112,7 +157,11 @@ class AllAnimeExtractor(private val client: OkHttpClient) {
|
||||
}
|
||||
|
||||
try {
|
||||
videoList.add(Video(videoUrl, quality, videoUrl, subtitleTracks = subtitles))
|
||||
if (audioList.isEmpty()) {
|
||||
videoList.add(Video(videoUrl, quality, videoUrl, subtitleTracks = subtitles))
|
||||
} else {
|
||||
videoList.add(Video(videoUrl, quality, videoUrl, subtitleTracks = subtitles, audioTracks = audioList))
|
||||
}
|
||||
} catch (_: Error) {
|
||||
videoList.add(Video(videoUrl, quality, videoUrl))
|
||||
}
|
||||
|
Reference in New Issue
Block a user