mirror of
https://github.com/ihmily/DouyinLiveRecorder.git
synced 2025-12-26 05:48:32 +08:00
fix: fix baidu live stream data parse
This commit is contained in:
parent
795063fc06
commit
df2377fa1b
@ -1,5 +1,6 @@
|
|||||||
[录制设置]
|
[录制设置]
|
||||||
直播保存路径(不填则默认) =
|
直播保存路径(不填则默认) =
|
||||||
|
保存文件夹是否以作者区分 = 是
|
||||||
视频保存格式ts|mkv|flv|mp4|ts音频|mkv音频 = ts
|
视频保存格式ts|mkv|flv|mp4|ts音频|mkv音频 = ts
|
||||||
原画|超清|高清|标清 = 原画
|
原画|超清|高清|标清 = 原画
|
||||||
是否使用代理ip(是/否) = 是
|
是否使用代理ip(是/否) = 是
|
||||||
|
|||||||
20
main.py
20
main.py
@ -427,13 +427,13 @@ def get_huya_stream_url(json_data: dict, video_quality: str) -> dict:
|
|||||||
sdk_sid = t13
|
sdk_sid = t13
|
||||||
|
|
||||||
# 计算uuid和uid参数值
|
# 计算uuid和uid参数值
|
||||||
init_uuid = (int(t13 % 10**10 * 1000) + int(1000 * random.random())) % 4294967295 # 直接初始化
|
init_uuid = (int(t13 % 10 ** 10 * 1000) + int(1000 * random.random())) % 4294967295 # 直接初始化
|
||||||
uid = random.randint(1400000000000, 1400009999999) # 经过测试uid也可以使用init_uuid代替
|
uid = random.randint(1400000000000, 1400009999999) # 经过测试uid也可以使用init_uuid代替
|
||||||
seq_id = uid + sdk_sid # 移动端请求的直播流地址中包含seqId参数
|
seq_id = uid + sdk_sid # 移动端请求的直播流地址中包含seqId参数
|
||||||
|
|
||||||
# 计算ws_time参数值(16进制) 可以是当前毫秒时间戳,当然也可以直接使用url_query['wsTime'][0]
|
# 计算ws_time参数值(16进制) 可以是当前毫秒时间戳,当然也可以直接使用url_query['wsTime'][0]
|
||||||
# 原始最大误差不得慢240000毫秒
|
# 原始最大误差不得慢240000毫秒
|
||||||
target_unix_time = (t13+110624) // 1000
|
target_unix_time = (t13 + 110624) // 1000
|
||||||
ws_time = hex(target_unix_time)[2:].lower()
|
ws_time = hex(target_unix_time)[2:].lower()
|
||||||
|
|
||||||
# fm参数值是经过url编码然后base64编码得到的,解码结果类似 DWq8BcJ3h6DJt6TY_$0_$1_$2_$3
|
# fm参数值是经过url编码然后base64编码得到的,解码结果类似 DWq8BcJ3h6DJt6TY_$0_$1_$2_$3
|
||||||
@ -542,7 +542,7 @@ def get_bilibili_stream_url(json_data: dict, video_quality: str) -> dict:
|
|||||||
}
|
}
|
||||||
if playurl_info:
|
if playurl_info:
|
||||||
# 其中qn=30000为杜比 20000为4K 10000为原画 400蓝光 250超清 150高清 80流畅
|
# 其中qn=30000为杜比 20000为4K 10000为原画 400蓝光 250超清 150高清 80流畅
|
||||||
quality_list = {'10000': 'bluray', '400': '4000', '250': '2500', '150': '1500', '80':'800'}
|
quality_list = {'10000': 'bluray', '400': '4000', '250': '2500', '150': '1500', '80': '800'}
|
||||||
format_list = playurl_info['playurl']['stream'][1]['format']
|
format_list = playurl_info['playurl']['stream'][1]['format']
|
||||||
current_qn = format_list[0]['codec'][0]['current_qn']
|
current_qn = format_list[0]['codec'][0]['current_qn']
|
||||||
if int(current_qn) != 10000:
|
if int(current_qn) != 10000:
|
||||||
@ -552,7 +552,7 @@ def get_bilibili_stream_url(json_data: dict, video_quality: str) -> dict:
|
|||||||
accept_qn_list = stream_data['accept_qn']
|
accept_qn_list = stream_data['accept_qn']
|
||||||
qn_count = len(accept_qn_list)
|
qn_count = len(accept_qn_list)
|
||||||
if 10000 not in accept_qn_list:
|
if 10000 not in accept_qn_list:
|
||||||
new_accept_qn_list = [10000]+accept_qn_list
|
new_accept_qn_list = [10000] + accept_qn_list
|
||||||
else:
|
else:
|
||||||
new_accept_qn_list = [i for i in accept_qn_list]
|
new_accept_qn_list = [i for i in accept_qn_list]
|
||||||
while len(new_accept_qn_list) < 5:
|
while len(new_accept_qn_list) < 5:
|
||||||
@ -1049,7 +1049,8 @@ def start_record(url_data: tuple, count_variable: int = -1):
|
|||||||
# 推送通知
|
# 推送通知
|
||||||
if live_status_push and not start_pushed:
|
if live_status_push and not start_pushed:
|
||||||
if begin_show_push:
|
if begin_show_push:
|
||||||
push_pts = push_message(f"{content.split('...')[0]},时间:{datetime.datetime.today()}")
|
push_pts = push_message(
|
||||||
|
f"{content.split('...')[0]},时间:{datetime.datetime.today()}")
|
||||||
if push_pts:
|
if push_pts:
|
||||||
print(f'提示信息:已经将[{record_name}]直播状态消息推送至你的{push_pts}')
|
print(f'提示信息:已经将[{record_name}]直播状态消息推送至你的{push_pts}')
|
||||||
start_pushed = True
|
start_pushed = True
|
||||||
@ -1059,7 +1060,7 @@ def start_record(url_data: tuple, count_variable: int = -1):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
real_url = port_info['record_url']
|
real_url = port_info['record_url']
|
||||||
full_path = f'{default_path}/{platform}/{anchor_name}'
|
full_path = f'{default_path}/{platform}'
|
||||||
if len(real_url) > 0:
|
if len(real_url) > 0:
|
||||||
live_list.append(anchor_name)
|
live_list.append(anchor_name)
|
||||||
now = datetime.datetime.today().strftime("%Y-%m-%d_%H-%M-%S")
|
now = datetime.datetime.today().strftime("%Y-%m-%d_%H-%M-%S")
|
||||||
@ -1068,10 +1069,11 @@ def start_record(url_data: tuple, count_variable: int = -1):
|
|||||||
if len(video_save_path) > 0:
|
if len(video_save_path) > 0:
|
||||||
if video_save_path[-1] not in ["/", "\\"]:
|
if video_save_path[-1] not in ["/", "\\"]:
|
||||||
video_save_path = video_save_path + "/"
|
video_save_path = video_save_path + "/"
|
||||||
full_path = f'{video_save_path}{platform}/{anchor_name}'
|
full_path = f'{video_save_path}{platform}'
|
||||||
|
|
||||||
full_path = full_path.replace("\\", '/')
|
full_path = full_path.replace("\\", '/')
|
||||||
|
if folder_by_author:
|
||||||
|
full_path = f'{full_path}/{anchor_name}'
|
||||||
if not os.path.exists(full_path):
|
if not os.path.exists(full_path):
|
||||||
os.makedirs(full_path)
|
os.makedirs(full_path)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -1562,7 +1564,6 @@ if not os.path.exists('./config'):
|
|||||||
t3 = threading.Thread(target=backup_file_start, args=(), daemon=True)
|
t3 = threading.Thread(target=backup_file_start, args=(), daemon=True)
|
||||||
t3.start()
|
t3.start()
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# 录制国外平台时,如果开启了电脑全局/规则代理,可以正常录制,但强烈建议还是配置一下代理地址,否则非常不稳定
|
# 录制国外平台时,如果开启了电脑全局/规则代理,可以正常录制,但强烈建议还是配置一下代理地址,否则非常不稳定
|
||||||
# 检测电脑是否开启了全局/规则代理(如果身处国外请忽略)
|
# 检测电脑是否开启了全局/规则代理(如果身处国外请忽略)
|
||||||
@ -1627,6 +1628,7 @@ while True:
|
|||||||
file.write(input_url)
|
file.write(input_url)
|
||||||
|
|
||||||
video_save_path = read_config_value(config, '录制设置', '直播保存路径(不填则默认)', "")
|
video_save_path = read_config_value(config, '录制设置', '直播保存路径(不填则默认)', "")
|
||||||
|
folder_by_author = options.get(read_config_value(config, '录制设置', '保存文件夹是否以作者区分', "是"), False)
|
||||||
video_save_type = read_config_value(config, '录制设置', '视频保存格式ts|mkv|flv|mp4|ts音频|mkv音频', "ts")
|
video_save_type = read_config_value(config, '录制设置', '视频保存格式ts|mkv|flv|mp4|ts音频|mkv音频', "ts")
|
||||||
video_record_quality = read_config_value(config, '录制设置', '原画|超清|高清|标清', "原画")
|
video_record_quality = read_config_value(config, '录制设置', '原画|超清|高清|标清', "原画")
|
||||||
use_proxy = options.get(read_config_value(config, '录制设置', '是否使用代理ip(是/否)', "是"), False)
|
use_proxy = options.get(read_config_value(config, '录制设置', '是否使用代理ip(是/否)', "是"), False)
|
||||||
|
|||||||
14
spider.py
14
spider.py
@ -1510,12 +1510,20 @@ def get_baidu_stream_data(url: str, proxy_addr: Union[str, None] = None, cookies
|
|||||||
}
|
}
|
||||||
live_status = data['video']['stream']
|
live_status = data['video']['stream']
|
||||||
if live_status == 1:
|
if live_status == 1:
|
||||||
|
result["is_live"] = True
|
||||||
play_url_list = data['video']['url_clarity_list']
|
play_url_list = data['video']['url_clarity_list']
|
||||||
url_list = []
|
url_list = []
|
||||||
prefix = 'https://hls.liveshow.bdstatic.com/live/'
|
prefix = 'https://hls.liveshow.bdstatic.com/live/'
|
||||||
for i in play_url_list:
|
|
||||||
url_list.append(prefix + i['urls']['flv'].rsplit('.', maxsplit=1)[0].rsplit('/', maxsplit=1)[1]+'.m3u8')
|
|
||||||
if play_url_list:
|
if play_url_list:
|
||||||
|
for i in play_url_list:
|
||||||
|
url_list.append(
|
||||||
|
prefix + i['urls']['flv'].rsplit('.', maxsplit=1)[0].rsplit('/', maxsplit=1)[1] + '.m3u8')
|
||||||
|
else:
|
||||||
|
play_url_list = data['video']['url_list']
|
||||||
|
for i in play_url_list:
|
||||||
|
url_list.append(prefix + i['urls'][0]['hls'].rsplit('?', maxsplit=1)[0].rsplit('/', maxsplit=1)[1])
|
||||||
|
|
||||||
|
if url_list:
|
||||||
result['play_url_list'] = url_list
|
result['play_url_list'] = url_list
|
||||||
result['is_live'] = True
|
result['is_live'] = True
|
||||||
return result
|
return result
|
||||||
@ -1611,4 +1619,4 @@ if __name__ == '__main__':
|
|||||||
# print(get_popkontv_stream_url(room_url, proxy_addr='', username='', password=''))
|
# print(get_popkontv_stream_url(room_url, proxy_addr='', username='', password=''))
|
||||||
# print(get_twitcasting_stream_url(room_url, proxy_addr='', username='', password=''))
|
# print(get_twitcasting_stream_url(room_url, proxy_addr='', username='', password=''))
|
||||||
# print(get_baidu_stream_data(room_url, proxy_addr=''))
|
# print(get_baidu_stream_data(room_url, proxy_addr=''))
|
||||||
# print(get_weibo_stream_url(room_url, proxy_addr=''))
|
# print(get_weibo_stream_url(room_url, proxy_addr=''))
|
||||||
Loading…
x
Reference in New Issue
Block a user