diff --git a/app/src/main/java/com/github/catvod/utils/DownloadMT.kt b/app/src/main/java/com/github/catvod/utils/DownloadMT.kt index 7562b090..22030234 100644 --- a/app/src/main/java/com/github/catvod/utils/DownloadMT.kt +++ b/app/src/main/java/com/github/catvod/utils/DownloadMT.kt @@ -9,15 +9,14 @@ import com.github.catvod.utils.ProxyVideo.proxy import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job -import kotlinx.coroutines.async import kotlinx.coroutines.channels.Channel -import kotlinx.coroutines.joinAll import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import okhttp3.Response import org.apache.commons.lang3.StringUtils -import java.io.ByteArrayInputStream -import java.io.ByteArrayOutputStream +import java.io.InputStream +import java.io.SequenceInputStream +import java.util.Vector import kotlin.math.min object DownloadMT { @@ -90,9 +89,9 @@ object DownloadMT { // 存储执行结果的List val jobs = mutableListOf() val channels = List(threadNum) { Channel() } + var inputStreams = mutableListOf() for ((index, part) in partList.withIndex()) { - val newRange = "bytes=" + part[0] + "-" + part[1] SpiderDebug.log("下载开始;newRange:$newRange") @@ -103,42 +102,39 @@ object DownloadMT { jobs += CoroutineScope(Dispatchers.IO).launch { val res = downloadRange(url, headerNew) - if (res != null) { - val buffer = ByteArray(1024) - var bytesRead: Int = 0 + if (res != null) {/* val buffer = ByteArray(1024) + var bytesRead: Int = 0 - while (res.body()?.byteStream()?.read(buffer).also { - if (it != null) { - bytesRead = it - } - } != -1) { - // 处理读取的数据 - channels[index].send(buffer.copyOfRange(0, bytesRead)) - - } - channels[index].close() // 发送完成后关闭通道 + while (res.body()?.byteStream()?.read(buffer).also { + if (it != null) { + bytesRead = it + } + } != -1) { + // 处理读取的数据 + channels[index].send(buffer.copyOfRange(0, bytesRead))*/ + inputStreams.add(index, res.body()?.byteStream()!!) SpiderDebug.log("---第" + index + "块下载完成" + ";Content-Range:" + res.headers()["Content-Range"]) } } } - val outputStream = ByteArrayOutputStream(); - var pipedInputStream: ByteArrayInputStream? = null - var contentType: String? = "" + var contentType: String? = ""/* val outputStream = ByteArrayOutputStream(); + var pipedInputStream: ByteArrayInputStream? = null - val res = CoroutineScope(Dispatchers.Default).async { - repeat(jobs.size) { index -> - for (bytes in channels[index]) { - // 处理读取的数据 - outputStream.write(bytes); - } + val res = CoroutineScope(Dispatchers.Default).async { + repeat(jobs.size) { index -> - } - // 等待所有下载完成 - jobs.joinAll() - } - res.await() + for (bytes in channels[index]) { + // 处理读取的数据 + outputStream.write(bytes); + } + + } + // 等待所有下载完成 + jobs.joinAll() + } + res.await()*/ // SpiderDebug.log(" ++proxy res data:" + Json.toJson(response.body())); contentType = resHeader["Content-Type"] @@ -165,10 +161,10 @@ object DownloadMT { SpiderDebug.log("----proxy res contentType:$contentType") // SpiderDebug.log("++proxy res body:" + response.body()); SpiderDebug.log("----proxy res respHeaders:" + Json.toJson(resHeader)) - pipedInputStream = ByteArrayInputStream(outputStream.toByteArray()); - outputStream.close() + val sequenceInputStream = SequenceInputStream(Vector(inputStreams).elements()); - return arrayOf(206, contentType, pipedInputStream, resHeader) + + return arrayOf(206, contentType, sequenceInputStream, resHeader) } catch (e: Exception) { diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 63a0270e..99f5e4b8 100644 Binary files a/jar/custom_spider.jar and b/jar/custom_spider.jar differ diff --git a/jar/custom_spider.jar.md5 b/jar/custom_spider.jar.md5 index d4473dad..0a330347 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -693338eb7794c8953b3fd0a8bed3a855 +5cb212c16ee71528fd75f507a5aa91d4 diff --git a/json/test.json b/json/test.json index 18d42ab9..171f0877 100644 --- a/json/test.json +++ b/json/test.json @@ -1,5 +1,5 @@ { - "spider": "https://ghproxy.net/https://raw.githubusercontent.com/lushunming/AndroidCatVodSpider/multiThreadkt/jar/custom_spider.jar;md5;693338eb7794c8953b3fd0a8bed3a855", + "spider": "https://ghproxy.net/https://raw.githubusercontent.com/lushunming/AndroidCatVodSpider/multiThreadkt/jar/custom_spider.jar;md5;5cb212c16ee71528fd75f507a5aa91d4", "lives": [ { "name": "电视直播",