当前位置:网站首页>Tiktok live broadcast monitoring - round robin 24 hours - live broadcast barrage
Tiktok live broadcast monitoring - round robin 24 hours - live broadcast barrage
2022-07-28 00:11:00 【Android reverse Chen】
as everyone knows d-y All the data are based on json Form interface data return , The data we see on the page is the data specified in the database obtained by the backend , Then through a series of combinations json data , After the front end gets it, the data binding display of the page will get the interface effect we see .

First, what is monitoring ? As mentioned above, monitoring is to always request interfaces , Record the data , The data captured from the beginning to the end of the process is the data obtained by monitoring , Next, we will bring you the monitoring process of normal Tiktok live broadcast
One : Broadcast monitoring
- There are many ways to monitor whether a designated anchor has started broadcasting , Search the live broadcast interface of users through keywords ,web User homepage interface, etc , The most commonly used should be app User homepage interface , Incoming users sec_id Request home interface , To get the json After the data is matched, is there live_room_id_str This field can easily get the user's Broadcasting status
Two , Bullet screen download
- Dealing with the barrage will be a lot of trouble , Because the bullet curtain goes protobuf agreement , After getting the binary file, you need to deserialize , At present, most of them are based on wss Form of being , Commonly used or walking websocekt agreement , Get the current barrage binary and reverse sequence , The control request time is always obtained
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,
)
Two 、 Download streaming media files
Download various streaming media from the Internet , Always use Streambox Vcr( Click here to download ).
StreamBox Vcr Can be parsed RSTP The real download link of streaming media files behind the address , And finally download the file to the local hard disk . It can be downloaded RAM、RA(Real Media)、ASX(Windows Media)、SMIL(Real Media Conter)、PLS(MP3 Stream) and MOV(Quicktime) Streaming media files in other formats , It supports not only on-demand streaming programs, but also live streaming programs , And both can be downloaded at the same time , It also supports breakpoint continuation !
Streambox Vcr 1.0 Suite The software package contains three different versions , among Beta 2 Version is suitable for downloading Real Format movie , and Beta 3.1 Version is suitable for downloading ASF Format movie .
Download method :
Copy the found address to the clipboard , And then run Streambox Vcr( Pictured ), Click on “ add to ” Button , The software will automatically copy the link address of the program to “Location”( Link box to download ) in , Then you choose the path and name of the file , Download agreement option “Auto” Give Way Streambox Vcr Automatic discrimination . After the above steps are completed, click “OK” Button ,Streambox Vcr After analyzing the address, it will start
Downloaded .
3、 ... and 、 utilize OE Automatically download streaming media
Offline Explorer It is a convenient offline browsing tool ( Click here to download ), It can also be used to download streaming media . For address shapes such as
rtsp://17k:[email protected]/17kfilms/movies/action/s4120364/01.sm Streaming media , To download, you must also use OE Well !
OE You can choose the depth of the website you want to crawl 、 Download storage location, etc , You can also provide a way to crawl websites MAP, Make the links and objectives of the whole website
The recording structure is clear at a glance .
边栏推荐
- 4小时定单破20000+,自称“百万内最豪华”,国产品牌飘了?
- Shell编程规范与变量
- [MRCTF2020]babyRSA
- [NCTF2019]babyRSA1
- Smartrefresh nested multiple recycleview sliding conflicts and incomplete layout display
- JUC toolkit learning
- 29. Learn the stacked column chart of highcharts using percentage
- Reduce error demonstration
- Master data management theory and Practice
- ESP8266-----MQTT云下设备上云
猜你喜欢

Bank Marketing预测一个客户购买理财产品的成功率

UE4官方AEC蓝图案例课程学习笔记

What is the prospect of low code development? Are you really optimistic about low code development?
Edit the copy and paste judgment problem (bug?), WYSIWYG display symbol problem feedback.
![[flight control development foundation tutorial 6] crazy shell · open source formation UAV SPI (six axis sensor data acquisition)](/img/75/509db67a580dd4b9849bea08845cc7.png)
[flight control development foundation tutorial 6] crazy shell · open source formation UAV SPI (six axis sensor data acquisition)

蚁剑常见报错

QT with OpenGL (shadow mapping)

为什么 Redis 集群要使用反向代理? 看这篇就明白了

Notes on Shangpin project in shangsilicon Valley (I)

J9数字科普:Sui网络的双共识是如何工作的?
随机推荐
Shell programming specifications and variables
QT with OpenGL (shadow mapping)
BUUCTF-RSA roll
Glory launched a number of products at the same time. The price of notebook magicbook V 14 starts from 6199 yuan
If we were the developer responsible for repairing the collapse of station B that night
What is the prospect of low code development? Are you really optimistic about low code development?
BUUCTF-Baby RSA
Buuctf childrsa Fermat theorem
[NPUCTF2020]EzRSA
14、 C pointer explanation (IV): pointer of pointer
新媒体内容输出方式-短视频
liux常用命令(查看及其开放防火墙端口号+查看及其杀死进程)
Legendary server: what must be modified when the GOM geem2 engine is updated?
TCP sticking and unpacking problem + Solution
Edit the copy and paste judgment problem (bug?), WYSIWYG display symbol problem feedback.
数据中台的那些“经验与陷阱”
Bank Marketing预测一个客户购买理财产品的成功率
BUUCTF-RSA4
基于原生js实现今日新闻网站
Shell(3)