rosynirvana / douyu_cli

Broken
MIT License
36 stars 6 forks source link

大神,能否增加一个功能啊 #5

Closed lki2019 closed 7 years ago

lki2019 commented 7 years ago

关于录制:

1.关于录像文件名

py -3 douyu_api.py -q 1 -r 274874 -s luxiang11 https://www.douyu.com/274874

我现在就是是直接编辑bat文件房间号 一键录制,但是多次录制时会命令行下会提示已经有同名文件,要不要覆盖?能否加一个自动在后面+1+2 之类的【或者按照录制时间命名吧,比如这样274874-2017年7月21日17时54分47秒.flv

2.关于批量录制

现在这样只能录制一个房间的,能否加一个可以同时录制多个房间,

比如我要同时录制 123 321 456 789 这4个房间,

在没开播时我就双击批处理 后台会自动2秒检测一次这几个房间是否开播,如果开播,启动录制,并弹出一个开播了的小窗口,

这样基本实现懒人化了


我不知道复杂不复杂啊,比如自动检测是否开播以及开播了弹出窗口 这些如果复杂那就算了,

不过录像文件按照时间生成和批量录制,未开播前自动监测是否开播,一旦开播自动开启录制

这功能还是很实用的~

rosynirvana commented 7 years ago

第一个我写好了,现在生成的文件名会在前面加room id和录像开始时间

检测哪些开播了一直打算写

至于同时录制多个没想好怎么写,主要是如果想停止其中某些个的录制该怎么办

lki2019 commented 7 years ago

如果已经开始录制,就不用停了,因为事先可以添加要录制哪些房间的直播, 这个是根据自己添加的,所以既然添加了, 说明都是要录制,那么就不涉及录制开始后又不想录制其中一个或者2个直播间录像 所以这个几乎可以忽略

lki2019 commented 7 years ago

因为可以自定义添加是要录制一个还是几个 如果你只想录制一个或者2个 你就建立一个只录制1个或者2个的bat文件被

如果你想录制多个同时,你就在建立一个bat

这样各自按照需要运行不同bat被

如果选择了录制123 345 456 567的bat文件了,都开始录制了,又想停了其中456的录制 这种想法我觉得是奇葩想法,哪怕开始录像了,就录被,最后生成的录像你删除就行了

所以我觉得这个 主要是如果想停止其中某些个的录制该怎么办

不是什么大问题

不过同时录制多个房间,那么生成的录像可以按照房间号生成文件夹,各自文件夹下按照时间生成

lki2019 commented 7 years ago

批量检测开播 https://github.com/ACGT/douyu_notify

可以看看这个作者怎么写的,早就不更新了

rosynirvana commented 7 years ago

检测开播然后发提醒很容易写,几行的事情 自动录制不可避免地要耦合进去很多代码,几乎是两回事情了

lki2019 commented 7 years ago

是啊,批量自动录制,在同一个命令行窗口下输出,是个麻烦事

链接: https://pan.baidu.com/s/1hsKfOjE 密码: my1p

你可以参考下这个录像软件 java版的

功能其实就是我说的那样,双击bat出来个命令行 然后自动缩到任务栏,后台监测开播,开播会自动开启录制

bat文件里增加 删减房间号

录制的时候,也是在一个命令行下,

你可以参考下

只不过这个录像的失效了!作者不知道啥时候更新呢

lki2019 commented 7 years ago

73665_0722_11:52:23_luxiang.mp4: Invalid argument

刚下载了新的,录像时提示这个?

rosynirvana commented 7 years ago

解说一下吧,大多数时候不做某个东西是因为不想写,工作量太大,可能引入的bug太多 别人的项目没什么帮助的

rosynirvana commented 7 years ago

我这里没什么问题啊,你那里path上面的ffmpeg没问题吧?

python3 douyu_api.py -r 73665 -s luxiang

