Skip to content

Commit

Permalink
Fix douyin live update and bilibili live record bug
Browse files Browse the repository at this point in the history
  • Loading branch information
ihmily committed Sep 7, 2023
1 parent 9be963d commit fc3449e
Show file tree
Hide file tree
Showing 8 changed files with 264 additions and 160 deletions.
20 changes: 15 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@
```
.
└── DouyinLiveRecorder/
├── /api -> (get live stream api )
├── /api -> (get live stream api )
├── /config -> (config record)
├── /log -> (save runing log file)
├── /backup_config -> (backup file)
├── /libs -> (dll file)
├── main.py -> (main file)
├── spider.py-> (get live url)
├── web_rid.py -> (get web_rid)
Expand All @@ -36,6 +37,7 @@
├── x-bogus.js -> (get douyin xbogus token)
├── ffmpeg.exe -> (record video)
├── index.html -> (play m3u8 and flv video)
├── requirements.txt -> (library dependencies)
```

</div>
Expand All @@ -47,12 +49,13 @@
- 抖音录制需要使用到PC网页端直播间页面的Cookie,请先在config.ini配置文件中添加后再进行抖音录制
- 注意事项① 录制使用到了ffmpeg,如果没有则无法进行录制,请将ffmpeg.exe放置运行文件同个文件夹
- 注意事项② 录制Tiktok时需要使用vpn代理,请先在配置文件中设置开启代理并添加proxy_addr链接
- 注意事项③ 如果电脑开启了`全局或者规则代理`,可不用添加proxy_addr参数值但仍需在config.ini配置文件中设置开启代理 (最好还是设置一下代理地址,降低出错概率)
- 注意事项③ 如果电脑开启了`全局或者规则代理`,可不用添加proxy_addr参数值但仍需在config.ini配置文件中设置开启代理 (最好还是设置一下代理地址,否则很容易请求出错)
- 注意事项④ 可以在URL_config.ini中的链接开头加上#,此时将不会录制该条链接对应的直播
- 注意事项⑤ 测试时有可能会出现在IDE如Pycharm中运行代码进行直播录制,录制出来的视频却无法正常播放的现象,如果遇到这个问题 最好在命令控制台DOS界面运行代码,录制出来的视频即可正常播放。
- 可使用 `pyinstaller -D或-F` 将代码打包成exe可执行文件 ,前提是已经安装了`pyinstaller`
- 当同时在录制多个直播时,最好线程数设置大一些,否则可能出现其中一个直播录制出错。当然设置的过大也没用,要同时考虑自身电脑的配置,如CPU内核数、网络带宽等限制。
- 如果想直接使用打包好的录制软件,进入[Releases](https://github.com/ihmily/DouyinLiveRecorder/releases) 下载最新发布的 zip压缩包即可,可能有些电脑会报毒,直接忽略即可,这是pyinstaller打包的锅。
- 如果要长时间挂着软件循环监测直播,最好循环时间设置长一点,避免因请求频繁导致被官方封禁IP 。

&emsp;

Expand Down Expand Up @@ -83,7 +86,7 @@ B站:
https://live.bilibili.com/320
```

Tiktok目前只支持PC网页端地址(没下载app),其他平台 app端直播间分享地址和网页端长地址都能正常进行录制(抖音尽量用长链接,避免因短链接转换失效导致不能正常录制)。
Tiktok目前只支持PC网页端地址(我没下载app),其他平台 app端直播间分享地址和网页端长地址都能正常进行录制(抖音尽量用长链接,避免因短链接转换失效导致不能正常录制)。

</div>

Expand All @@ -105,7 +108,7 @@ GET https://hmily.vip/api/jx/live/?url=https://live.douyin.com/573716250978
GET https://hmily.vip/api/jx/live/convert.php?url=https://v.douyin.com/iQLgKSj/
```

在线播放m3u8视频地址:[https://jx.hmily.vip/play/ ](https://jx.hmily.vip/play/)
在线播放m3u8和flv视频网站:[M3U8 在线视频播放器 ](https://jx.hmily.vip/play/)

&emsp;

Expand All @@ -117,11 +120,18 @@ GET https://hmily.vip/api/jx/live/convert.php?url=https://v.douyin.com/iQLgKSj/

## ⏳提交日志

- 20230907
- 修复了因抖音官方更新了版本导致的录制出错以及短链接转换出错

- 修复B站无法录制原画视频的bug

- 修改了配置文件字段,新增各平台自定义设置Cookie

- 20230903
- 修复了Tiktok录制时报644无法录制的问题
- 新增直播状态推送到钉钉和微信的功能,如有需要请看 [设置推送教程](https://d04vqdiqwr3.feishu.cn/docx/XFPwdDDvfobbzlxhmMYcvouynDh?from=from_copylink)
- 最近比较忙,其他问题有时间再更新

- 20230816
- 修复斗鱼直播(官方更新了字段)和快手直播录制出错的问题
- 20230814
Expand Down
11 changes: 7 additions & 4 deletions api/convert.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
* Author: Hmily
* Github:https://github.com/ihmily
* Date: 2023-07-20 21:06:20
* Update: 2023-09-07 22:34:57
* Copyright (c) 2023 by Hmily, All Rights Reserved.
* Function:convert short url to long url
* Address:https://github.com/ihmily/DouyinLiveRecorder
Expand All @@ -20,8 +21,8 @@
$share_url=$_GET['url'];

$get_id=get_redirect_url($share_url);
preg_match('/reflow\/(.*?)\?u_code/', $get_id, $room_id);
preg_match('/&sec_user_id=(.*?)&ecom_share_track_params/', $get_id, $sec_user_id);
preg_match('/reflow\/(.*?)\?/', $get_id, $room_id);
preg_match('/sec_user_id=([\w\d_\-]+)&/', $get_id, $sec_user_id);
$room_data=get_live_web_rid($room_id[1],$sec_user_id[1]);
$title=$room_data[0];
$web_rid=$room_data[1];
Expand All @@ -44,7 +45,7 @@
exit(json_encode($return,448));


// 抖音X-bogus算法,这里我直接封装成接口进行调用了
// 抖音X-bogus算法,直接调用我封装的接口
function get_xbogus($url) {
$query = parse_url($url, PHP_URL_QUERY);
$url = "http://43.138.133.177:8890/xbogus";
Expand Down Expand Up @@ -115,4 +116,6 @@ function get_redirect_url($url) {
curl_close($curl);
preg_match("/Location: (.*?)\r\n/iU",$ret,$location);
return $location[1];
}
}


51 changes: 38 additions & 13 deletions api/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
* Author: Hmily
* Github:https://github.com/ihmily
* Date: 2023-07-20 21:06:20
* Update: 2023-08-05 23:35:00
* Update: 2023-09-07 23:53:07
* Copyright (c) 2023 by Hmily, All Rights Reserved.
* Function:Spider the live stream url
* Address:https://github.com/ihmily/DouyinLiveRecorder
*/


// 本API代码只有解析抖音、快手和虎牙的,有需要其他的可自己根据源码增加
header('Content-type: application/json; charset=utf-8');

if(empty($_GET['url'])){
Expand All @@ -23,7 +25,7 @@
// 判断是否是app端分享链接,如果是则转为PC网页端地址,否则无法解析
// 示例链接:
// $live_url="https://live.douyin.com/187615265444";
$json_str=get_curl("https://hmily.vip/api/dy/live/convert.php?url=".$live_url);
$json_str=get_curl("https://hmily.vip/api/jx/live/convert.php?url=".$live_url);
$json_data=json_decode($json_str,true);
$live_url = $json_data['long_url'];
}
Expand Down Expand Up @@ -52,20 +54,37 @@ function get_douyin_json_data($url) {
$cookies='ttwid=1%7CIkooT8SJQrpeYtHlSALuhz9BdcHpaaf9tHQRKHuDaYE%7C1687785070%7C6690250483b63b6482128174d0f93bd879614d76f1b6e03ca52e032cf7fbaafd; passport_csrf_token=52bece134ac246c81163cc93b72f86a6; passport_csrf_token_default=52bece134ac246c81163cc93b72f86a6; d_ticket=2b9e3eb3626216c0122f0d980f867deb7b414; n_mh=hvnJEQ4Q5eiH74-84kTFUyv4VK8xtSrpRZG1AhCeFNI; passport_auth_status=a74f300f376940d65914eb148d55ca96%2C9ca487aea255972120d502f736c5dd7b; passport_auth_status_ss=a74f300f376940d65914eb148d55ca96%2C9ca487aea255972120d502f736c5dd7b; sso_auth_status=52ecac30d95890cc7896c880366aa21a; sso_auth_status_ss=52ecac30d95890cc7896c880366aa21a; LOGIN_STATUS=1; store-region=cn-fj; store-region-src=uid; __security_server_data_status=1; __live_version__=%221.1.1.1853%22; live_can_add_dy_2_desktop=%220%22; xgplayer_user_id=528819598596; msToken=ZfXzPPa_KqQDF9wkHigKqgyUMIt33-qgLl1qqthGsAea4L69i9wxWaGH4GaQ9M_Q-eqhLpnD4v8FRGIj9KGJGIyLmjPkR1uepZ0gBaqhCkqK1KaauPXT_VK_uVgW6q4=; home_can_add_dy_2_desktop=%220%22; strategyABtestKey=%221689685952.92%22; FOLLOW_LIVE_POINT_INFO=%22MS4wLjABAAAAf6aekfyBsc4u8jMkeYbgnkFa0ksIWKWpGOywuyHXyo4%2F1689609600000%2F0%2F1689606316434%2F0%22; FOLLOW_NUMBER_YELLOW_POINT_INFO=%22MS4wLjABAAAAf6aekfyBsc4u8jMkeYbgnkFa0ksIWKWpGOywuyHXyo4%2F1689609600000%2F0%2F0%2F1689594083273%22; FORCE_LOGIN=%7B%22videoConsumedRemainSeconds%22%3A180%7D; volume_info=%7B%22isUserMute%22%3Afalse%2C%22isMute%22%3Atrue%2C%22volume%22%3A0.6%7D; device_web_cpu_core=8; device_web_memory_size=-1; webcast_local_quality=origin; csrf_session_id=0446f50cc7e08f146ad07351af90f413; __ac_nonce=064be522600a12daa29ff; __ac_signature=_02B4Z6wo00f0145FB4AAAIDCkga5P5okFMuOdAMAAIc3h1Lmbu.WZmNdgawlJBkHRSAf1yndkZFgF.zN2OHlE62.f.4ZFt740eSkTrQW8j3EM2s9s3vtK9LGh-h9jhUkgSbj4UOtYTqpCZZc88; webcast_leading_last_show_time=1690194481638; webcast_leading_total_show_times=1; odin_tt=6ebbe0a3c1b4e5bc6d333c5c7514fc88a288b3b03b1f0cf34826dee5d6d6394620f17fd4eb624b710954233f38fa3c67fd4a5338bffaa792a2cf71d1b51d837f079925497d6b372f47a577d779036a71; msToken=uHqyINCG79-ojuC5cXU6tYm0Av3BqNzqLkFGvbNw5QmSCtFY7xYHJjJ3wu-gk2Evj5QQ7D6UMsz2inlRN-aZf8xTGMAnpmgieOrygPqoK7QboFwCXR7aLi4KKcFXvFu2; tt_scid=BVvDLf3XEG4PZlY2-haad4.kR2BYWdq4X88b6-sPA2Wpg2lsSDI5M7YuZ7H-GPf.6646';

$html_str = get_curl($url,$headers,$cookies);
preg_match('/<script id="RENDER_DATA" type="application\/json">(.*?)<\/script><script type=/', $html_str, $matches);
$quote_json_str = $matches[1];
$unquote_json_str = urldecode($quote_json_str);
$json_data = json_decode($unquote_json_str, true);
// print_r($html_str);

$pattern = '/self\.__pace_f\.push(.*?)<\/script><div hidden id/Us';
$p_result = preg_match($pattern, $html_str, $matches);
$pattern2 = '/state\\\":(.*?),\\\"isAsianGames/';
$p_result2 = preg_match($pattern2, $matches[1], $matches2);
$cleaned_string = str_replace("\\", "", $matches2[1].'}]}');
$cleaned_string = preg_replace('/bdp_log=(.*?)&bdpsum=/', '', $cleaned_string);

$replacements = array(
'"[' => '[',
']"' => ']',
'"{' => '{',
'}"' => '}',
'u0026' => '&'
);

$cleaned_string = strtr($cleaned_string, $replacements);
$json_str='{"state":'.$cleaned_string;
// echo $json_str;
$json_data = json_decode($json_str, true);
return $json_data;

}


# 第一种数据
function get_douyin_stream_url($json_data) {
$initialState = $json_data['app']['initialState'];
$initialState = $json_data['state'];
$streamStore = $initialState['streamStore'];
$roomStore = $initialState['roomStore'];
$is_login = $json_data['app']['odin']['user_is_login'];
$streamData = $streamStore['streamData']['H265_streamData']['options'];
$stream = $streamStore['streamData']['H265_streamData']['stream'];
$stream2 = $streamStore['streamData']['H264_streamData']['stream'];
Expand Down Expand Up @@ -93,7 +112,7 @@ function get_douyin_stream_url($json_data) {

# 第二种数据(更好)
function get_douyin_stream_url2($json_data,$live_url) {
$roomStore = $json_data['app']['initialState']['roomStore'];
$roomStore = $json_data['state']['roomStore'];
$roomInfo = $roomStore['roomInfo'];
$anchor_name = $roomInfo['anchor']['nickname'];
$live_title = $roomInfo['room']['title'] ;
Expand All @@ -103,7 +122,6 @@ function get_douyin_stream_url2($json_data,$live_url) {
if ($status == 4) {
$data=["live_status"=>'主播未开播或者直播已经结束!'];
} else {
$is_login = $json_data['app']['odin']['user_is_login'];
$stream_url = $roomInfo['room']['stream_url'];
// flv视频流链接
$flv_url_list = $stream_url['flv_pull_url'];
Expand All @@ -128,7 +146,8 @@ function get_douyin_stream_url2($json_data,$live_url) {
function get_kuaishou_stream_url($live_url){
$headers = array(
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0',
'Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2'
'Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Cookie:clientid=3; did=web_2e5935532808ea57f357c827b45abaf4; didv=1687682547000; client_key=65890b29; kpn=GAME_ZONE; clientid=3; did=web_2e5935532808ea57f357c827b45abaf4; client_key=65890b29; kpn=GAME_ZONE; userId=580178847; kuaishou.live.web_st=ChRrdWFpc2hvdS5saXZlLndlYi5zdBKgAQ-E2wk--dxc2ehil5tQ5PZxSAAy_WocJekwLrvD4yIZxEo4y76RBkXONqX9xSLhyX5WOyhWdsXrwH-Nj0RTgM4csF_UwnsIclnnZT6WNO2tfB3fmNHvZHAIRtqDl6hXsS1x8vwgHCii65me0EiPh1LK855TafkNx9A7wrTma6XPlCPL8L1GNKTjtiQB2L7Y0kuOp-l0zVzIidHhFvGXfFEaEgCrAu8bFEUPixNgRvVq1Nb0ZSIghKUYro_uVYFHrcP3wJ93ACmwb-oSRGVtcLhGUdaI43UoBTAB; kuaishou.live.web_ph=c371edbd1ecfdc90fb87ae8c0c8738ec6f3f; userId=580178847; kuaishou.live.bfb1s=477cb0011daca84b36b3a4676857e5a1'
);
$html_str = get_curl($live_url,$headers);
preg_match('/__INITIAL_STATE__=(.*?);\(function/', $html_str, $matches);
Expand Down Expand Up @@ -170,8 +189,7 @@ function get_huya_stream_url($live_url){
$gameLiveInfo = $json_data['data'][0]['gameLiveInfo'];
$live_title=$gameLiveInfo['introduction'];
$gameStreamInfoList = $json_data['data'][0]['gameStreamInfoList'];
// var_dump($gameStreamInfoList);
// exit();

$anchor_name = $gameLiveInfo['nick'];
if (count($gameStreamInfoList)==0) {
$data=["live_status"=>'主播未开播或者直播已经结束!'];
Expand Down Expand Up @@ -231,3 +249,10 @@ function get_curl($url,$headers=array(),$cookies=''){
}









3 changes: 1 addition & 2 deletions config/URL_config.ini
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
https://live.douyin.com/326500301367
https://live.kuaishou.com/u/yall1102

24 changes: 19 additions & 5 deletions config/config.ini
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
[1]
[录制设置]
直播保存路径(不填则默认) =
视频保存格式ts|mkv|flv|mp4|ts音频|mkv音频 = MP4
视频保存格式ts|mkv|flv|mp4|ts音频|mkv音频 = mp4
原画|超清|高清|标清 = 原画
是否使用代理ip(是/否) =
代理地址 =
是否使用代理ip(是/否) =
代理地址 =
同一时间访问网络的线程数 = 3
循环时间(秒) = 60
排队读取网址时间(秒) = 0
Expand All @@ -15,5 +15,19 @@ ts录制完成后自动增加生成mp4格式 = 否
ts录制完成后自动增加生成m4a格式 = 否
追加格式后删除原文件 = 否
生成时间文件 = 否
cookies(不可为空) = ttwid=1%7CB1qls3GdnZhUov9o2NxOMxxYS2ff6OSvEWbv0ytbES4%7C1680522049%7C280d802d6d478e3e78d0c807f7c487e7ffec0ae4e5fdd6a0fe74c3c6af149511; my_rd=1; passport_csrf_token=3ab34460fa656183fccfb904b16ff742; passport_csrf_token_default=3ab34460fa656183fccfb904b16ff742; d_ticket=9f562383ac0547d0b561904513229d76c9c21; n_mh=hvnJEQ4Q5eiH74-84kTFUyv4VK8xtSrpRZG1AhCeFNI; store-region=cn-fj; store-region-src=uid; LOGIN_STATUS=1; __security_server_data_status=1; FORCE_LOGIN=%7B%22videoConsumedRemainSeconds%22%3A180%7D; pwa2=%223%7C0%7C3%7C0%22; download_guide=%223%2F20230729%2F0%22; volume_info=%7B%22isUserMute%22%3Afalse%2C%22isMute%22%3Afalse%2C%22volume%22%3A0.6%7D; strategyABtestKey=%221690824679.923%22; stream_recommend_feed_params=%22%7B%5C%22cookie_enabled%5C%22%3Atrue%2C%5C%22screen_width%5C%22%3A1536%2C%5C%22screen_height%5C%22%3A864%2C%5C%22browser_online%5C%22%3Atrue%2C%5C%22cpu_core_num%5C%22%3A8%2C%5C%22device_memory%5C%22%3A8%2C%5C%22downlink%5C%22%3A10%2C%5C%22effective_type%5C%22%3A%5C%224g%5C%22%2C%5C%22round_trip_time%5C%22%3A150%7D%22; VIDEO_FILTER_MEMO_SELECT=%7B%22expireTime%22%3A1691443863751%2C%22type%22%3Anull%7D; home_can_add_dy_2_desktop=%221%22; __live_version__=%221.1.1.2169%22; device_web_cpu_core=8; device_web_memory_size=8; xgplayer_user_id=346045893336; csrf_session_id=2e00356b5cd8544d17a0e66484946f28; odin_tt=724eb4dd23bc6ffaed9a1571ac4c757ef597768a70c75fef695b95845b7ffcd8b1524278c2ac31c2587996d058e03414595f0a4e856c53bd0d5e5f56dc6d82e24004dc77773e6b83ced6f80f1bb70627; __ac_nonce=064caded4009deafd8b89; __ac_signature=_02B4Z6wo00f01HLUuwwAAIDBh6tRkVLvBQBy9L-AAHiHf7; ttcid=2e9619ebbb8449eaa3d5a42d8ce88ec835; webcast_leading_last_show_time=1691016922379; webcast_leading_total_show_times=1; webcast_local_quality=sd; live_can_add_dy_2_desktop=%221%22; msToken=1JDHnVPw_9yTvzIrwb7cQj8dCMNOoesXbA_IooV8cezcOdpe4pzusZE7NB7tZn9TBXPr0ylxmv-KMs5rqbNUBHP4P7VBFUu0ZAht_BEylqrLpzgt3y5ne_38hXDOX8o=; msToken=jV_yeN1IQKUd9PlNtpL7k5vthGKcHo0dEh_QPUQhr8G3cuYv-Jbb4NnIxGDmhVOkZOCSihNpA2kvYtHiTW25XNNX_yrsv5FN8O6zm3qmCIXcEe0LywLn7oBO2gITEeg=; tt_scid=mYfqpfbDjqXrIGJuQ7q-DlQJfUSG51qG.KUdzztuGP83OjuVLXnQHjsz-BRHRJu4e986

[推送配置]
直播状态通知(可选微信|钉钉或者两个都填) =
钉钉推送接口链接 =
微信推送接口链接 =
钉钉通知@对象(填手机号) =

[Cookie]
抖音cookie(录制抖音必须要有) = ttwid=1%7CB1qls3GdnZhUov9o2NxOMxxYS2ff6OSvEWbv0ytbES4%7C1680522049%7C280d802d6d478e3e78d0c807f7c487e7ffec0ae4e5fdd6a0fe74c3c6af149511; my_rd=1; passport_csrf_token=3ab34460fa656183fccfb904b16ff742; passport_csrf_token_default=3ab34460fa656183fccfb904b16ff742; d_ticket=9f562383ac0547d0b561904513229d76c9c21; n_mh=hvnJEQ4Q5eiH74-84kTFUyv4VK8xtSrpRZG1AhCeFNI; store-region=cn-fj; store-region-src=uid; LOGIN_STATUS=1; __security_server_data_status=1; FORCE_LOGIN=%7B%22videoConsumedRemainSeconds%22%3A180%7D; pwa2=%223%7C0%7C3%7C0%22; download_guide=%223%2F20230729%2F0%22; volume_info=%7B%22isUserMute%22%3Afalse%2C%22isMute%22%3Afalse%2C%22volume%22%3A0.6%7D; strategyABtestKey=%221690824679.923%22; stream_recommend_feed_params=%22%7B%5C%22cookie_enabled%5C%22%3Atrue%2C%5C%22screen_width%5C%22%3A1536%2C%5C%22screen_height%5C%22%3A864%2C%5C%22browser_online%5C%22%3Atrue%2C%5C%22cpu_core_num%5C%22%3A8%2C%5C%22device_memory%5C%22%3A8%2C%5C%22downlink%5C%22%3A10%2C%5C%22effective_type%5C%22%3A%5C%224g%5C%22%2C%5C%22round_trip_time%5C%22%3A150%7D%22; VIDEO_FILTER_MEMO_SELECT=%7B%22expireTime%22%3A1691443863751%2C%22type%22%3Anull%7D; home_can_add_dy_2_desktop=%221%22; __live_version__=%221.1.1.2169%22; device_web_cpu_core=8; device_web_memory_size=8; xgplayer_user_id=346045893336; csrf_session_id=2e00356b5cd8544d17a0e66484946f28; odin_tt=724eb4dd23bc6ffaed9a1571ac4c757ef597768a70c75fef695b95845b7ffcd8b1524278c2ac31c2587996d058e03414595f0a4e856c53bd0d5e5f56dc6d82e24004dc77773e6b83ced6f80f1bb70627; __ac_nonce=064caded4009deafd8b89; __ac_signature=_02B4Z6wo00f01HLUuwwAAIDBh6tRkVLvBQBy9L-AAHiHf7; ttcid=2e9619ebbb8449eaa3d5a42d8ce88ec835; webcast_leading_last_show_time=1691016922379; webcast_leading_total_show_times=1; webcast_local_quality=sd; live_can_add_dy_2_desktop=%221%22; msToken=1JDHnVPw_9yTvzIrwb7cQj8dCMNOoesXbA_IooV8cezcOdpe4pzusZE7NB7tZn9TBXPr0ylxmv-KMs5rqbNUBHP4P7VBFUu0ZAht_BEylqrLpzgt3y5ne_38hXDOX8o=; msToken=jV_yeN1IQKUd9PlNtpL7k5vthGKcHo0dEh_QPUQhr8G3cuYv-Jbb4NnIxGDmhVOkZOCSihNpA2kvYtHiTW25XNNX_yrsv5FN8O6zm3qmCIXcEe0LywLn7oBO2gITEeg=; tt_scid=mYfqpfbDjqXrIGJuQ7q-DlQJfUSG51qG.KUdzztuGP83OjuVLXnQHjsz-BRHRJu4e986
快手cookie =
tiktok_cookie =
虎牙cookie =
斗鱼cookie =
yy_cookie =
b站cookie =

Loading

0 comments on commit fc3449e

Please sign in to comment.