当前位置:网站首页>抖音直播监控-循环值守24小时-直播弹幕
抖音直播监控-循环值守24小时-直播弹幕
2022-07-27 21:16:00 【安卓逆向陈某某】
众所周知d-y的所有数据都是以json形式的接口数据返回,我们页面上所看到的数据都是有后端获取到数据库中指定的数据,然后经过一系列的组合成json数据,前端获取到后进行页面的数据绑定展示就得到我们所看的的界面效果。

首先何为监控?按上面所说的监控就是需要一直去请求接口,将数据记录下来,捕捉到从开始到结束这个过程中所产生的数据就是监控所得到的,接下来为大家带来正常抖音直播的监控流程
一:开播监控
- 监控一个指定主播有没有开播的情况有很多方法,通过关键词搜索用户的直播接口,web用户主页接口等,最常用的应该就是app的用户主页接口,传入用户sec_id请求主页接口,拿到的json数据后去匹配有没有live_room_id_str这个字段就很容易能得到用户开播情况
二,弹幕下载
- 弹幕处理就会麻烦很多,因为弹幕走的是protobuf协议,拿到二进制文件后还需要进行反序列化的操作,目前大多的都是以wss存在形式,常用的还是走的websocekt协议,拿到当前的弹幕二进制进行反序列,控制请求时间一直获取
DESCRIPTOR = _descriptor.FileDescriptor(
name='douyin_comment.proto',
package='',
syntax='proto3',
serialized_options=None,
create_key=_descriptor._internal_create_key,
serialized_pb=b'\n\x14\x64ouyin_comment.proto\"\x85\x01\n\rDouYinComment\x12\x19\n\x07message\x18\x01 \x03(\x0b\x32\x08.Message\x12\x0e\n\x06\x63ursor\x18\x02 \x01(\t\x12\x15\n\rfetchInterval\x18\x03 \x01(\x04\x12\x0b\n\x03now\x18\x04 \x01(\x04\x12\x13\n\x0binternalExt\x18\x05 \x01(\t\x12\x10\n\x08\x66\x65tchTyp\x18\x06 \x01(\x05\"Z\n\x07Message\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12\r\n\x05msgId\x18\x03 \x01(\x04\x12\x0f\n\x07msgType\x18\x04 \x01(\x05\x12\x0e\n\x06offset\x18\x05 \x01(\x04\"\x9b\x01\n\x14WebcastMemberMessage\x12\x17\n\x06\x63ommon\x18\x01 \x03(\x0b\x32\x07.Common\x12\x13\n\x04user\x18\x02 \x03(\x0b\x32\x05.User\x12\x13\n\x0bmemberCount\x18\x03 \x01(\x04\x12\x17\n\x08operator\x18\x04 \x03(\x0b\x32\x05.User\x12\x14\n\x0cisSetToAdmin\x18\x05 \x01(\x08\x12\x11\n\tisTopUser\x18\x06 \x01(\x08\"S\n\x12WebcastChatMessage\x12\x17\n\x06\x63ommon\x18\x01 \x03(\x0b\x32\x07.Common\x12\x13\n\x04user\x18\x02 \x03(\x0b\x32\x05.User\x12\x0f\n\x07\x63ontent\x18\x03 \x01(\t\"\xaa\x02\n\x06\x43ommon\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\r\n\x05msgId\x18\x02 \x01(\x04\x12\x0e\n\x06roomId\x18\x03 \x01(\x04\x12\x12\n\ncreateTime\x18\x04 \x01(\x04\x12\x0f\n\x07monitor\x18\x05 \x01(\x05\x12\x11\n\tisShowMsg\x18\x06 \x01(\x08\x12\x10\n\x08\x64\x65scribe\x18\x07 \x01(\t\x12!\n\x0b\x64isplayText\x18\x08 \x03(\x0b\x32\x0c.DisplayText\x12\x10\n\x08\x66oldType\x18\t \x01(\x04\x12\x16\n\x0e\x61nchorFoldType\x18\n \x01(\x04\x12\x15\n\rpriorityScore\x18\x0b \x01(\x04\x12\r\n\x05logId\x18\x0c \x01(\t\x12\x19\n\x11msgProcessFilterK\x18\r \x01(\t\x12\x19\n\x11msgProcessFilterV\x18\x0e \x01(\t\"\x8c\x01\n\x04User\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0f\n\x07shortId\x18\x02 \x01(\x04\x12\x10\n\x08nickname\x18\x03 \x01(\t\x12\x0e\n\x06gender\x18\x04 \x01(\x05\x12\x11\n\tsignature\x18\x05 \x01(\t\x12\r\n\x05level\x18\x06 \x01(\x05\x12\x10\n\x08\x62irthday\x18\x07 \x01(\x04\x12\x11\n\ttelephone\x18\x08 \x01(\t\"V\n\x0b\x44isplayText\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x16\n\x0e\x64\x65\x66\x61ultPattern\x18\x02 \x01(\t\x12\"\n\rdefaultFormat\x18\x03 \x03(\x0b\x32\x0b.TextFormat\"\x0c\n\nTextFormatb\x06proto3'
)
_DOUYINCOMMENT = _descriptor.Descriptor(
name='DouYinComment',
full_name='DouYinComment',
filename=None,
file=DESCRIPTOR,
containing_type=None,
create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='message', full_name='DouYinComment.message', index=0,
number=1, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='cursor', full_name='DouYinComment.cursor', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='fetchInterval', full_name='DouYinComment.fetchInterval', index=2,
number=3, type=4, cpp_type=4, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='now', full_name='DouYinComment.now', index=3,
number=4, type=4, cpp_type=4, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='internalExt', full_name='DouYinComment.internalExt', index=4,
number=5, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='fetchTyp', full_name='DouYinComment.fetchTyp', index=5,
number=6, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=25,
serialized_end=158,
)
_MESSAGE = _descriptor.Descriptor(
name='Message',
full_name='Message',
filename=None,
file=DESCRIPTOR,
containing_type=None,
create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='method', full_name='Message.method', index=0,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='payload', full_name='Message.payload', index=1,
number=2, type=12, cpp_type=9, label=1,
has_default_value=False, default_value=b"",
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='msgId', full_name='Message.msgId', index=2,
number=3, type=4, cpp_type=4, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='msgType', full_name='Message.msgType', index=3,
number=4, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='offset', full_name='Message.offset', index=4,
number=5, type=4, cpp_type=4, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=160,
serialized_end=250,
)
二、下载流媒体文件
从网上下载各种流媒体,常常要使用Streambox Vcr(点这里下载)。
StreamBox Vcr可以解析RSTP地址背后流媒体文件真正的下载链接,并最终将文件下载到本地硬盘上。它可以下载RAM、RA(Real Media)、ASX(Windows Media)、SMIL(Real Media Conter)、PLS(MP3 Stream)和MOV(Quicktime)等格式的流媒体文件,它不但支持点播形式的流节目也同样支持现场流节目,而且两者可以同时下载,还支持断点续传!
Streambox Vcr 1.0 Suite软件包中包含了三个不同的版本,其中 Beta 2 版本适合用于下载 Real 格式影片,而 Beta 3.1 版本则适合下载 ASF 格式影片。
下载方法:
把找到的地址拷贝到剪贴板中,然后运行Streambox Vcr(如图),点击“添加”按钮,软件则会自动把节目的链接地址复制到“Location”(待下载链接框)中,接着你再选择文件的保存路径和文件名字,下载协议选“Auto”让Streambox Vcr自动判别。以上步骤完成后按一下“OK”按钮,Streambox Vcr经过分析地址无误后就会开始
下载了。
三、利用OE自动下载流媒体
Offline Explorer 是一款使用方便的离线浏览工具(点这里下载),也可以用来下载流媒体。对于地址形如
rtsp://17k:[email protected]/17kfilms/movies/action/s4120364/01.sm的流媒体,要下载还必须使用OE呢!
OE可以让你选择要抓取网站的深度、下载的存放位置等,还可以提供抓取网站的MAP,使整个网站的链接及目
录结构一目了然。
边栏推荐
- 2022 International Conference on civil, building and Environmental Engineering (iccaee 2022)
- Assertion mechanism in test class
- File & recursion 14.1
- Liux common commands (view and open firewall port number + view and kill process)
- The first activity of togaf10 standard reading club was successfully held, and the wonderful moments were reviewed!
- 虚拟存储器与Cache的比较
- 2022/7/24-7/25
- Features of hardwired controller:
- 14、 C pointer explanation (IV): pointer of pointer
- 传奇服中怎么刷装备
猜你喜欢