Input #0, flv, from 'http://hdl3.douyucdn.cn/live/73665rbE3FEclDt1.flv?wsAuth=90c543b347efc0b1d696c7390a57b932&token=app-androidhd1-0-73665-d7d2e04e64f39e8c9542572368f65c30&logo=0&expire=0':
  Metadata:
    author          :
    copyright       :
    description     :
    keywords        :
    rating          :
    title           :
    presetname      : Custom
    creationdate    : Sat Jul 22 10:17:05 2017
    videodevice     : XSplitBroadcaster
    avclevel        : 31
    avcprofile      : 100
    videokeyframe_frequency: 0
    audiodevice     : VHAudioCustom
    audiochannels   : 2
    audioinputvolume: 100
    bufferSize      : 2500k
    maxBitrate      : 2500k
    xsplitBroadcasterVersion: 1.3.0.238
    xsplitCoreVersion: 1.3.1403.1202 Version 1.3
    xsplitGameSourceVersion: 1.1.1.117
    xsplitMediaLibVersion: 2.0.0.324
    pluginName      : CustomRTMP
    pluginVersion   : 1.3.1405.2901
  Duration: N/A, start: 0.002000, bitrate: 496 kb/s
    Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 96 kb/s
    Stream #0:1: Video: h264 (High), yuv420p(progressive), 1280x720, 400 kb/s, 25 fps, 25 tbr, 1k tbn, 50 tbc
Output #0, mp4, to '73665_0722_11:56:05_luxiang.mp4':

时间差了几分钟别的应该一样

lki2019 commented 7 years ago

ffmpeg.exe 我放到和脚本一个目录下,你之前没修改的前1个版本 我录制还是正常的 你修改后加了时间 就出现这个了

audioinputvolume: 100
bufferSize      : 2500k
maxBitrate      : 2500k
xsplitBroadcasterVersion: 1.3.0.238
xsplitCoreVersion: 1.3.1403.1202 Version 1.3
xsplitGameSourceVersion: 1.1.1.117
xsplitMediaLibVersion: 2.0.0.324
pluginName      : CustomRTMP
pluginVersion   : 1.3.1405.2901

Duration: N/A, start: 0.011000, bitrate: N/A Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp Stream #0:1: Video: h264 (High), yuv420p(progressive), 1280x720, 25 fps, 25 tbr, 1k tbn, 50 tbc 73665_0722_11:59:31_luxiang.mp4: Invalid argument

我路径下有中文字符没影响吧

没影响,我换了个纯英文路径也是提示那个

rosynirvana commented 7 years ago

试试现在的这个commit

估计是把时间的:当成track标记了

lki2019 commented 7 years ago

OK了 录制正常

Justsoos commented 7 years ago

@lki2019 你这家伙,抓住开发者当牛马用啊。哈哈,你自己学学 python 不求人啊

lki2019 commented 7 years ago

@Justsoos 没有啊,就在多1个批量录制后台监测开播就好了,我也没其他想法了 嘿嘿

Justsoos commented 7 years ago

@lki2019 都教你用 cmder 了,你还是用windows 自带的 cmd 搞出错。 多开几个窗口,每个窗口录一个主播就能解决,你还想一次全录。码率高的主播都要7Mb/s ,你带宽硬盘够不够啊,还要同时? 沉迷网络有害,沉迷主播更有害啊。哈

lki2019 commented 7 years ago

@Justsoos 我也没有每天要录制多少个直播间,我就是从体验角度说的啊,这些功能是很实用的,

开几个窗口自带cmd 1个直播间建立1个bat 不就行了么?

只是单纯从技术角度,觉得批量录制在一个命令行下输出体验好吧

如果复杂其实加不加也没什么,不是刚需对我来说,

Justsoos commented 7 years ago

实际上,斗鱼 flv 不用 ffmpeg 转码也能用,直接流存储下来就是 flv 格式文件。ffmpeg 抓流转格式,提高了本地 cpu 等运算压力。 另外,构建一个动态 m3u8 文件应该是可行的,外部一个定时器,比如10秒去更新一下 ts 内容,这个方法比算密码要简单的多多。

Justsoos commented 7 years ago

@lki2019 实用性说不上,但起码你让 @rosynirvana 为斗鱼又量身定做了一个 you-get 出来。哈哈哈,有你这样的提 KPI 的产品,程序员都会累死。

lki2019 commented 7 years ago

@Justsoos 嘿嘿·· 现在已经很不错了,满足基本需求绰绰有余啦, 一键播放 一键录制 一般人不会同时录制一堆直播间的,最多1 2个 2 3个

这样自己多建立2个bat 手动双击下也是可以的


@rosynirvana

批量录制太麻烦的话,那就先加个监测开播提醒吧,

