当前位置:网站首页>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 .
边栏推荐
猜你喜欢

给网站套上Cloudflare(以腾讯云为例)

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

Explain the idempotence of distributed system in detail

Monologue of a software Investor: why don't I pursue fast-growing companies

Bank marketing predicts the success rate of a customer's purchase of financial products
![[Development Tutorial 9] crazy shell · open source Bluetooth heart rate waterproof sports Bracelet - heart rate monitoring](/img/cc/91ec9f2c2cd5d5bddd157e61191772.png)
[Development Tutorial 9] crazy shell · open source Bluetooth heart rate waterproof sports Bracelet - heart rate monitoring

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

Realize today's news website based on native JS

What is the prospect of low code development? Are you really optimistic about low code development?

How to bold font in Latex & how to make circle serial number
随机推荐
MapReduce (III)
Posture recognition and simple behavior recognition based on mediapipe
TCP的粘包拆包问题+解决方案
学yolo需要什么基础?怎么学YOLO?
liux常用命令(查看及其开放防火墙端口号+查看及其杀死进程)
Construction and application of super large scale knowledge map of ants
Decrypt the secret of 90% reduction in oom crash~
Liux common commands (view and open firewall port number + view and kill process)
正值三伏天我却被吓出了冷汗:驾驶安全隐患离我们有多远?
Flutter pull_ to_ refresh-1.6.0/lib/src/internals/slivers. dart:164:13: Error: Method not found: ‘descr
Latex常用总结(2):输入矩阵(输入矩阵、对角阵、方程组等)
Assertion mechanism in test class
传奇服务端:GOM GeeM2引擎更新时必须要修改哪些地方?
荣耀多款产品齐发,笔记本MagicBook V 14售价6199元起
Sort sort
Master data management theory and Practice
Explain the idempotence of distributed system in detail
传奇外网架设教程带图文解说——Gom引擎
[极客大挑战 2019]RCE ME
[gwctf 2019] boring lottery