当前位置:首页 > 实用技巧 >

bilibili直播姬怎么把弹幕念出来(bilibili直播姬怎么调弹幕)

来源:原点资讯(www.yd166.com)时间:2023-07-30 22:46:14作者:YD166手机阅读>>

功能点
  • 显示日期时间
  • 显示树莓派当前局域网IP
  • 显示当前UP主粉丝数
  • 显示B站未读消息
  • 显示B站视频总计播放数
  • 显示视频总计获赞数
  • 显示总计获得充电次数
  • 显示直播间人气值
  • 显示直播间弹幕
  • 将直播间弹幕念出来(TTS)

功能是不是还挺丰富的,从写第一行代码到完成也就花了两天不到的时间,这也证明了使用python开发的高效率,下面来说说这些功能开发中我遇到了哪些问题,我又是如何解决的。

私信小编01即可获取大量Python学习资源

大家好,我是 大帅 ,一个 老 程序 猿 。

这是我第一次写Python哟,写得不好请多多指教:P

前言

前段时间在掘金社区写文章,得了一台 树莓派3B ,加上之前在闲鱼曾经淘到一块 1280x400 的长条屏,就想着把一直想要的哔哩哔哩UP主助手给完成了。

先上效果

bilibili直播姬怎么把弹幕念出来,bilibili直播姬怎么调弹幕(1)

有弹幕的时候是这样的

bilibili直播姬怎么把弹幕念出来,bilibili直播姬怎么调弹幕(2)

为什么两张截图的显示器不一样呢?哎,说起来都是眼泪,那天晚上我直播写这个代码写到凌晨2点,代码写完我准备把树莓派和显示屏都塞到一个纸盒子里,这个过程中不知道损坏了哪里,屏幕点不亮了...

不过好在树莓派没问题,闲话不多说,先来看看我对于框架选型的思考

框架选型

为什么最后会选用 Python 这个我并不会的语言呢?因为最终是希望这个程序运行在树莓派上,所以首先调研了几种在树莓派上搭建 GUI界面 的方式。

  1. PyQt(python)
  2. Pygame(python)
  3. Electron(javascript)
  4. Flutter(dart)

虽然我对3、4更加熟悉,但毕竟树莓派的性能有限,我只好弃用。1我不熟,但是在我的规划里,我并不需要一些标准化的UI组件。所以最终选择了 pygame 的框架,并且树莓派系统里也默认安装了 pygame 环境,虽从未写过 python ,但对 python 的大名如雷贯耳,早就想学习一下,正好拿这个项目练练手

功能点
  • 显示日期时间
  • 显示树莓派当前局域网IP
  • 显示当前UP主粉丝数
  • 显示B站未读消息
  • 显示B站视频总计播放数
  • 显示视频总计获赞数
  • 显示总计获得充电次数
  • 显示直播间人气值
  • 显示直播间弹幕
  • 将直播间弹幕念出来(TTS)

功能是不是还挺丰富的,从写第一行代码到完成也就花了两天不到的时间,这也证明了使用 python 开发的高效率,下面来说说这些功能开发中我遇到了哪些问题,我又是如何解决的。

pygame框架

bilibili直播姬怎么把弹幕念出来,bilibili直播姬怎么调弹幕(3)

pygame官网: https://www. pygame.org/

pygame 是python环境下最流行的游戏开发框架,当我不需要那些常见的UI组件时,使用游戏框架来开发反而更简单。

# 安装pygame pip install pygame

框架基础使用示例

# 引入pygame和sys import pygame,sys # 定义一个run_game函数,把初始化的逻辑都放里面 def run_game(): # 初始化pygame引擎 pygame.init() # 设置pygame窗口大小,如果设置为0,0则自动识别分辨率,相当于窗口最大化 screen = pygame.display.set_mode((600,400)) # 无限循环,游戏的主循环 while True: # 监听消息 for event in pygame.event.get(): # 当监听到pygame的退出时,触发sys.exit退出应用 if event.type == pygame.QUIT: sys.exit() # 清空屏幕 screen.fill(BG_COLOR) # 游戏绘制的主逻辑放这里 # 刷新屏幕 pygame.display.update() # 执行run_game函数 run_game()