意思是我这个bat里就录制1个直播间 我在它没开播之前,就双击运行,自动检测开播,开播后自动开启录制

这样应该比同时几个直播间检测并且混着一起在一个命令行下输出要容易点吧?

我想录制几个直播间 我就多建立几个bat,手动分别双击就好

Justsoos commented 7 years ago

@lki2019 哈哈,你看你,得寸进尺的劲头。迟早有一天把这个 cli 变成一个大工程。

rosynirvana commented 7 years ago

开播提醒也是我一直想写的

只是今天想了想开播提醒,和自动录像两个似乎不容易公用代码,所以需要再想一想

Justsoos commented 7 years ago

"http://m.douyu.com/html5/live?roomId=%s" % room_id 用这个 api ,隔10~20秒去骚扰一次斗鱼,返回 error=0 就是在线。这个 api 用流量最小。 @lki2019 说的那个douyu_notify 我看了,原理太可怕, load room 页面的,用流量太大。

Justsoos commented 7 years ago

自动录像也简单,用 notify 调用 douyu_cli.py 去下载就行。这样做了,还有个好处,就算观众半夜都睡着了,主播上来播 3分钟下播了,都能被录下来。

lki2019 commented 7 years ago

@Justsoos 对啊,说的就是,如果有了自动检测开播的机制,就不用守着电脑了,

lki2019 commented 7 years ago

http://hdl3.douyucdn.cn/live/1781385r18X6TGae.flv?wsAuth=2dc52eea25109df1c59ab7e57b425ed2&token=app-androidhd1-0-1781385-5663a7fd660e7a3b040162aaca0a7095&logo=0&expire=0

http://124.163.205.56/hdl3.douyucdn.cn/live/1781385r18X6TGae.flv?wsAuth=2dc52eea25109df1c59ab7e57b425ed2&token=app-androidhd1-0-1781385-5663a7fd660e7a3b040162aaca0a7095&logo=0&expire=0&wshc_tag=0&wsts_tag=59732372&wsid_tag=3a1240ec&wsiphost=ipdbm

以上是最新手机HD接口 抓的数据


以下是另外一款软件的数据

http://api.douyutv.com/api/v1/room/1781385?aid=dytool2&time=1500717977&auth=038ae603c5f648ee236bbea422160d63

http://api.douyutv.com/api/v1/room/1781385?aid=dytool2&time=1500718010&auth=b2692c7dde2ba6700efe191b9c1706e3 ------------------------以上最后的值貌似6000毫秒一变,可能是靠这个接口来检测主播是否开播 http://hdl3.douyucdn.cn/live/1781385rQFtc3aVg.flv?wsAuth=661cac8e7bdacc9ff9a6220e35422d76&token=app-dytool2-0-1781385-6d0260fc88711d9e8ae89503a689f0eb&logo=0&expire=0

http://111.202.83.210/hdl3.douyucdn.cn/live/1781385rQFtc3aVg.flv?wsAuth=661cac8e7bdacc9ff9a6220e35422d76&token=app-dytool2-0-1781385-6d0260fc88711d9e8ae89503a689f0eb&logo=0&expire=0&wshc_tag=0&wsts_tag=59732404&wsid_tag=3a1240ec&wsiphost=ipdbm

接口app-dytool2-0

咱现在用的是HD接口 app-androidhd1-0

对比之下,我感觉app-dytool2-0 也是手机端一个不知道什么地方的接口 这接口3月份就再用了 现在还没失效

dytool2 字面意思好像是斗鱼工具?难道是斗鱼的官方的直播伴侣?

https://www.douyu.com/client?platform=1

Justsoos commented 7 years ago

但你说的容易,web 前端最喜欢乱改东西,比如 http://www.douyu.com/t/lcs 这个房间里的四个直播活动入口,都不符合这个玩法,相当于得单独写,除 bug,引入一个功能要引入很多出 bug 的可能。

lki2019 commented 7 years ago

你的意思是说检测这类没有房间号的直播间是否开播?

http://i1.buimg.com/1949/c9002bdaa7833e75.png

我一般是把鼠标放到头像上 就看到房间号了

不管怎么改房间号不会变的吧

Justsoos commented 7 years ago

@lki2019 你就别跟着掺和了,你抓的 url 基本上没啥用,你也不看源代码,和大家说的都不是一回事。

