diff --git a/config/URL_config.ini b/config/URL_config.ini new file mode 100644 index 0000000..0b59dd9 --- /dev/null +++ b/config/URL_config.ini @@ -0,0 +1,8 @@ +https://live.douyin.com/210443559964,主播: 小小诺 +https://live.douyin.com/525514386431,主播: 阿闯烤肉夹馍 +https://live.douyin.com/8687122573,主播: 小彤炒粉 +https://live.douyin.com/642534242822,主播: (小王_)煎饼果子 +https://live.douyin.com/589037028237,主播: 娜姐辉哥在奋斗 +https://live.douyin.com/743565594721,主播: 汪汪汪小妞 +https://live.douyin.com/249578288248,主播: 思思努力版 +https://live.douyin.com/153648759493,主播: 晨晨_烤冷面 diff --git a/config/config.ini b/config/config.ini new file mode 100644 index 0000000..aede5da --- /dev/null +++ b/config/config.ini @@ -0,0 +1,129 @@ +[录制设置] +language(zh_cn/en) = en +是否跳过代理检测(是/否) = 否 +直播保存路径(不填则默认) = +保存文件夹是否以作者区分 = 是 +保存文件夹是否以时间区分 = 否 +保存文件夹是否以标题区分 = 否 +保存文件名是否包含标题 = 否 +是否去除名称中的表情符号 = 是 +视频保存格式ts|mkv|flv|mp4|mp3音频|m4a音频 = mp4 +原画|超清|高清|标清|流畅 = 原画 +是否使用代理ip(是/否) = 是 +代理地址 = +同一时间访问网络的线程数 = 20 +循环时间(秒) = 300 +排队读取网址时间(秒) = 0 +是否显示循环秒数 = 否 +是否显示直播源地址 = 是 +分段录制是否开启 = 是 +是否强制启用https录制 = 否 +录制空间剩余阈值(gb) = 1.0 +视频分段时间(秒) = 480 +录制完成后自动转为mp4格式 = 是 +mp4格式重新编码为h264 = 否 +追加格式后删除原文件 = 是 +生成时间字幕文件 = 否 +是否录制完成后执行自定义脚本 = 否 +自定义脚本执行命令 = +使用代理录制的平台(逗号分隔) = tiktok, sooplive, pandalive, winktv, flextv, popkontv, twitch, liveme, showroom, chzzk, shopee, shp, youtu +额外使用代理录制的平台(逗号分隔) = + +[推送配置] +直播状态推送渠道 = +钉钉推送接口链接 = +微信推送接口链接 = +bark推送接口链接 = +bark推送中断级别 = active +bark推送铃声 = +钉钉通知@对象(填手机号) = +钉钉通知@全体(是/否) = 否 +tgapi令牌 = +tg聊天id(个人或者群组id) = +smtp邮件服务器 = +是否使用smtp服务ssl加密(是/否) = +smtp邮件服务器端口 = +邮箱登录账号 = +发件人密码(授权码) = +发件人邮箱 = +发件人显示昵称 = +收件人邮箱 = +ntfy推送地址 = https://ntfy.sh/xxxx +ntfy推送标签 = tada +ntfy推送邮箱 = +pushplus推送token = +自定义推送标题 = +自定义开播推送内容 = +自定义关播推送内容 = +只推送通知不录制(是/否) = 否 +直播推送检测频率(秒) = 1800 +开播推送开启(是/否) = 是 +关播推送开启(是/否) = 否 + +[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 = +小红书cookie = +bigo_cookie = +blued_cookie = +sooplive_cookie = +netease_cookie = +千度热播_cookie = +pandatv_cookie = +猫耳fm_cookie = +winktv_cookie = +flextv_cookie = +look_cookie = +twitcasting_cookie = +baidu_cookie = +weibo_cookie = +kugou_cookie = +twitch_cookie = +liveme_cookie = +huajiao_cookie = +liuxing_cookie = +showroom_cookie = +acfun_cookie = +changliao_cookie = +yinbo_cookie = +yingke_cookie = +zhihu_cookie = +chzzk_cookie = +haixiu_cookie = +vvxqiu_cookie = +17live_cookie = +langlive_cookie = +pplive_cookie = +6room_cookie = +lehaitv_cookie = +huamao_cookie = +shopee_cookie = +youtube_cookie = +taobao_cookie = +jd_cookie = +faceit_cookie = +migu_cookie = +lianjie_cookie = +laixiu_cookie = +picarto_cookie = + +[Authorization] +popkontv_token = + +[账号密码] +sooplive账号 = +sooplive密码 = +flextv账号 = +flextv密码 = +popkontv账号 = +partner_code = P-00001 +popkontv密码 = +twitcasting账号类型 = normal +twitcasting账号 = +twitcasting密码 = + diff --git a/config/url.txt b/config/url.txt new file mode 100644 index 0000000..c545076 --- /dev/null +++ b/config/url.txt @@ -0,0 +1,9 @@ +https://live.douyin.com/270711345461,主播: 茄茄 +https://live.douyin.com/957925266814,主播: 卓力君 +https://live.douyin.com/292625589966,主播: 思了个思(游戏版) +https://live.douyin.com/52070571116,主播: 兔然不困了 +https://live.douyin.com/913137650417,主播: 发千金 +https://live.douyin.com/905966903795,主播: 总被男人骗 +https://live.douyin.com/97282309368,主播: 会跳舞的饭 +https://live.douyin.com/640697071840,主播: 煎饼先生 +https://live.douyin.com/167254117139,主播: 乔妮妮 \ No newline at end of file diff --git a/list b/list index c2ed192..98dd15b 100644 --- a/list +++ b/list @@ -5,7 +5,7 @@ https://live.douyin.com/589037028237 https://live.douyin.com/743565594721 https://live.douyin.com/249578288248 https://live.douyin.com/472140253414 - - +https://live.douyin.com/700846653732 +https://live.douyin.com/81849868631 https://live.douyin.com/642534242822 \ No newline at end of file diff --git a/live.py b/live.py index c6ac221..5c91455 100644 --- a/live.py +++ b/live.py @@ -11,7 +11,8 @@ import platform import aiohttp import spider # 你的 spider 模块 import stream # 你的 stream 模块 - +import configparser +from typing import Any # ----------------- Logging Setup ----------------- logging.basicConfig( level=logging.INFO, @@ -19,7 +20,9 @@ logging.basicConfig( datefmt="%H:%M:%S" ) -IS_WINDOWS = platform.system() == "Windows" + + + # ----------------- Douyin to YouTube Streamer ----------------- class DouyinToYouTubeStreamer: @@ -149,15 +152,15 @@ class DouyinToYouTubeStreamer: break if self.push_proc.poll() is not None: - logging.warning(f"[{self.room_name}] 推流进程退出,5秒后重启...") - time.sleep(2) + logging.warning(f"[{self.room_name}] 推流进程退出,1秒后重启...") + time.sleep(1) break if self.enable_recording and self.record_proc and self.record_proc.poll() is not None: - logging.warning(f"[{self.room_name}] 录制进程退出,5秒后重启...") - time.sleep(2) + logging.warning(f"[{self.room_name}] 录制进程退出,1秒后重启...") + time.sleep(1) break - time.sleep(2) + time.sleep(1) except Exception as e: logging.error(f"[{self.room_name}] FFmpeg异常: {e}") @@ -183,7 +186,7 @@ class DouyinToYouTubeStreamer: m, s = divmod(uptime, 60) status = "推流中" if self.pushing else "启动中" print(f"\r[{self.room_name}] {status} | 运行时间: {m:02d}:{s:02d} | 码率: {self.bitrate}k", end="") - time.sleep(2) + time.sleep(1) # ----------------- 停止 ----------------- def stop(self): @@ -253,7 +256,7 @@ def start_douyin_to_youtube(record_url, youtube_key, room_name=None, # ----------------- Main Program ----------------- if __name__ == "__main__": - DOUYIN_URL = "https://live.douyin.com/472140253414" + DOUYIN_URL = "https://live.douyin.com/182963847486" YOUTUBE_KEY = "qxvb-r47b-r5ju-6ud3-6k7z" # enable_recording=True 可开启本地录制