python对于新程序员可能挺友好的,不会对代码的编写有过多先入为主的观念。但对于已经有其他语言开发经验的我来说,也花了好一阵子才适应它的语法。

pygame加载字体显示文字

bilibili直播姬怎么把弹幕念出来,bilibili直播姬怎么调弹幕(4)

# 220是字号 my_font = pygame.font.Font("./路径/字体.ttf", 220) # my_font.render(文字内容,是否抗锯齿,文字颜色,文字背景色) text_element = my_font.render("文字内容", 1, (255,255,255)) # 计算文本渲染后的宽度高度 text_width, text_height = my_font.size("文字内容") # 将文本元素绘制到屏幕指定坐标(元素左上角为原点) screen.blit(text_element, (100,100)python获取日期时间

bilibili直播姬怎么把弹幕念出来,bilibili直播姬怎么调弹幕(5)

import time def getTime(): # 获取系统本地时间 localtime = time.localtime() # 将本地时间格式化为年月日 date_str = time.strftime("%Y 年 %m 月 %d 日", localtime) # 将本地时间格式化为24小时制 hm_str = time.strftime("%H:%M", localtime) # 将本地时间格式化获取秒 second_str = time.strftime("%S", localtime)

在pygame的主循环中调用getTime,并将时间文本绘制到屏幕上,一个小时钟就做好了。

显示树莓派当前局域网IP

为什么要显示当前IP呢,因为大部分时候我不会给树莓派连接鼠标键盘,那显示IP后就可以直接通过VNC或者SSH来连接树莓派了。

网上有Python获取局域网IP的方案。这个是我用下来的最佳方案:p

import socket def get_host_ip(): try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(('8.8.8.8', 80)) ip = s.getsockname()[0] finally: s.close() return ip显示B站各类数据

这里最主要就是去抓取B站的各种API接口,这里也有热心网友整理好的一份野生API文档,大家可以自行查看使用自己需要的。

https:// github.com/SocialSister Yi/bilibili-API-collect

这些B站的API中有一些是需要身份认证的,这就需要我们自己去chrome浏览器中提取,主要会用到两个cookie字段

  • SESSDATA
  • CSRF Token(bili_jct)

import requests # 请求直播间弹幕列表 res = requests.get('https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory?roomid=' BILI_LIVEID) data = res.json()

但是requests是同步执行的,会阻塞主线程的执行。比如在本例中,如果我直接使用requests发起请求,那么在请求时pygame的主逻辑循环就被卡住,这肯定不是我所希望的。网上有很多改异步的教程,我就不赘述了,这里我改用了另一个支持异步的库叫 httpx ,用法和普通requests无比接近

import httpx async with httpx.AsyncClient() as client: res = await client.get('https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory?roomid=' BILI_LIVEID) data = res.json()

然而在我设计里,要请求5个B站接口才能获取到显示的全部数据字段。这个显然也是可以优化的,而我最终选择使用 uniCloud 来开发一个云函数,然后将这个云函数URL化后给python使用,这也是我曾经在视频教程里提到过的,我们可以用uniCloud来开发后端接口,然后前端用Flutter或者其他任意框架,并不需要局限在uniapp。

将直播间弹幕念出来(TTS)

import pyttsx3 pyttsx3.speak("你好")

是的,这个pyttsx3用来做TTS很简单,但它是利用系统自带的服务来完成的。

  • Windows系统:SAPI5
  • MacOS:NSSpeechSynthesizer
  • Linux:eSpeak

优点就像前面的代码,使用非常简单。缺点是在各个平台不太统一,跨端也会遇到一些兼容性问题。比如我在mac上开发,在linux上运行,效果是不一样的。这个方法默认也是同步的,就是在播放语音时,是阻塞主线程的,等语音播放结束后,主线程才会继续执行。这个体验就太差了,我要等弹幕结束,弹幕才能在屏幕上跑起来。

解决方案:使用Thread开启子线程执行

from threading import Thread Thread(target=pyttsx3.speak,args=('你好',)).start()总结

Python还挺好玩的,第一次写虽有一些不适应,遇到问题google一下,也能很快找到解决方案。开发效率非常高,以后有机会还会拿Python多写点东西。