lki2019 commented 7 years ago

额,好吧,

rosynirvana commented 7 years ago

notify我写好了,另外写一个cmdline

自动录打算用threadpool,每个房间的polling和录像合用一个thread

lki2019 commented 7 years ago

我竟然不会用!!!

./douyu_notify.py [-t time_interval] [-i input_file] DOUYU_URL

-t, --interval After checking all rooms the process will sleep for t secs -i, --input input file containing room IDs or URLs, seperated by new lines

example: ./douyu_api.py -t 60 -i watch_list.txt ./douyu_api.py -t 120 -i watch_list_2.txt http://douyu.com/3484

rosynirvana commented 7 years ago

-t后面是检查的时间间隔 watch_list.txt里面写要监视的room id或者url,一行一个,用-i读取 然后还能再从命令行上读取一个url一同监视

rosynirvana commented 7 years ago

我把example里的py文件名写错了

rosynirvana commented 7 years ago

要指定一个watch_list.txt,把roomid或者url写进去

lki2019 commented 7 years ago

yu_cli-master712版本\douyu_cli-master\新建文件夹\douyu_cli-master>py -3 douyu_no tify.py -t 60 -i watch_list.txt online rooms: 2020877 196 2371789

似乎可以了

lki2019 commented 7 years ago

这个目前和douyu_api.py还不能配合使用吧?

rosynirvana commented 7 years ago

这个是用douyu_api的 自动录还没写

lki2019 commented 7 years ago

qq 20170722215944

30秒检测一次?

那如果后期加上自动录制,

30秒是不是长了点,这个时间可以自己改低点吧?或者说最低可以多少,有什么影响没

rosynirvana commented 7 years ago

默认是30,最短当然是0,你-t 60就是60秒 访问太频繁可能被api服务器踢

这段代码我不会用在自动录上面去

lki2019 commented 7 years ago

恩明白了 watch_list.txt里可以混着写

196 https://www.douyu.com/549378 https://www.douyu.com/jiale

这3种都支持!

http://www.douyu.com/t/lcs 不过这个是例外

kami233 commented 7 years ago

我也觉得不要搞太多的好,因为douyu本身就是一个喜欢搞事情的网站,能及时跟上就已经不错了,不然到时候就会像youget那样,更新速度跟不上,没啥卵用。像说的什么批量完全可以自己多开几个窗口就OK的,想停哪个就停哪个,不必整得那么麻烦,还有检测也是,不在电脑前挂机的用个类似qmacro的设置延迟后台重复命令挂机即可

rosynirvana commented 7 years ago

接口逆不出来和做不做自动录是两回事情,用户不必替开发者操心这个 you-get现在除了当年律师函的网易云,没多大用也没人愿意帮忙的dilidili,加上一个斗鱼外还有哪个站更新速度跟不上的,报告了之后都是几小时之内修好的

lki2019 commented 7 years ago

new rid pattern 增加了什么啊

rosynirvana commented 7 years ago

http://www.douyu.com/t/lcs这个页面的rid pattern 大概,能抓到一个,不确定是不是

lki2019 commented 7 years ago

是,522424 我看到了

http://www.douyu.com/t/lcs http://www.douyu.com/t/lpl https://www.douyu.com/dss http://www.douyu.com/t/lck http://www.douyu.com/t/lspl https://www.douyu.com/debei

我又加了一些进去检测, 都正确!

首次检测 会提示个这个:

An event page with room ids: "288016","424559"

之后就不会了,就是正常显示在线了

rosynirvana commented 7 years ago

有些是活动页面,好像从url里看不出来你要选择哪个房间,我记得 所以加了个提示,这个页面有几个房间,选择房间用room id,然后返回的是第一个房间

Justsoos commented 7 years ago

www.douyu.com/t/lcs 斗鱼前端瞎改东西,在这个活动里,roomid又改成了: data-onlineid=522424 所以这个页面无效。

rosynirvana commented 7 years ago

上一个commit已经加了这个pattern了

Justsoos commented 7 years ago

现在 you-get 是你在管么?怎么每天都是你在处理 issues @rosynirvana ? 原作者 soimort 好久都没合并 fork 突然合并了一个假补丁 https://github.com/soimort/you-get/pull/2142

rosynirvana commented 7 years ago

过两天安卓HD的接口不失效我就把you-get的也改了