diff --git a/README.md b/README.md index 293ea2a..6e9abd4 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,15 @@ ## 更新日志 +### v1.6.2(通用) + +* 修复按键无效的问题 +* 新的频道列表样式 + +### v1.6.1(安卓5及以上专用) + +* 增加凤凰卫视 + ### v1.6.0(通用) * 通用(春晚緊急修復) @@ -199,9 +208,8 @@ adb install my-tv.apk * 凤凰卫视、凤凰资讯台 * 海外 * 1.5.0 无法安装,1.5.1 可以安装 -* 选中的图标比例能否相差更大 -* 自动重连 * 节目增加预告 +* 频道列表优化 ## 赞赏 diff --git a/app/src/main/cpp/armeabi-v7a/libnative.so b/app/src/main/cpp/armeabi-v7a/libnative.so index c7288c4..cff7716 100755 Binary files a/app/src/main/cpp/armeabi-v7a/libnative.so and b/app/src/main/cpp/armeabi-v7a/libnative.so differ diff --git a/app/src/main/java/com/lizongying/mytv/MainActivity.kt b/app/src/main/java/com/lizongying/mytv/MainActivity.kt index 2064f37..ff4d1e0 100644 --- a/app/src/main/java/com/lizongying/mytv/MainActivity.kt +++ b/app/src/main/java/com/lizongying/mytv/MainActivity.kt @@ -49,8 +49,6 @@ class MainActivity : FragmentActivity() { private var channelNum = true private var bootStartup = true - private var versionName = "" - init { lifecycleScope.launch(Dispatchers.IO) { val utilsJob = async(start = CoroutineStart.LAZY) { Utils.init() } @@ -87,7 +85,7 @@ class MainActivity : FragmentActivity() { bootStartup = sharedPref.getBoolean(BOOT_STARTUP, bootStartup) val packageInfo = getPackageInfo() - versionName = packageInfo.versionName + val versionName = packageInfo.versionName val versionCode = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { packageInfo.longVersionCode } else { @@ -148,7 +146,7 @@ class MainActivity : FragmentActivity() { if (mainFragment.isHidden) { transaction.show(mainFragment) - keepRunnable() + mainActive() } else { transaction.hide(mainFragment) } @@ -156,11 +154,16 @@ class MainActivity : FragmentActivity() { transaction.commit() } - fun keepRunnable() { + fun mainActive() { handler.removeCallbacks(hideMain) handler.postDelayed(hideMain, delayHideMain) } + fun settingActive() { + handler.removeCallbacks(hideSetting) + handler.postDelayed(hideSetting, delayHideSetting) + } + private val hideMain = Runnable { if (!mainFragment.isHidden) { supportFragmentManager.beginTransaction().hide(mainFragment).commit() @@ -267,8 +270,7 @@ class MainActivity : FragmentActivity() { Log.i(TAG, "settingFragment ${settingFragment.isVisible}") if (!settingFragment.isVisible) { settingFragment.show(supportFragmentManager, "setting") - handler.removeCallbacks(hideSetting) - handler.postDelayed(hideSetting, delayHideSetting) + settingActive() } else { handler.removeCallbacks(hideSetting) settingFragment.dismiss() diff --git a/app/src/main/java/com/lizongying/mytv/MainFragment.kt b/app/src/main/java/com/lizongying/mytv/MainFragment.kt index f23e4a1..da5ffe4 100644 --- a/app/src/main/java/com/lizongying/mytv/MainFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/MainFragment.kt @@ -222,7 +222,7 @@ class MainFragment : BrowseSupportFragment() { ) { if (item is TVViewModel) { tvListViewModel.setItemPositionCurrent(item.id.value!!) - (activity as MainActivity).keepRunnable() + (activity as MainActivity).mainActive() } } } @@ -321,7 +321,7 @@ class MainFragment : BrowseSupportFragment() { putInt(POSITION, itemPosition) apply() } - Log.i(TAG, "$POSITION saved") + Log.i(TAG, "$POSITION $itemPosition saved") } override fun onDestroy() { diff --git a/app/src/main/java/com/lizongying/mytv/Request.kt b/app/src/main/java/com/lizongying/mytv/Request.kt index 4055130..ecc2aed 100644 --- a/app/src/main/java/com/lizongying/mytv/Request.kt +++ b/app/src/main/java/com/lizongying/mytv/Request.kt @@ -7,6 +7,10 @@ import android.util.Base64 import android.util.Log import com.lizongying.mytv.Utils.getDateFormat import com.lizongying.mytv.api.ApiClient +import com.lizongying.mytv.api.Auth +import com.lizongying.mytv.api.AuthRequest +import com.lizongying.mytv.api.FAuth +import com.lizongying.mytv.api.FAuthService import com.lizongying.mytv.api.Info import com.lizongying.mytv.api.LiveInfo import com.lizongying.mytv.api.LiveInfoRequest @@ -31,9 +35,12 @@ class Request { private var yspApiService: YSPApiService = ApiClient().yspApiService private var yspBtraceService: YSPBtraceService = ApiClient().yspBtraceService private var yspProtoService: YSPProtoService = ApiClient().yspProtoService + private var fAuthService: FAuthService = ApiClient().fAuthService private var ysp: YSP? = null private var token = "" + private var needAuth = false + // TODO onDestroy private val handler = Handler(Looper.getMainLooper()) private lateinit var btraceRunnable: BtraceRunnable @@ -52,6 +59,84 @@ class Request { } var call: Call? = null + private var callAuth: Call? = null + + private fun fetchAuth(tvModel: TVViewModel, cookie: String) { + callAuth?.cancel() + + val title = tvModel.title.value + + val data = ysp?.getAuthData(tvModel) + val request = data?.let { AuthRequest(it) } + callAuth = request?.let { yspApiService.getAuth("guid=${ysp?.getGuid()}; $cookie", it) } + + callAuth?.enqueue(object : Callback { + override fun onResponse(call: Call, response: Response) { + if (response.isSuccessful) { + val liveInfo = response.body() + + if (liveInfo?.data?.token != null) { + Log.i(TAG, "token ${liveInfo.data.token}") + ysp?.token = liveInfo.data.token + fetchVideo(tvModel, cookie) + } else { + Log.e(TAG, "$title token error") + if (tvModel.retryTimes < tvModel.retryMaxTimes) { + tvModel.retryTimes++ + if (tvModel.getTV().needToken) { + if (tvModel.tokenRetryTimes == tvModel.tokenRetryMaxTimes) { + if (!tvModel.getTV().mustToken) { + fetchAuth(tvModel, cookie) + } + } else { + token = "" + fetchAuth(tvModel) + } + } else { + fetchAuth(tvModel, cookie) + } + } + } + } else { + Log.e(TAG, "$title auth status error") + if (tvModel.retryTimes < tvModel.retryMaxTimes) { + tvModel.retryTimes++ + if (tvModel.getTV().needToken) { + if (tvModel.tokenRetryTimes == tvModel.tokenRetryMaxTimes) { + if (!tvModel.getTV().mustToken) { + fetchAuth(tvModel, cookie) + } + } else { + token = "" + fetchAuth(tvModel) + } + } else { + fetchAuth(tvModel, cookie) + } + } + } + } + + override fun onFailure(call: Call, t: Throwable) { + Log.e(TAG, "$title auth request error $t") + if (tvModel.retryTimes < tvModel.retryMaxTimes) { + tvModel.retryTimes++ + if (tvModel.getTV().needToken) { + if (tvModel.tokenRetryTimes == tvModel.tokenRetryMaxTimes) { + if (!tvModel.getTV().mustToken) { + fetchAuth(tvModel, cookie) + } + } else { + token = "" + fetchAuth(tvModel) + } + } else { + fetchAuth(tvModel, cookie) + } + } + } + }) + } fun fetchVideo(tvModel: TVViewModel, cookie: String) { call?.cancel() @@ -64,7 +149,13 @@ class Request { tvModel.seq = 0 val data = ysp?.switch(tvModel) val request = data?.let { LiveInfoRequest(it) } - call = request?.let { yspApiService.getLiveInfo("guid=${ysp?.getGuid()}; $cookie", it) } + call = request?.let { + yspApiService.getLiveInfo( + "guid=${ysp?.getGuid()}; $cookie", + ysp!!.token, + it + ) + } call?.enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { @@ -101,13 +192,16 @@ class Request { if (tvModel.tokenRetryTimes == tvModel.tokenRetryMaxTimes) { if (!tvModel.getTV().mustToken) { fetchVideo(tvModel, cookie) +// fetchAuth(tvModel, cookie) } } else { token = "" fetchVideo(tvModel) +// fetchAuth(tvModel) } } else { fetchVideo(tvModel, cookie) +// fetchAuth(tvModel, cookie) } } } @@ -123,13 +217,16 @@ class Request { if (tvModel.tokenRetryTimes == tvModel.tokenRetryMaxTimes) { if (!tvModel.getTV().mustToken) { fetchVideo(tvModel, cookie) +// fetchAuth(tvModel, cookie) } } else { token = "" fetchVideo(tvModel) +// fetchAuth(tvModel) } } else { fetchVideo(tvModel, cookie) +// fetchAuth(tvModel, cookie) } } } @@ -142,20 +239,23 @@ class Request { if (tvModel.tokenRetryTimes == tvModel.tokenRetryMaxTimes) { if (!tvModel.getTV().mustToken) { fetchVideo(tvModel, cookie) +// fetchAuth(tvModel, cookie) } } else { token = "" fetchVideo(tvModel) +// fetchAuth(tvModel) } } else { fetchVideo(tvModel, cookie) +// fetchAuth(tvModel, cookie) } } } } override fun onFailure(call: Call, t: Throwable) { - Log.e(TAG, "$title request error $t") + Log.e(TAG, "$title fetchVideo request error $t") if (tvModel.retryTimes < tvModel.retryMaxTimes) { tvModel.retryTimes++ if (tvModel.getTV().needToken) { @@ -175,16 +275,63 @@ class Request { }) } + fun fetchAuth(tvModel: TVViewModel) { + if (token == "") { + yspTokenService.getInfo("") + .enqueue(object : Callback { + override fun onResponse(call: Call, response: Response) { + if (response.isSuccessful) { + token = response.body()?.data?.token!! + Log.i(TAG, "info success $token") + val cookie = + "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109;yspopenid=vu0-8lgGV2LW9QjDeuBFsX8yMnzs37Q3_HZF6XyVDpGR_I; vusession=$token" + fetchAuth(tvModel, cookie) + } else { + Log.e(TAG, "info status error") + if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) { + tvModel.tokenRetryTimes++ + fetchAuth(tvModel) + } else { + if (!tvModel.getTV().mustToken) { + val cookie = + "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109" + fetchAuth(tvModel, cookie) + } + } + } + } + + override fun onFailure(call: Call, t: Throwable) { + Log.e(TAG, "info request error $t") + if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) { + tvModel.tokenRetryTimes++ + fetchVideo(tvModel) + } else { + if (!tvModel.getTV().mustToken) { + val cookie = + "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109" + fetchAuth(tvModel, cookie) + } + } + } + }) + } else { + val cookie = + "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109;yspopenid=vu0-8lgGV2LW9QjDeuBFsX8yMnzs37Q3_HZF6XyVDpGR_I; vusession=$token" + fetchAuth(tvModel, cookie) + } + } + fun fetchVideo(tvModel: TVViewModel) { if (token == "") { - yspTokenService.getInfo() + yspTokenService.getInfo("") .enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { if (response.isSuccessful && response.body()?.data?.token != null) { token = response.body()?.data?.token!! Log.i(TAG, "info success $token") val cookie = - "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; yspappid=519748109;yspopenid=vu0-8lgGV2LW9QjDeuBFsX8yMnzs37Q3_HZF6XyVDpGR_I; vusession=$token" + "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109; yspopenid=vu0-8lgGV2LW9QjDeuBFsX8yMnzs37Q3_HZF6XyVDpGR_I; vusession=$token" fetchVideo(tvModel, cookie) } else { Log.e(TAG, "info status error") @@ -194,7 +341,7 @@ class Request { } else { if (!tvModel.getTV().mustToken) { val cookie = - "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; yspappid=519748109" + "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109" fetchVideo(tvModel, cookie) } } @@ -209,7 +356,7 @@ class Request { } else { if (!tvModel.getTV().mustToken) { val cookie = - "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; yspappid=519748109" + "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109" fetchVideo(tvModel, cookie) } } @@ -217,18 +364,67 @@ class Request { }) } else { val cookie = - "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; yspappid=519748109;yspopenid=vu0-8lgGV2LW9QjDeuBFsX8yMnzs37Q3_HZF6XyVDpGR_I; vusession=$token" + "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109; yspopenid=vu0-8lgGV2LW9QjDeuBFsX8yMnzs37Q3_HZF6XyVDpGR_I; vusession=$token" fetchVideo(tvModel, cookie) } } + private var fAuth: Call? = null + fun fetchFAuth(tvModel: TVViewModel) { + call?.cancel() + callAuth?.cancel() + fAuth?.cancel() + + val title = tvModel.title.value + + fAuth = fAuthService.getAuth(tvModel.getTV().pid, "HD") + fAuth?.enqueue(object : Callback { + override fun onResponse(call: Call, response: Response) { + if (response.isSuccessful && response.body()?.data?.live_url != null) { + val url = response.body()?.data?.live_url!! +// Log.d(TAG, "$title url $url") + tvModel.addVideoUrl(url) + tvModel.allReady() + tvModel.retryTimes = 0 + } else { + Log.e(TAG, "auth status error") + if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) { + tvModel.tokenRetryTimes++ + fetchFAuth(tvModel) + } + } + } + + override fun onFailure(call: Call, t: Throwable) { + Log.e(TAG, "auth request error $t") + if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) { + tvModel.tokenRetryTimes++ + fetchFAuth(tvModel) + } + } + }) + } + fun fetchData(tvModel: TVViewModel) { + if (tvModel.getTV().channel == "港澳台") { + fetchFAuth(tvModel) + return + } + if (tvModel.getTV().needToken) { - fetchVideo(tvModel) + if (needAuth) { + fetchAuth(tvModel) + } else { + fetchVideo(tvModel) + } } else { val cookie = - "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; yspappid=519748109" - fetchVideo(tvModel, cookie) + "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205" + if (needAuth) { + fetchAuth(tvModel, cookie) + } else { + fetchVideo(tvModel, cookie) + } } } @@ -240,10 +436,10 @@ class Request { } fun fetchToken() { - yspTokenService.getInfo() + yspTokenService.getInfo(token) .enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { - if (response.isSuccessful && response.body()?.data?.token != null) { + if (response.isSuccessful) { token = response.body()?.data?.token!! Log.i(TAG, "info success $token") } else { diff --git a/app/src/main/java/com/lizongying/mytv/SettingFragment.kt b/app/src/main/java/com/lizongying/mytv/SettingFragment.kt index 87889ae..d713772 100644 --- a/app/src/main/java/com/lizongying/mytv/SettingFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/SettingFragment.kt @@ -40,18 +40,21 @@ class SettingFragment( switchChannelReversal?.isChecked = channelReversal switchChannelReversal?.setOnCheckedChangeListener { _, isChecked -> (activity as MainActivity).saveChannelReversal(isChecked) + (activity as MainActivity).settingActive() } val switchChannelNum = _binding?.switchChannelNum switchChannelNum?.isChecked = channelNum switchChannelNum?.setOnCheckedChangeListener { _, isChecked -> (activity as MainActivity).saveChannelNum(isChecked) + (activity as MainActivity).settingActive() } val switchBootStartup = _binding?.switchBootStartup switchBootStartup?.isChecked = bootStartup switchBootStartup?.setOnCheckedChangeListener { _, isChecked -> (activity as MainActivity).saveBootStartup(isChecked) + (activity as MainActivity).settingActive() } updateManager = UpdateManager(context, this, versionCode) diff --git a/app/src/main/java/com/lizongying/mytv/TVList.kt b/app/src/main/java/com/lizongying/mytv/TVList.kt index b4f28ce..966ee72 100644 --- a/app/src/main/java/com/lizongying/mytv/TVList.kt +++ b/app/src/main/java/com/lizongying/mytv/TVList.kt @@ -9,14 +9,14 @@ import java.io.IOException object TVList { var list = mapOf( - "央视频道" to listOf( + "央视" to listOf( TV( 0, "CCTV1 综合", "CCTV1", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226231/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/d57905b93540bd15f0c48230dbbbff7ee0d645ff539e38866e2d15c8b9f7dfcd.png?imageMogr2/format/webp", "600001859", "2022576801", @@ -30,7 +30,7 @@ object TVList { "CCTV2", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226195/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/20115388de0207131af17eac86c33049b95d69eaff064e55653a1b941810a006.png?imageMogr2/format/webp", "600001800", "2022576701", @@ -44,7 +44,7 @@ object TVList { "CCTV3", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226397/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/7b7a65c712450da3deb6ca66fbacf4f9aee00d3f20bd80eafb5ada01ec63eb3a.png?imageMogr2/format/webp", "600001801", "2022576501", @@ -61,7 +61,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226191/index.m3u8" ), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/f357e58fdbcc076a3d65e1f958c942b2e14f14342c60736ceed98b092d35356a.png?imageMogr2/format/webp", "600001814", "2022576601", @@ -75,7 +75,7 @@ object TVList { "CCTV5", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226395/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/0a6a7138952675983a3d854df7688557b286d59aa06166edae51506f9204d655.png?imageMogr2/format/webp", "600001818", "2022576401", @@ -89,7 +89,7 @@ object TVList { "CCTV6", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226393/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/741515efda91f03f455df8a7da4ee11fa9329139c276435cf0a9e2af398d5bf2.png?imageMogr2/format/webp", "600108442", "2013693901", @@ -103,7 +103,7 @@ object TVList { "CCTV7", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226192/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/b29af94e295ebdf646cefb68122c429b9cd921f498ca20d2d8070252536f9ff9.png?imageMogr2/format/webp", "600004092", "2022576201", @@ -117,7 +117,7 @@ object TVList { "CCTV8", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226391/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/ad51de94426a0ba039e6dd6a8534ea98ecc813a6176bde87b4f18cc34d6d7590.png?imageMogr2/format/webp", "600001803", "2022576101", @@ -131,7 +131,7 @@ object TVList { "CCTV9", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226197/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/2ed1b4deeca179d5db806bb941790f82eb92a1b7299c1c38fe027f95a5caee5e.png?imageMogr2/format/webp", "600004078", "2022576001", @@ -145,7 +145,7 @@ object TVList { "CCTV10", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226189/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/aa6157ec65188cd41826e5a2f088c3d6d153205f5f6428258d12c59999e221aa.png?imageMogr2/format/webp", "600001805", "2022573001", @@ -159,7 +159,7 @@ object TVList { "CCTV11", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226240/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/ed12ed7c7a1034dae4350011fe039284c5d5a836506b28c9e32e3c75299625c0.png?imageMogr2/format/webp", "600001806", "2022575901", @@ -173,7 +173,7 @@ object TVList { "CCTV12", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226190/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/484083cffaa40df7e659565e8cb4d1cc740158a185512114167aa21fa0c59240.png?imageMogr2/format/webp", "600001807", "2022575801", @@ -190,7 +190,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226233/index.m3u8" ), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/266da7b43c03e2312186b4a999e0f060e8f15b10d2cc2c9aa32171819254cf1a.png?imageMogr2/format/webp", "600001811", "2022575701", @@ -204,7 +204,7 @@ object TVList { "CCTV14", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226193/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/af6b603896938dc346fbb16abfc63c12cba54b0ec9d18770a15d347d115f12d5.png?imageMogr2/format/webp", "600001809", "2022575601", @@ -218,7 +218,7 @@ object TVList { "CCTV15", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225785/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/2ceee92188ef684efe0d8b90839c4f3ad450d179dc64d59beff417059453af47.png?imageMogr2/format/webp", "600001815", "2022575501", @@ -235,7 +235,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226921/index.m3u8" ), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/53793fa7bacd3a93ff6dc5d2758418985e1f952a316c335d663b572d8bdcd74d.png?imageMogr2/format/webp", "600098637", "2022575401", @@ -249,7 +249,7 @@ object TVList { "CCTV17", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226198/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/ddef563072f8bad2bea5b9e52674cb7b4ed50efb20c26e61994dfbdf05c1e3c0.png?imageMogr2/format/webp", "600001810", "2022575301", @@ -263,7 +263,7 @@ object TVList { "CCTV5+", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226221/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/649ad76a90bfef55b05db9fe52e006487280f619089099d5dc971e387fc6eff0.png?imageMogr2/format/webp", "600001817", "2022576301", @@ -277,7 +277,7 @@ object TVList { "CCTV4K", listOf(), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/3e9d06fd7244d950df5838750f1c6ac3456e172b51caca2c16d2282125b111e8.png?imageMogr2/format/webp", "600002264", "2022575201", @@ -291,7 +291,7 @@ object TVList { "CCTV8K", listOf(), 0, - "央视频道", + "央视", "", "600156816", "2020603421", @@ -305,7 +305,7 @@ object TVList { "CCTV风云剧场频道", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226950/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/4d549e53e6d0f632d5a633d1945280797b153e588f919221a07faa869812cc89.png?imageMogr2/format/webp", "600099658", "2012513603", @@ -319,7 +319,7 @@ object TVList { "CCTV第一剧场频道", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226959/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/a556bd7d93ce65e18f243a8892b5604f4faa994a4897315914216a710a706208.png?imageMogr2/format/webp", "600099655", "2012514403", @@ -333,7 +333,7 @@ object TVList { "CCTV怀旧剧场频道", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226972/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/5661bd04fecdb6e899f801147a22ab5d3a475bf2b62e30aec2c0023190ebc9b1.png?imageMogr2/format/webp", "600099620", "2012511203", @@ -347,7 +347,7 @@ object TVList { "CCTV世界地理频道", listOf(), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/bb3c6c9e145d698137f5bb64a582021a01b51344b929003630eb769ea65832a9.png?imageMogr2/format/webp", "600099637", "2012513303", @@ -361,7 +361,7 @@ object TVList { "CCTV风云音乐频道", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226953/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/bbf1d024c5228b8dd128b0e3cb1717d173fab4ee84c3a4c8a57b1a215362ca3b.png?imageMogr2/format/webp", "600099660", "2012514103", @@ -375,7 +375,7 @@ object TVList { "CCTV兵器科技频道", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226975/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/4c6b6a6d3839889f34d33db3c2f80233b26b74d3489b393487635f8704e70796.png?imageMogr2/format/webp", "600099649", "2012513403", @@ -389,7 +389,7 @@ object TVList { "CCTV风云足球频道", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226984/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/cd1e2bb52b06a991de168733e5ff0f1d85adc8042d40c8f393f723543e5dd08a.png?imageMogr2/format/webp", "600099636", "2012514203", @@ -403,7 +403,7 @@ object TVList { "CCTV高尔夫·网球频道", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226978/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/cdd1b31ede7a5ad049ed53d9a072422f829e72dd062ed2c19e077fdd01699071.png?imageMogr2/format/webp", "600099659", "2012512503", @@ -417,7 +417,7 @@ object TVList { "CCTV女性时尚频道", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226969/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/fa28955ce8b2539d728bf4c6a13a46ff57ad76eae46627f7bcfb1ed8a613d3fc.png?imageMogr2/format/webp", "600099650", "2012513903", @@ -431,7 +431,7 @@ object TVList { "CCTV央视文化精品频道", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226981/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/14ac5ce40482cacd3d4b37435222bfe86af2b452a2f04ecbfc1d13d76edd7c57.png?imageMogr2/format/webp", "600099653", "2012513803", @@ -445,7 +445,7 @@ object TVList { "CCTV央视台球频道", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226956/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/10e14a92478011aa6c3c8562e62127f3b1908e29fcd78e4b2b24b9e6d3ec2fbc.png?imageMogr2/format/webp", "600099652", "2012513703", @@ -459,7 +459,7 @@ object TVList { "CCTV电视指南频道", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226987/index.m3u8"), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/244d72c0eb1615ed7d51c2f5db5a67f306aa3f58c05bc2d34de3aa7e956dc8c9.png?imageMogr2/format/webp", "600099656", "2012514003", @@ -473,7 +473,7 @@ object TVList { "CCTV卫生健康频道", listOf(), 0, - "央视频道", + "央视", "https://resources.yangshipin.cn/assets/oms/image/202306/54a6863656fdfd8f803be193ddf22441c5000a108833889816fd2d8911715ce8.png?imageMogr2/format/webp", "600099651", "2012513503", @@ -482,14 +482,14 @@ object TVList { mustToken = true ), ), - "地方频道" to listOf( + "地方" to listOf( TV( 33, "东方卫视", "东方卫视", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226217/index.m3u8"), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/9bd372ca292a82ce3aa08772b07efc4af1f85c21d1f268ea33440c49e9a0a488.png?imageMogr2/format/webp", "600002483", "2000292403", @@ -506,7 +506,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226211/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/4120e89d3079d08aa17d382f69a2308ec70839b278367763c34a34666c75cb88.png?imageMogr2/format/webp", "600002475", "2000296203", @@ -523,7 +523,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226194/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/7a6be5a2bb1dc53a945c016ff1f525dc4a84c51db371c15c89aa55404b0ba784.png?imageMogr2/format/webp", "600002508", "2000294503", @@ -540,7 +540,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226201/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/ac4ed6058a87c101ae7147ebc38905d0cae047fb73fd277ee5049b84f52bda36.png?imageMogr2/format/webp", "600002505", "2000281303", @@ -557,7 +557,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226200/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/380ad685c0c1d5b2c902246b8d2df6d3f9b45e2837abcfe493075bbded597a31.png?imageMogr2/format/webp", "600002521", "2000295603", @@ -574,7 +574,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225764/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/3c760d0d00463855890e8a1864ea4a6b6dd66b90c29b4ac714a4b17c16519871.png?imageMogr2/format/webp", "600002503", "2000294103", @@ -588,7 +588,7 @@ object TVList { "山东卫视", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226209/index.m3u8"), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/22d403f07a7cf5410b3ad3ddb65a11aa229a32475fac213f5344c9f0ec330ca1.png?imageMogr2/format/webp", "600002513", "2000294803", @@ -602,7 +602,7 @@ object TVList { "广东卫视", listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226216/index.m3u8"), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/28886880a4dc0f06fb7e0a528a1def0591d61a65870e29176ede0cc92033bbfd.png?imageMogr2/format/webp", "600002485", "2000292703", @@ -619,7 +619,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225770/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/54b7e97cb816bb223fe05f3fc44da2c7820eb66e8550c19d23100f2c414ecc38.png?imageMogr2/format/webp", "600002509", "2000294203", @@ -636,7 +636,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226202/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/657651f411de2673d1770d9a78b44c1265704f7468cc41d4be7f51d630768494.png?imageMogr2/format/webp", "600002531", "2000297803", @@ -653,7 +653,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225767/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/74925962148a6d31c85808b6cd4e444c2a54bab393d2c5fc85e960b50e22fa86.png?imageMogr2/format/webp", "600002525", "2000296103", @@ -670,7 +670,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225750/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/d545becdc81c60197b08c7f47380705e4665ed3fe55efc8b855e486f6e655378.png?imageMogr2/format/webp", "600002493", "2000293403", @@ -687,7 +687,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225793/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/4eb45f4781d33d872af027dc01c941559aab55667dd99cc5c22bef7037807b13.png?imageMogr2/format/webp", "600002490", "2000293303", @@ -704,7 +704,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226222/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/f4f23633c578beea49a3841d88d3490100f029ee349059fa532869db889872c5.png?imageMogr2/format/webp", "600002309", "2000272103", @@ -721,7 +721,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226215/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/d8273ae9be698ce2db21f5b886ecac95a73429593f93713c60ed8c12c38bf0d3.png?imageMogr2/format/webp", "600002498", "2000293903", @@ -738,7 +738,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226199/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/a66c836bd98ba3e41a2e9a570d4b9c50dedc6839e9de333e2e78212ad505f37e.png?imageMogr2/format/webp", "600002520", "2000295503", @@ -755,7 +755,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226203/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/f35fa04b51b1ee4984b03578b65403570868ebca03c6c01e11b097f999a58d9b.png?imageMogr2/format/webp", "600002532", "2000298003", @@ -772,7 +772,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226205/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/d59fec04c902e3581c617136d02d4b9b8c4cbe64272781ddd3525e80c823edb7.png?imageMogr2/format/webp", "600002481", "2000292203", @@ -789,7 +789,7 @@ object TVList { "http://39.134.24.166/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225768/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/3276a414ae0eaa0f116f2045cd913367967d0c7c1e978e8621ac3879436c6ed7.png?imageMogr2/format/webp", "600002516", "2000295003", @@ -806,7 +806,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225766/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/3208fe6564a293c21b711333fb3edb05bb5b406cff840573c9a8d839680a1579.png?imageMogr2/format/webp", "600002484", "2000292503", @@ -823,7 +823,7 @@ object TVList { "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225769/index.m3u8" ), 0, - "地方频道", + "地方", "https://resources.yangshipin.cn/assets/oms/image/202306/6e060391fde0469801fc3d84dbf204b4f8d650d251f17d7595a6964c0bb99e81.png?imageMogr2/format/webp", "600002506", "2000291503", @@ -837,7 +837,7 @@ object TVList { "天津卫视", listOf(), 0, - "地方频道", + "地方", "", "600152137", "2019927003", @@ -851,7 +851,7 @@ object TVList { "新疆卫视", listOf(), 0, - "地方频道", + "地方", "", "600152138", "2019927403", @@ -865,7 +865,7 @@ object TVList { "兵团卫视", listOf(), 0, - "地方频道", + "地方", "", "600170344", "2022606701", diff --git a/app/src/main/java/com/lizongying/mytv/api/ApiClient.kt b/app/src/main/java/com/lizongying/mytv/api/ApiClient.kt index 6ff511a..fb22208 100644 --- a/app/src/main/java/com/lizongying/mytv/api/ApiClient.kt +++ b/app/src/main/java/com/lizongying/mytv/api/ApiClient.kt @@ -16,6 +16,7 @@ class ApiClient { private val devUrl = "http://10.0.2.2:8081/" private val protoUrl = "https://capi.yangshipin.cn/" private val traceUrl = "https://btrace.yangshipin.cn/" + private val fUrl = "https://m.fengshows.com/" private var okHttpClient = getUnsafeOkHttpClient() @@ -59,6 +60,14 @@ class ApiClient { .build().create(YSPBtraceService::class.java) } + val fAuthService: FAuthService by lazy { + Retrofit.Builder() + .baseUrl(fUrl) + .client(okHttpClient) + .addConverterFactory(GsonConverterFactory.create()) + .build().create(FAuthService::class.java) + } + private fun getUnsafeOkHttpClient(): OkHttpClient { try { val trustAllCerts: Array = arrayOf( diff --git a/app/src/main/java/com/lizongying/mytv/api/FAuth.kt b/app/src/main/java/com/lizongying/mytv/api/FAuth.kt new file mode 100644 index 0000000..0dca043 --- /dev/null +++ b/app/src/main/java/com/lizongying/mytv/api/FAuth.kt @@ -0,0 +1,10 @@ +package com.lizongying.mytv.api + + +data class FAuth( + val data: Data, +) { + data class Data( + val live_url: String, + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv/api/FAuthService.kt b/app/src/main/java/com/lizongying/mytv/api/FAuthService.kt new file mode 100644 index 0000000..1e597dd --- /dev/null +++ b/app/src/main/java/com/lizongying/mytv/api/FAuthService.kt @@ -0,0 +1,13 @@ +package com.lizongying.mytv.api + +import retrofit2.Call +import retrofit2.http.GET +import retrofit2.http.Query + +interface FAuthService { + @GET("api/v3/hub/live/auth-url") + fun getAuth( + @Query("live_id") live_id: String = "", + @Query("live_qa") live_qa: String = "", + ): Call +} \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv/api/Info.kt b/app/src/main/java/com/lizongying/mytv/api/Info.kt index 0f46b18..c1898bc 100644 --- a/app/src/main/java/com/lizongying/mytv/api/Info.kt +++ b/app/src/main/java/com/lizongying/mytv/api/Info.kt @@ -1,5 +1,6 @@ package com.lizongying.mytv.api + data class Info( val code: Int?, val msg: String?, diff --git a/app/src/main/java/com/lizongying/mytv/api/YSPApiService.kt b/app/src/main/java/com/lizongying/mytv/api/YSPApiService.kt index 563a17b..e9bbee2 100644 --- a/app/src/main/java/com/lizongying/mytv/api/YSPApiService.kt +++ b/app/src/main/java/com/lizongying/mytv/api/YSPApiService.kt @@ -13,9 +13,11 @@ interface YSPApiService { "content-type: application/json;charset=UTF-8", "referer: https://www.yangshipin.cn/", "yspappid: 519748109", + "user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" ) fun getLiveInfo( @Header("cookie") cookie: String, + @Header("Yspplayertoken") token: String, @Body request: LiveInfoRequest, ): Call diff --git a/app/src/main/java/com/lizongying/mytv/api/YSPTokenService.kt b/app/src/main/java/com/lizongying/mytv/api/YSPTokenService.kt index 3188708..7d08cd1 100644 --- a/app/src/main/java/com/lizongying/mytv/api/YSPTokenService.kt +++ b/app/src/main/java/com/lizongying/mytv/api/YSPTokenService.kt @@ -2,10 +2,12 @@ package com.lizongying.mytv.api import retrofit2.Call import retrofit2.http.GET +import retrofit2.http.Query interface YSPTokenService { @GET("my-tv/v1/info") fun getInfo( + @Query("token") token: String = "", ): Call } \ No newline at end of file diff --git a/app/src/main/res/layout/channel.xml b/app/src/main/res/layout/channel.xml index 47c664a..7c48bd5 100644 --- a/app/src/main/res/layout/channel.xml +++ b/app/src/main/res/layout/channel.xml @@ -13,7 +13,6 @@ android:layout_height="wrap_content" android:layout_gravity="end" android:layout_marginTop="0dp" - android:text="99" android:textColor="#FFEEEEEE" android:textStyle="bold" android:textSize="50sp" /> diff --git a/app/src/main/res/raw/channels.json b/app/src/main/res/raw/channels.json index 244d1da..9bc48af 100644 --- a/app/src/main/res/raw/channels.json +++ b/app/src/main/res/raw/channels.json @@ -2,7 +2,7 @@ { "id": 0, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/d57905b93540bd15f0c48230dbbbff7ee0d645ff539e38866e2d15c8b9f7dfcd.png?imageMogr2/format/webp", "pid": "600001859", "sid": "2000210103", @@ -17,7 +17,7 @@ { "id": 1, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/20115388de0207131af17eac86c33049b95d69eaff064e55653a1b941810a006.png?imageMogr2/format/webp", "pid": "600001800", "sid": "2000203603", @@ -32,7 +32,7 @@ { "id": 2, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/7b7a65c712450da3deb6ca66fbacf4f9aee00d3f20bd80eafb5ada01ec63eb3a.png?imageMogr2/format/webp", "pid": "600001801", "sid": "2000203803", @@ -47,7 +47,7 @@ { "id": 3, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/f357e58fdbcc076a3d65e1f958c942b2e14f14342c60736ceed98b092d35356a.png?imageMogr2/format/webp", "pid": "600001814", "sid": "2000204803", @@ -63,7 +63,7 @@ { "id": 4, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/0a6a7138952675983a3d854df7688557b286d59aa06166edae51506f9204d655.png?imageMogr2/format/webp", "pid": "600001818", "sid": "2000205103", @@ -78,7 +78,7 @@ { "id": 5, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/741515efda91f03f455df8a7da4ee11fa9329139c276435cf0a9e2af398d5bf2.png?imageMogr2/format/webp", "pid": "600001802", "sid": "2013693901", @@ -93,7 +93,7 @@ { "id": 6, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/b29af94e295ebdf646cefb68122c429b9cd921f498ca20d2d8070252536f9ff9.png?imageMogr2/format/webp", "pid": "600004092", "sid": "2000510003", @@ -108,7 +108,7 @@ { "id": 7, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/ad51de94426a0ba039e6dd6a8534ea98ecc813a6176bde87b4f18cc34d6d7590.png?imageMogr2/format/webp", "pid": "600001803", "sid": "2000203903", @@ -123,7 +123,7 @@ { "id": 8, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/2ed1b4deeca179d5db806bb941790f82eb92a1b7299c1c38fe027f95a5caee5e.png?imageMogr2/format/webp", "pid": "600004078", "sid": "2000499403", @@ -138,7 +138,7 @@ { "id": 9, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/aa6157ec65188cd41826e5a2f088c3d6d153205f5f6428258d12c59999e221aa.png?imageMogr2/format/webp", "pid": "600001805", "sid": "2000203503", @@ -153,7 +153,7 @@ { "id": 10, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/ed12ed7c7a1034dae4350011fe039284c5d5a836506b28c9e32e3c75299625c0.png?imageMogr2/format/webp", "pid": "600001806", "sid": "2000204103", @@ -168,7 +168,7 @@ { "id": 11, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/484083cffaa40df7e659565e8cb4d1cc740158a185512114167aa21fa0c59240.png?imageMogr2/format/webp", "pid": "600001807", "sid": "2000202603", @@ -183,7 +183,7 @@ { "id": 12, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/266da7b43c03e2312186b4a999e0f060e8f15b10d2cc2c9aa32171819254cf1a.png?imageMogr2/format/webp", "pid": "600001811", "sid": "2000204603", @@ -199,7 +199,7 @@ { "id": 13, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/af6b603896938dc346fbb16abfc63c12cba54b0ec9d18770a15d347d115f12d5.png?imageMogr2/format/webp", "pid": "600001809", "sid": "2000204403", @@ -214,7 +214,7 @@ { "id": 14, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/2ceee92188ef684efe0d8b90839c4f3ad450d179dc64d59beff417059453af47.png?imageMogr2/format/webp", "pid": "600001815", "sid": "2000205003", @@ -229,7 +229,7 @@ { "id": 15, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/53793fa7bacd3a93ff6dc5d2758418985e1f952a316c335d663b572d8bdcd74d.png?imageMogr2/format/webp", "pid": "600098637", "sid": "2012375003", @@ -245,7 +245,7 @@ { "id": 16, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/ddef563072f8bad2bea5b9e52674cb7b4ed50efb20c26e61994dfbdf05c1e3c0.png?imageMogr2/format/webp", "pid": "600001810", "sid": "2000204203", @@ -260,7 +260,7 @@ { "id": 17, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/649ad76a90bfef55b05db9fe52e006487280f619089099d5dc971e387fc6eff0.png?imageMogr2/format/webp", "pid": "600001817", "sid": "2000204503", @@ -275,7 +275,7 @@ { "id": 18, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/3e9d06fd7244d950df5838750f1c6ac3456e172b51caca2c16d2282125b111e8.png?imageMogr2/format/webp", "pid": "600002264", "sid": "2000266303", @@ -290,7 +290,7 @@ { "id": 19, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "", "pid": "600156816", "sid": "2020603421", @@ -305,7 +305,7 @@ { "id": 20, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/4d549e53e6d0f632d5a633d1945280797b153e588f919221a07faa869812cc89.png?imageMogr2/format/webp", "pid": "600099658", "sid": "2012513603", @@ -320,7 +320,7 @@ { "id": 21, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/a556bd7d93ce65e18f243a8892b5604f4faa994a4897315914216a710a706208.png?imageMogr2/format/webp", "pid": "600099655", "sid": "2012514403", @@ -335,7 +335,7 @@ { "id": 22, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/5661bd04fecdb6e899f801147a22ab5d3a475bf2b62e30aec2c0023190ebc9b1.png?imageMogr2/format/webp", "pid": "600099620", "sid": "2012511203", @@ -350,7 +350,7 @@ { "id": 23, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/bb3c6c9e145d698137f5bb64a582021a01b51344b929003630eb769ea65832a9.png?imageMogr2/format/webp", "pid": "600099637", "sid": "2012513303", @@ -365,7 +365,7 @@ { "id": 24, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/bbf1d024c5228b8dd128b0e3cb1717d173fab4ee84c3a4c8a57b1a215362ca3b.png?imageMogr2/format/webp", "pid": "600099660", "sid": "2012514103", @@ -380,7 +380,7 @@ { "id": 25, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/4c6b6a6d3839889f34d33db3c2f80233b26b74d3489b393487635f8704e70796.png?imageMogr2/format/webp", "pid": "600099649", "sid": "2012513403", @@ -395,7 +395,7 @@ { "id": 26, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/cd1e2bb52b06a991de168733e5ff0f1d85adc8042d40c8f393f723543e5dd08a.png?imageMogr2/format/webp", "pid": "600099636", "sid": "2012514203", @@ -410,7 +410,7 @@ { "id": 27, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/cdd1b31ede7a5ad049ed53d9a072422f829e72dd062ed2c19e077fdd01699071.png?imageMogr2/format/webp", "pid": "600099659", "sid": "2012512503", @@ -425,7 +425,7 @@ { "id": 28, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/fa28955ce8b2539d728bf4c6a13a46ff57ad76eae46627f7bcfb1ed8a613d3fc.png?imageMogr2/format/webp", "pid": "600099650", "sid": "2012513903", @@ -440,7 +440,7 @@ { "id": 29, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/14ac5ce40482cacd3d4b37435222bfe86af2b452a2f04ecbfc1d13d76edd7c57.png?imageMogr2/format/webp", "pid": "600099653", "sid": "2012513803", @@ -455,7 +455,7 @@ { "id": 30, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/10e14a92478011aa6c3c8562e62127f3b1908e29fcd78e4b2b24b9e6d3ec2fbc.png?imageMogr2/format/webp", "pid": "600099652", "sid": "2012513703", @@ -470,7 +470,7 @@ { "id": 31, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/244d72c0eb1615ed7d51c2f5db5a67f306aa3f58c05bc2d34de3aa7e956dc8c9.png?imageMogr2/format/webp", "pid": "600099656", "sid": "2012514003", @@ -485,7 +485,7 @@ { "id": 32, "videoIndex": 0, - "channel": "央视频道", + "channel": "央视", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/54a6863656fdfd8f803be193ddf22441c5000a108833889816fd2d8911715ce8.png?imageMogr2/format/webp", "pid": "600099651", "sid": "2012513503", @@ -500,7 +500,7 @@ { "id": 33, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/9bd372ca292a82ce3aa08772b07efc4af1f85c21d1f268ea33440c49e9a0a488.png?imageMogr2/format/webp", "pid": "600002483", "sid": "2000292403", @@ -515,7 +515,7 @@ { "id": 34, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/4120e89d3079d08aa17d382f69a2308ec70839b278367763c34a34666c75cb88.png?imageMogr2/format/webp", "pid": "600002475", "sid": "2000296203", @@ -531,7 +531,7 @@ { "id": 35, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/7a6be5a2bb1dc53a945c016ff1f525dc4a84c51db371c15c89aa55404b0ba784.png?imageMogr2/format/webp", "pid": "600002508", "sid": "2000294503", @@ -547,7 +547,7 @@ { "id": 36, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/ac4ed6058a87c101ae7147ebc38905d0cae047fb73fd277ee5049b84f52bda36.png?imageMogr2/format/webp", "pid": "600002505", "sid": "2000281303", @@ -563,7 +563,7 @@ { "id": 37, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/380ad685c0c1d5b2c902246b8d2df6d3f9b45e2837abcfe493075bbded597a31.png?imageMogr2/format/webp", "pid": "600002521", "sid": "2000295603", @@ -579,7 +579,7 @@ { "id": 38, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/3c760d0d00463855890e8a1864ea4a6b6dd66b90c29b4ac714a4b17c16519871.png?imageMogr2/format/webp", "pid": "600002503", "sid": "2000294103", @@ -595,7 +595,7 @@ { "id": 39, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/22d403f07a7cf5410b3ad3ddb65a11aa229a32475fac213f5344c9f0ec330ca1.png?imageMogr2/format/webp", "pid": "600002513", "sid": "2000294803", @@ -610,7 +610,7 @@ { "id": 40, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/28886880a4dc0f06fb7e0a528a1def0591d61a65870e29176ede0cc92033bbfd.png?imageMogr2/format/webp", "pid": "600002485", "sid": "2000292703", @@ -625,7 +625,7 @@ { "id": 41, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/54b7e97cb816bb223fe05f3fc44da2c7820eb66e8550c19d23100f2c414ecc38.png?imageMogr2/format/webp", "pid": "600002509", "sid": "2000294203", @@ -641,7 +641,7 @@ { "id": 42, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/657651f411de2673d1770d9a78b44c1265704f7468cc41d4be7f51d630768494.png?imageMogr2/format/webp", "pid": "600002531", "sid": "2000297803", @@ -657,7 +657,7 @@ { "id": 43, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/74925962148a6d31c85808b6cd4e444c2a54bab393d2c5fc85e960b50e22fa86.png?imageMogr2/format/webp", "pid": "600002525", "sid": "2000296103", @@ -673,7 +673,7 @@ { "id": 44, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/d545becdc81c60197b08c7f47380705e4665ed3fe55efc8b855e486f6e655378.png?imageMogr2/format/webp", "pid": "600002493", "sid": "2000293403", @@ -689,7 +689,7 @@ { "id": 45, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/4eb45f4781d33d872af027dc01c941559aab55667dd99cc5c22bef7037807b13.png?imageMogr2/format/webp", "pid": "600002490", "sid": "2000293303", @@ -705,7 +705,7 @@ { "id": 46, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/f4f23633c578beea49a3841d88d3490100f029ee349059fa532869db889872c5.png?imageMogr2/format/webp", "pid": "600002309", "sid": "2000272103", @@ -721,7 +721,7 @@ { "id": 47, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/d8273ae9be698ce2db21f5b886ecac95a73429593f93713c60ed8c12c38bf0d3.png?imageMogr2/format/webp", "pid": "600002498", "sid": "2000293903", @@ -737,7 +737,7 @@ { "id": 48, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/a66c836bd98ba3e41a2e9a570d4b9c50dedc6839e9de333e2e78212ad505f37e.png?imageMogr2/format/webp", "pid": "600002520", "sid": "2000295503", @@ -753,7 +753,7 @@ { "id": 49, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/f35fa04b51b1ee4984b03578b65403570868ebca03c6c01e11b097f999a58d9b.png?imageMogr2/format/webp", "pid": "600002532", "sid": "2000298003", @@ -769,7 +769,7 @@ { "id": 50, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/d59fec04c902e3581c617136d02d4b9b8c4cbe64272781ddd3525e80c823edb7.png?imageMogr2/format/webp", "pid": "600002481", "sid": "2000292203", @@ -785,7 +785,7 @@ { "id": 51, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/3276a414ae0eaa0f116f2045cd913367967d0c7c1e978e8621ac3879436c6ed7.png?imageMogr2/format/webp", "pid": "600002516", "sid": "2000295003", @@ -801,7 +801,7 @@ { "id": 52, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/3208fe6564a293c21b711333fb3edb05bb5b406cff840573c9a8d839680a1579.png?imageMogr2/format/webp", "pid": "600002484", "sid": "2000292503", @@ -817,7 +817,7 @@ { "id": 53, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "https://resources.yangshipin.cn/assets/oms/image/202306/6e060391fde0469801fc3d84dbf204b4f8d650d251f17d7595a6964c0bb99e81.png?imageMogr2/format/webp", "pid": "600002506", "sid": "2000291503", @@ -833,7 +833,7 @@ { "id": 54, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "", "pid": "600152137", "sid": "2019927003", @@ -848,7 +848,7 @@ { "id": 55, "videoIndex": 0, - "channel": "地方频道", + "channel": "地方", "logo": "", "pid": "600152138", "sid": "2019927403",