SmallPeaches / DanmakuRender

一个可以录制带弹幕直播流的小工具
261 stars 33 forks source link

抖音弹幕获取不到 #258

Open DanNianya opened 2 weeks ago

DanNianya commented 2 weeks ago

可能是抖音弹幕服务器更新ws地址算法或者心跳验证机制了

报错: 200, message='Invalid response status', url=URL('wss://webcast3-ws-web-lf.douyin.com/webcast/im/push/v2/?room_id=7382585545945336617&compress=gzip&signature=00000000&aid=6383&device_platform=web&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=92.0.4515.159') Traceback (most recent call last): File "E:\DanmakuRender-4\DanmakuRender-4\DMR\Downloader\danmakuio.py", line 112, in dmc_task await dmc.start() File "E:\DanmakuRender-4\DanmakuRender-4\DMR\LiveAPI\danmaku__init.py", line 96, in start await self.init_ws() File "E:\DanmakuRender-4\DanmakuRender-4\DMR\LiveAPI\danmaku__init__.py", line 54, in init_ws self.ws = await self.hs.ws_connect(ws_url, headers=self.site_api.headers) File "C:\Users\86157\AppData\Local\Programs\Python\Python39\lib\site-packages\aiohttp\client.py", line 851, in _ws_connect raise WSServerHandshakeError( aiohttp.client_exceptions.WSServerHandshakeError: 200, message='Invalid response status', url=URL('wss://webcast3-ws-web-lf.douyin.com/webcast/im/push/v2/?room_id=7382585545945336617&compress=gzip&signature=00000000&aid=6383&device_platform=web&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=92.0.4515.159')

cms666 commented 2 weeks ago

俺也一样

SmallPeaches commented 2 weeks ago

抖音更新的相关API了,如果现在想录制抖音的话可以参考一下这里(需要编程基础):https://github.com/xxxxuanran/biliup/blob/00255219af4e67a24a5772ffd8cb277cfdebda23/biliup/Danmaku/douyin.py#L32-L57

DanNianya commented 2 weeks ago

抖音更新的相关API了,如果现在想录制抖音的话可以参考一下这里(需要编程基础):https://github.com/xxxxuanran/biliup/blob/00255219af4e67a24a5772ffd8cb277cfdebda23/biliup/Danmaku/douyin.py#L32-L57

大腿看不懂(๑•́ ₃ •̀๑)エー,什么时候更新呀,请你喝星巴克

LeonaWu commented 2 weeks ago

啊原来是这样,我以为是我出了问题,从版本3更新到版本4又更新到版本5,哈哈哈哈原来是抖音更新的

LeonaWu commented 2 weeks ago

啊原来是这样,我以为是我出了问题,从版本3更新到版本4又更新到版本5,哈哈哈哈原来是抖音更新的

贴一下我的报错。。。 raise WSServerHandshakeError( aiohttp.client_exceptions.WSServerHandshakeError: 200, message='Invalid response status', url=URL('wss://webcast3-ws-web-lf.douyin.com/webcast/im/push/v2/?room_id=-------------&compress=gzip&signature=00000000&aid=6383&device_platform=web&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=92.0.4515.159')

prettyby commented 2 weeks ago

抖音更新的相关API了,如果现在想录制抖音的话可以参考一下这里(需要编程基础):https://github.com/xxxxuanran/biliup/blob/00255219af4e67a24a5772ffd8cb277cfdebda23/biliup/Danmaku/douyin.py#L32-L57

@SmallPeaches @xxxxuanran

请问这个不是直接把代码复制替换 到 biliup/biliup/Danmaku/douyin.py 就可以了么??? 如果不是简单的文本复制粘贴,那这里80%录屏兄弟要阵亡了。。。 另外V5版本 2024.5.30 还是提示弹幕下载程序异常退出,正在重试。。。(原来V4包都删了,重新下载的5.30解压缩还是提示,虽然实际上录制虎牙它是有弹幕的,但就是一直提示...)

image

cms666 commented 1 week ago

抖音更新的相关API了,如果现在想录制抖音的话可以参考一下这里(需要编程基础):https://github.com/xxxxuanran/biliup/blob/00255219af4e67a24a5772ffd8cb277cfdebda23/biliup/Danmaku/douyin.py#L32-L57

求大佬有时间更新一下下,本人有点编程基础也看不懂啊,对代码库不熟,不是那么简单就能改的。

SecPhases commented 1 week ago

@prettyby @cms666 @LeonaWu @DanNianya 根据大佬指的路弄了一个临时解决方案 https://github.com/SecPhases/DanmakuRender/commit/fd6d85afede5845274ad699bbcdf5db98e68977e 需要在DanmakuRender/DMR/LiveAPI/danmaku/douyin.py里填入你的cookies 需要cookie参数__ac_nonce__ac_signaturesessionid

laomu61996 commented 1 week ago

@prettyby @cms666 @LeonaWu @DanNianya 根据大佬指的路弄了一个临时解决方案 SecPhases@fd6d85a 需要在DanmakuRender/DMR/LiveAPI/danmaku/douyin.py里填入你的cookies 需要cookie参数__ac_nonce__ac_signaturesessionid

感谢SmallPeaches大佬的项目、biliupstream-rec的弹幕获取方案和SecPhases大佬的PR!

有两个小问题

  1. biliupstream-rec的方案不需要cookies可以直接获得弹幕,这里改的cookies是必填的吗
  2. js需要本地有js解释器,可以提示下需要pip install quickjs
SmallPeaches commented 1 week ago

@prettyby @cms666 @LeonaWu @DanNianya 根据大佬指的路弄了一个临时解决方案 SecPhases@fd6d85a 需要在DanmakuRender/DMR/LiveAPI/danmaku/douyin.py里填入你的cookies 需要cookie参数__ac_nonce__ac_signaturesessionid

给大佬递茶.jpg,已经推送更新解决(请使用版本5)。

prettyby commented 1 week ago

@prettyby @cms666 @LeonaWu @DanNianya 根据大佬指的路弄了一个临时解决方案 SecPhases@fd6d85a 需要在DanmakuRender/DMR/LiveAPI/danmaku/douyin.py里填入你的cookies 需要cookie参数__ac_nonce__ac_signaturesessionid

给大佬递茶.jpg,已经推送更新解决(请使用版本5)。

76838564e53c4474f41a795837d0b0ca

请问我们该如何更新呢 ?

LeonaWu commented 1 week ago

@prettyby @cms666 @LeonaWu @DanNianya 根据大佬指的路弄了一个临时解决方案 SecPhases@fd6d85a 需要在DanmakuRender/DMR/LiveAPI/danmaku/douyin.py里填入你的cookies 需要cookie参数__ac_nonce__ac_signaturesessionid

给大佬递茶.jpg,已经推送更新解决(请使用版本5)。

已经更新至版本5,但是没改douyin.py还是有类似的“弹幕下载线程异常退出,正在重试...”报错,这次改完是必须要填写抖音cookie吗?怎么填写cookie有说明么之前没录制过b站的没填写过cookie,谢谢大佬了

laomu61996 commented 1 week ago

更新至V5后仍无法正常获取弹幕,ass文件中弹幕部分为空 DMR-20240624.log

a7606962 commented 1 week ago

@prettyby @cms666 @LeonaWu @DanNianya 根据大佬指的路弄了一个临时解决方案 SecPhases@fd6d85a 需要在DanmakuRender/DMR/LiveAPI/danmaku/douyin.py里填入你的cookies 需要cookie参数__ac_nonce__ac_signaturesessionid

给大佬递茶.jpg,已经推送更新解决(请使用版本5)。

更新到V5还是获取弹幕超时,正在重试

laomu61996 commented 1 week ago

@prettyby @cms666 @LeonaWu @DanNianya 根据大佬指的路弄了一个临时解决方案 SecPhases@fd6d85a 需要在DanmakuRender/DMR/LiveAPI/danmaku/douyin.py里填入你的cookies 需要cookie参数__ac_nonce__ac_signaturesessionid

给大佬递茶.jpg,已经推送更新解决(请使用版本5)。

更新到V5还是获取弹幕超时,正在重试

切换网络环境试试呢

a7606962 commented 1 week ago

@prettyby @cms666 @LeonaWu @DanNianya 根据大佬指的路弄了一个临时解决方案 SecPhases@fd6d85a 需要在DanmakuRender/DMR/LiveAPI/danmaku/douyin.py里填入你的cookies 需要cookie参数__ac_nonce__ac_signaturesessionid

给大佬递茶.jpg,已经推送更新解决(请使用版本5)。

更新到V5还是获取弹幕超时,正在重试

切换网络环境试试呢

不行 弹幕文件好像是空的

SmallPeaches commented 1 week ago

我试了几个直播间都没问题,也许是你js环境没有安装好?

prettyby commented 1 week ago

我试了几个直播间都没问题,也许是你js环境没有安装好?

请问如何更新 ?最新的包不就是5.30的么 也没新上传啊

laomu61996 commented 1 week ago

git clone -b v5 https://github.com/SmallPeaches/DanmakuRender.git


From: prettyby @.> Sent: Monday, June 24, 2024 7:28:04 PM To: SmallPeaches/DanmakuRender @.> Cc: sora3 @.>; Comment @.> Subject: Re: [SmallPeaches/DanmakuRender] 抖音弹幕获取不到 (Issue #258)

我试了几个直播间都没问题,也许是你js环境没有安装好?

请问如何更新 ?最新的包不就是5.30的么 也没新上传啊

― Reply to this email directly, view it on GitHubhttps://github.com/SmallPeaches/DanmakuRender/issues/258#issuecomment-2186349509, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ASKM34GXTU6W6RANXRZWC7DZI77EJAVCNFSM6AAAAABJUD3TCCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCOBWGM2DSNJQHE. You are receiving this because you commented.Message ID: @.***>

laomu61996 commented 1 week ago

我试了几个直播间都没问题,也许是你js环境没有安装好?

经测试,部分ip未登录状态无法获取到弹幕,在按照@SecPhases 修改后的方法传入登录态cookies后,可以正常获取

SecPhases commented 1 week ago

@laomu61996 我基于大佬更新的v5做了一个可以在配置文件里填入cookies的版本(非必填) https://github.com/SecPhases/DanmakuRender/commit/a8ea65049ce35e5d9f4a1dccfa4a7b83f98db00d 但是我没有无法获取弹幕的环境,是否能用可能还需要您自行测试一下了

题外话,debug的时候看到开始录制的时候,headers一共被请求了四次,我猜测第一次应该是DMR\LiveAPI\douyin.py的Douyin类获取直播间信息,第二次是DMR\LiveAPI\danmaku\douyin__init__.py的Douyin类开头定义headers,第三次才是get_ws_info方法传入的部分获取的,第四次应该是获取get_signature时请求的吧? 除了第三次,其他请求headers时我都没有改使用自行填写的cookies,前两次应该没关系,但是第四次不知道会不会影响获取到弹幕

||题题外话,这两天忙着准备期末考,可能没多少时间弄这些了😢,有问题没回的话就是似了(x)||

laomu61996 commented 1 week ago

@laomu61996 我基于大佬更新的v5做了一个可以在配置文件里填入cookies的版本(非必填) SecPhases@a8ea650 但是我没有无法获取弹幕的环境,是否能用可能还需要您自行测试一下了

题外话,debug的时候看到开始录制的时候,headers一共被请求了四次,我猜测第一次应该是DMR\LiveAPI\douyin.py的Douyin类获取直播间信息,第二次是DMR\LiveAPI\danmaku\douyininit.py的Douyin类开头定义headers,第三次才是get_ws_info方法传入的部分获取的,第四次应该是获取get_signature时请求的吧? 除了第三次,其他请求headers时我都没有改使用自行填写的cookies,前两次应该没关系,但是第四次不知道会不会影响获取到弹幕

||题题外话,这两天忙着准备期末考,可能没多少时间弄这些了😢,有问题没回的话就是似了(x)||

刚刚测试了一下https://github.com/SecPhases/DanmakuRender/commit/a8ea65049ce35e5d9f4a1dccfa4a7b83f98db00d,在global.yml和DMR-测试.yml中都填入了cookies,弹幕没有正常下载,不过在https://github.com/SecPhases/DanmakuRender/commit/fd6d85afede5845274ad699bbcdf5db98e68977e分支的修改中填入cookies可以正常获取弹幕

a7606962 commented 1 week ago

@laomu61996 我基于大佬更新的v5做了一个可以在配置文件里填入cookies的版本(非必填) SecPhases@a8ea650 但是我没有无法获取弹幕的环境,是否能用可能还需要您自行测试一下了 题外话,debug的时候看到开始录制的时候,headers一共被请求了四次,我猜测第一次应该是DMR\LiveAPI\douyin.py的Douyin类获取直播间信息,第二次是DMR\LiveAPI\danmaku\douyininit.py的Douyin类开头定义headers,第三次才是get_ws_info方法传入的部分获取的,第四次应该是获取get_signature时请求的吧? 除了第三次,其他请求headers时我都没有改使用自行填写的cookies,前两次应该没关系,但是第四次不知道会不会影响获取到弹幕 ||题题外话,这两天忙着准备期末考,可能没多少时间弄这些了😢,有问题没回的话就是似了(x)||

刚刚测试了一下SecPhases@a8ea650,在global.yml和DMR-测试.yml中都填入了cookies,弹幕没有正常下载,不过在SecPhases@fd6d85a分支的修改中填入cookies可以正常获取弹幕

请问cookies怎么获取呀

a7606962 commented 1 week ago

@laomu61996 我基于大佬更新的v5做了一个可以在配置文件里填入cookies的版本(非必填) SecPhases@a8ea650 但是我没有无法获取弹幕的环境,是否能用可能还需要您自行测试一下了 题外话,debug的时候看到开始录制的时候,headers一共被请求了四次,我猜测第一次应该是DMR\LiveAPI\douyin.py的Douyin类获取直播间信息,第二次是DMR\LiveAPI\danmaku\douyininit.py的Douyin类开头定义headers,第三次才是get_ws_info方法传入的部分获取的,第四次应该是获取get_signature时请求的吧? 除了第三次,其他请求headers时我都没有改使用自行填写的cookies,前两次应该没关系,但是第四次不知道会不会影响获取到弹幕 ||题题外话,这两天忙着准备期末考,可能没多少时间弄这些了😢,有问题没回的话就是似了(x)||

刚刚测试了一下SecPhases@a8ea650,在global.yml和DMR-测试.yml中都填入了cookies,弹幕没有正常下载,不过在SecPhases@fd6d85a分支的修改中填入cookies可以正常获取弹幕

可以了https://github.com/SecPhases/DanmakuRender/commit/fd6d85afede5845274ad699bbcdf5db98e68977e 这个分支可以正常获取弹幕了

SecPhases commented 1 week ago

@laomu61996 我基于大佬更新的v5做了一个可以在配置文件里填入cookies的版本(非必填) SecPhases@a8ea650 但是我没有无法获取弹幕的环境,是否能用可能还需要您自行测试一下了 题外话,debug的时候看到开始录制的时候,headers一共被请求了四次,我猜测第一次应该是DMR\LiveAPI\douyin.py的Douyin类获取直播间信息,第二次是DMR\LiveAPI\danmaku\douyininit.py的Douyin类开头定义headers,第三次才是get_ws_info方法传入的部分获取的,第四次应该是获取get_signature时请求的吧? 除了第三次,其他请求headers时我都没有改使用自行填写的cookies,前两次应该没关系,但是第四次不知道会不会影响获取到弹幕 ||题题外话,这两天忙着准备期末考,可能没多少时间弄这些了😢,有问题没回的话就是似了(x)||

刚刚测试了一下SecPhases@a8ea650,在global.yml和DMR-测试.yml中都填入了cookies,弹幕没有正常下载,不过在SecPhases@fd6d85a分支的修改中填入cookies可以正常获取弹幕

https://github.com/SecPhases/DanmakuRender/commit/0063e75c00e3b6fe8888a8f4e10b2005b2e5b024 试试这个?

SecPhases commented 1 week ago

@laomu61996 我基于大佬更新的v5做了一个可以在配置文件里填入cookies的版本(非必填) SecPhases@a8ea650 但是我没有无法获取弹幕的环境,是否能用可能还需要您自行测试一下了 题外话,debug的时候看到开始录制的时候,headers一共被请求了四次,我猜测第一次应该是DMR\LiveAPI\douyin.py的Douyin类获取直播间信息,第二次是DMR\LiveAPI\danmaku\douyininit.py的Douyin类开头定义headers,第三次才是get_ws_info方法传入的部分获取的,第四次应该是获取get_signature时请求的吧? 除了第三次,其他请求headers时我都没有改使用自行填写的cookies,前两次应该没关系,但是第四次不知道会不会影响获取到弹幕 ||题题外话,这两天忙着准备期末考,可能没多少时间弄这些了😢,有问题没回的话就是似了(x)||

刚刚测试了一下SecPhases@a8ea650,在global.yml和DMR-测试.yml中都填入了cookies,弹幕没有正常下载,不过在SecPhases@fd6d85a分支的修改中填入cookies可以正常获取弹幕

请问cookies怎么获取呀

打开https://live.douyin.com 按F12,打开控制台,使用指令console.log(document.cookie),打印出来的就是

SmallPeaches commented 1 week ago

我试了几个直播间都没问题,也许是你js环境没有安装好?

经测试,部分ip未登录状态无法获取到弹幕,在按照@SecPhases 修改后的方法传入登录态cookies后,可以正常获取

那你能在浏览器无痕模式里不登录看到弹幕吗?因为我也是试过几个不同环境的网络发现都没问题。

laomu61996 commented 1 week ago

我试了几个直播间都没问题,也许是你js环境没有安装好?

经测试,部分ip未登录状态无法获取到弹幕,在按照@SecPhases 修改后的方法传入登录态cookies后,可以正常获取

那你能在浏览器无痕模式里不登录看到弹幕吗?因为我也是试过几个不同环境的网络发现都没问题。

浏览器里可以看到弹幕 但是工具获取不到,我可以提供ssh给大佬看下 现在暂时正常了...(可能是因为数据中心的ip触发风控,但是现在暂时是正常的,不管了)

DanNianya commented 1 week ago

插句嘴,抖音cookie的获取方式: 打开开发者工具,在控制台输入 document.cookie 回车 就可以了

SmallPeaches commented 5 days ago

~浏览器里可以看到弹幕 但是工具获取不到,我可以提供ssh给大佬看下~ 现在暂时正常了...(可能是因为数据中心的ip触发风控,但是现在暂时是正常的,不管了)

那我猜抖音应该是对一些数据中心的IP做了风控,我试的家用网络IP都是没有问题的,之后我更新一下加上自定义cookies的功能吧。