Technical certification | Tupo software and Huawei cloud create a new situation of win-win cooperation

org.junit.runners.model. InvalidTestClassError: Invalid test class ‘com.zhj.esdemo. MysqlTests‘: 1.

How to use C WinForm to copy files and display progress

TCP的粘包拆包问题+解决方案

物联网有助于应对气候变化的 3 种方式

Notes on Shangpin project in shangsilicon Valley (I)

【zer0pts CTF 2022】 Anti-Fermat

xss.haozi.me练习通关

BUUCTF-RSA
![[GWCTF 2019]BabyRSA1](/img/31/6727fd04be13ddd6bd46969fe2c50f.png)
[GWCTF 2019]BabyRSA1
随机推荐
Key points of data management
Error:svn: E155010: ‘/Users/.../Desktop/wrokspace/xxx‘ is scheduled for addition, but is missing
蚁剑常见报错
QT with OpenGL (shadow mapping)
BUUCTF-Baby RSA
Senior how to determine the standard of software test completion
Technical certification | Tupo software and Huawei cloud create a new situation of win-win cooperation
[GWCTF 2019]BabyRSA1
J9 Digital Science Popularization: how does the double consensus of Sui network work?
MySQL data query (where)
If we were the developer responsible for repairing the collapse of station B that night
新媒体内容输出方式-短视频
Posture recognition and simple behavior recognition based on mediapipe
尚硅谷尚品项目汇笔记(一)
BUUCTF-RSA4
What is the prospect of low code development? Are you really optimistic about low code development?
Redis hash underlying data structure
BUUCTF-bbbbbbrsa
Latex常用总结(2):输入矩阵(输入矩阵、对角阵、方程组等)
NDK 系列(6):说一下注册 JNI 函数的方式和时机