Fix audio for ac-hls (#1213)

This commit is contained in:
Secozzi
2023-01-26 14:34:42 +01:00
committed by GitHub
parent 015095eaf4
commit 0a8b4572f8
2 changed files with 53 additions and 4 deletions

View File

@ -6,7 +6,7 @@ ext {
extName = 'AllAnime'
pkgNameSuffix = 'en.allanime'
extClass = '.AllAnime'
extVersionCode = 4
extVersionCode = 5
libVersion = '13'
}

View File

@ -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))
}