github仓库

本项目代码已全部开源,喜欢的朋友请给个Star以示鼓励吧 https:// github.com/ezshine/rasp i-bilihelper

栏目热文

bilibili直播姬怎么关麦克风(bilibili直播姬怎么录视频)

bilibili直播姬怎么关麦克风(bilibili直播姬怎么录视频)

有工作上的需要找了很多系统录屏软件,win10内置的录屏不太好用,录制出来的文件体积也大。有什么好用的录屏软件吗?我尝试...

2023-07-30 22:31:15查看全文 >>

bilibili直播点歌怎么设置(bilibili直播怎么设置直播回放)

bilibili直播点歌怎么设置(bilibili直播怎么设置直播回放)

看到标题可能要有人问了:夏天好像看到过这篇教程了诶……别急,这个是新做的哦,老的那个是使用网页点歌的,十分简陋。本教程脚...

2023-07-30 22:32:02查看全文 >>

bilibili直播姬声音越来越大(bilibili直播姬怎么设置声音源)

bilibili直播姬声音越来越大(bilibili直播姬怎么设置声音源)

B站直播平台叫直播姬,是二次元圈主播的主战场。哔哩哔哩取名就是这么有特色,花哨的不得了——直播姬。要不是电脑打字,这个“...

2023-07-30 22:30:38查看全文 >>

bilibili直播姬里面如何看见弹幕(bilibili直播怎么调出弹幕)

bilibili直播姬里面如何看见弹幕(bilibili直播怎么调出弹幕)

今天来看看bilibili直播平台直播时如何在全屏游戏的时候观看直播间的弹幕。1弹幕姬弹幕姬是一个第三方的插件,官网是h...

2023-07-30 22:20:15查看全文 >>

bilibili直播姬怎么没游戏声音(bilibili直播姬怎么看观看人数)

bilibili直播姬怎么没游戏声音(bilibili直播姬怎么看观看人数)

bilibili直播姬电脑版配置要求高吗?大家都知道,bilibili直播姬是B站官方推出的一款直播软件,只管卖萌其他的...

2023-07-30 22:12:25查看全文 >>

bilibili直播姬的录像在哪里(bilibili直播回放在哪里可以找到)

bilibili直播姬的录像在哪里(bilibili直播回放在哪里可以找到)

B站最近游戏类的视频都非常火,比如英雄联盟等游戏,发出来的播放量都非常高。对于喜欢制作游戏视频的朋友来说,除了官方发布的...

2023-07-30 22:03:58查看全文 >>

幼儿网上打卡表扬语(表扬幼儿远程打卡表扬语)

幼儿网上打卡表扬语(表扬幼儿远程打卡表扬语)

一个人的动作或想法,如果重复21天就会变成一个习惯性的动作或者想法,在行为心理学里,这种现象叫21天效应。也正因为有这种...

2023-07-30 22:01:11查看全文 >>

幼儿园完成打卡表扬语最新(幼儿园作业打卡表扬语简短)

幼儿园完成打卡表扬语最新(幼儿园作业打卡表扬语简短)

「鼓励表扬宝贝们完成打卡小任务 」亲爱的家长朋友你们好! 这两天,xx老师‍ 收到了很多我们小可爱们 完成的小任务了,老...

2023-07-30 22:38:15查看全文 >>

幼儿线上打卡表扬语(幼儿园线上打卡表扬幼儿话语)

幼儿线上打卡表扬语(幼儿园线上打卡表扬幼儿话语)

总有老师或家长说自己在夸奖孩子的时候词穷:只有“聪明、很棒、很乖”之类的夸奖......特别看到孩子喜欢听这些话,经常无...

2023-07-30 22:43:07查看全文 >>

幼儿园每天线上坚持打卡表扬语(幼儿园线上打卡简单的表扬语)

幼儿园每天线上坚持打卡表扬语(幼儿园线上打卡简单的表扬语)

1️今天小朋友特别积极,特此表扬当然家长的教育才是功不可没的,每日小任务会及时更新,小朋友继续加油,老师期待你们带来的意...

2023-07-30 22:26:56查看全文 >>

文档排行