直播弹幕互动游戏探索

最近短视频平台出现了一个现象级的弹幕玩法,叫“弹幕互动游戏”。大家看一个视频就清楚这是个啥玩意儿。同时感谢 https://github.com/xgxkxaxl/x-ladon-x-argus-x-gorgon-x-khronos作者的算法测试提供。

弹幕互动游戏

作为一名技术,其背后的商业逻辑我们不做过多的探究(毕竟市场已经证实了该玩法的市场效应是很不错的),我们研究下其技术实现原理

因为抖爸爸对DY两个字异常敏感,咱们这次就用tiktok手机端来看下整个技术实现方案。

一、寻找直播入口

1、打开tiktok,点击左上角live

二、抓包

发现“webcast16-ws-useast5.us.tiktokv.com/webcast/im/push/”开头的wss推流链接

这个就是直播间的用于跟用户建立通信的websockes长链接,先看下请求参数:

live_region:                  US
app_language:                 en
app_type:                     normal
channel:                      googleplay
device_type:                  pixel
language:                     en
rid:                          7167623950695271194
resolution:                   1080*2180
update_version_code:          202270101
cdid:                         b0a5c09c-061e-4fc8-aed1-00359b33d9e4
sys_region:                   US
uoo:                          1
timezone_name:                Canada/Eastern
residence:                    US
ac:                           wifi
effect_sdk_version:           12.3.0
current_network_quality_info: {"tcp_rtt":15,"quic_rtt":15,"http_rtt":258,"downstream_throughput_kbps":2214,"quic_send_loss_rate":-1,"quic_receive_loss_rate":-1,"net_effective_connection_type":4,"video_download_speed":1411}
device_id:                    7164618779888174635
compress:                     gzip
mcc_mnc:                      310680
version_code:                 270101
ab_version:                   27.1.1
live_id:                      12
device_platform:              android
region:                       US
aid:                          1233
room_id:                      7167623950695271194
cursor:                       1668844203887_7167631274004190978_7167631274004185088_1
manifest_version_code:        202270101
_rticket:                     1668846676392
current_region:               US
iid:                          7164619543654025001
host_abi:                     arm64-v8a
locale:                       en
openudid:                     775a74e09dd2402a
sid:                          f9532b5505890b3346904344a935e625
ac2:                          wifi5g
os_api:                       28
identity:                     audience
webcast_locale:               en_US
dpi:                          480
carrier_region:               US
os_version:                   9
timezone_offset:              -18000
carrier_region_v2:            310
webcast_sdk_version:          2500
imprp:                        u4qrACnHc7yQG
app_name:                     musical_ly
version_name:                 27.1.1
device_brand:                 pixel
op_region:                    US
webcast_language:             en
build_number:                 27.1.1
ts:                           1668844203
aid:                          1233
device_id:                    7164618779888174638
access_key:                   c810b464bad1c8b5114fc55bf0bafa35
fpid:                         9
sdk_version:                  3
iid:                          7164619543654025001
pl:                           0
ne:                           1
version_code:                 270101
ttnet_ignore_offline:         1

经测试,其中几个参数是必备的:

rid, room_id, iid, device_id, imprp, cursor,这几个参数但凡少一个都是无法建立连接的

ok,那我们就以上参数进行逐一生成

三、生成参数

1、rid和room_id

有两种方案

(1)一种是通过手机端user/接口获取room_id

该方法请求数据量非常小,且用户下播后room_id字段为0。而且数据反馈及时,但是需要device算法和xaxl算法

(2)通过pc端请求

 该方法不需要device和xaxl,但是该room_id永远存在,用户下播也存在,无法获取该直播间是否关闭。

其实本人更建议用第一种方法,稳定及时。第二种为下下策

2、device_id和iid

用大佬的设备生成算法生成

https://github.com/xgxkxaxl/x-ladon-x-argus-x-gorgon-x-khronos

 3、imprp, cursor

这俩参数是一眼找不出来的,我们往上看,发现

webcast16-normal-useast5.us.tiktokv.com/webcast/im/fetch/”开头的请求结果下有该关键字,于是我们模拟请求该链接,该链接需要几个核心加密参数:

x-gorgon
x-khronos
x-argus
x-ladon

以及device信息,继续使用大佬提供的算法

然后获取到的数据是protobuf转义过的数据,咱们还得对着apk的定义写一份proto文件。

 

 转成pb2的py文件

protoc tiktok.proto --python_out ./

然后解析该内容,发现如下数据(取部分):

 这样,这个完整的wss链接就出来了

三、构造请求直播间链接

ok,重新捋一捋

1、获取device数据

2、构造“webcast16-normal-useast5.us.tiktokv.com/webcast/im/fetch/ ”请求

3、获取加密参数,请求url

4、解析protobuf数据,获取imprp, cursor

5、构造wss链接

6、建立wss长链接,并解析protobuf数据(手机端不好同步录制代码,以pc为例)

弹幕protobuf解析

四、弹幕与游戏的交互

这部分内容有点多,下期继续。。。

猜你喜欢

转载自blog.csdn.net/qq517348412/article/details/127937624