直播用的弹幕姬都是怎么实现的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
black11black
V2EX    问与答

直播用的弹幕姬都是怎么实现的?

  • &nsp;
  •   black11black 2020 年 10 月 27 日 2628 次点击
    这是一个创建于 1910 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,在 B 站 DD 的时候主播都用弹幕机,把弹幕转成文字放在 obs 里,弹幕机是怎么获取到直播弹幕的呢?

    按最基础的爬虫来讲,每一次爬取都是一次独立的请求和返回,似乎并不适合用快速重复请求来实现这种需求,能不能请求到另说,之后还要再做排序,除杂什么的怎么看也不太合适。

    按照弹幕机的表现来看最适合的是 ws,也就是如果通过某种方式爬虫能接管浏览器的 ws 的话,每次有弹幕刷新,都会作为一种事件被推送给后端,这样就很舒服。

    8 条回复    2020-10-27 23:07:43 +08:00
    ysc3839
        1
    ysc3839  
       2020 年 10 月 27 日 via Android
    你这问的好像不是直播弹幕程序是怎么实现的,而是弹幕系统的接口。
    没记错的话,大多数直播网站的弹幕都是用 WebSocket 的。
    woodie1994
        2
    woodie1994  
       2020 年 10 月 27 日
    像斗鱼这些好像有提供 api 获取弹幕的
    starzh
        3
    starzh  
       2020 年 10 月 27 日
    locoz
        4
    locoz  
       2020 年 10 月 27 日 via Android   1
    爬虫并不仅限于“每一次爬取都是一次独立的请求和返回”,实际上爬虫是使用与别人客户端同样的通信协议去进行通信,所以不管是 HTTP 、WS 还是纯粹基于 TCP 、UDP 搞的自定义协议,爬虫都可以进行“爬取”这个操作…本质上来讲爬虫只是个特殊的客户端而已。
    然后是弹幕,弹幕一般分两种做法,一种是基于 TCP ( B 站以前是)、一种是基于 WS ( B 站现在是),都是依靠服务端推送的,爬虫(弹幕机)只需要同样模拟发送请求、建立连接,然后正常获取到弹幕并按照特定方式解析就行了(一般会做压缩)。
    当然 HTTP 也不是不能获取到弹幕,像 B 站的直播间在打开时是会加载一下最近十几条弹幕的,那个就是走的 HTTP 。
    glaucus
        5
    glaucus  
       2020 年 10 月 27 日
    斗鱼是有开放弹幕接口的,估计 B 站也有吧
    locoz
        6
    locoz  
       2020 年 10 月 27 日 via Android
    说白了,怎么实现得要看平台方的后端怎么实现,别人用啥爬虫就用啥。
    MagnifierSun
        7
    MagnifierSun  
       2020 年 10 月 27 日
    不是爬虫,而是你也用 ws 客户端去连接 B 站的 ws 服务端,然后校验 token 啥的,最后建立连接就能持续不断收到弹幕了
    atx
        8
    atx  
       2020 年 10 月 27 日 via Android
    整个 websocket 客户端 gayhub 一搜就有现成的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4317 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 10:13 PVG 18:13 LAX 02:13 JFK 05:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86