养了条小鱼,想随时随地看看怎么办?各个直播平台就是最好的选择了。不用自己搭建RTMP服务器,还能和大家一起分享,何乐而不为呢?当然,比较注重隐私,可以自己搭建一个直播推流服务器,同样可以实现随时随地查看。搭建方式可以查看这篇博客:传送门。
源码下载:https://github.com/withsalt/BilibiliLiveTools
效果图
直播间地址: http://live.bilibili.com/21614697 (欢迎关注哦~)
准备工作
(1)前提条件
a.首先要有一个树莓派,并连接了摄像头(USB摄像头)。并能够访问网络。
b.在Bilibili中通过实名认证,并开通了直播间。点击连接开通直播间(很简单的,实名认证通过后直接就可以开通了)
c.FFmpeg。推流默认使用FFmpeg,树莓派官方系统默认安装了的,我就不再赘述,其它系统请自行安装。
(2)获取程序
下载编译好的程序:
wget https://github.com/withsalt/BilibiliLiveTools/releases/latest/download/BilibiliLiver_Linux_ARM.zip --no-check-certificate
(2)解压并授权
unzip BilibiliLiver_Linux_ARM.zip && chmod -R 755 BilibiliLiver_Linux_ARM && chmod +x BilibiliLiver_Linux_ARM/BilibiliLiver
(3)编辑配置文件
编辑用户配置文件User.json
cd BilibiliLiver_Linux_ARM/
nano appsettings.json
编辑直播配置文件
{
"AppSetting": {
//加密密钥,一般不需要修改,要修改的话,至少需要16位
"Key": "ac131de1-ed20-499f-8fdf-dede054dbaad"
},
"LiveSetting": {
//直播间分类
"LiveCategory": "369",
//直播间名称
"LiveRoomName": "【24H】小金鱼啦~",
//FFmpeg推流命令,请自行填写对应操作系统和设备的推流命令,默认为树莓派,且摄像头设备为‘/dev/video0’
//填写到此处时,请注意将命令中‘"’用‘\’进行转义,将推流的rtmp连接替换为[[URL]],[[URL]]不需要双引号。
"FFmpegCmd": "ffmpeg -f dshow -video_size 1280x720 -i video=\"5M USB CAM\" -vcodec libx264 -pix_fmt yuv420p -r 30 -s 1280*720 -g 60 -b:v 5000k -an -preset:v ultrafast -tune:v zerolatency -f flv [[URL]]",
//ffmpeg异常退出后,是否自动重新启动
"AutoRestart": true
},
"UserSetting": {
//B站账号
"Account": "*********",
//B站密码,放心填写,没有后门
"Password": "*********"
}
}
由于推流方式不同以及FFmpeg配置的多边性,这里采用直接填写推流命令的方式。建议填写之前先测试推流命令能否正确执行。默认的推流命令设配树莓派官方系统,其它系统可能不适用,需要自己修改。
推流命令(FFmpegCmd)中的“[[URL]]”,是一个配置符号,将在程序中被替换为获取到的Bilibili推流地址,所以一定要在最终命令中,把测试文件或者地址修改为 “[[URL]]”(URL大写) ,否则程序将抛出错误。推流命令中注意半角双引号需要用符号‘\’来进行转义。
FFmpeg的使用请查看最后一节:FFmpeg的使用
开始直播
执行推流程序。推流程序将会自动开启B站直播,并获取推流地址,然后执行预设的FFmpeg推流命令。
sudo ./BilibiliLiver
输出下面的就表示开始直播啦~
如果希望在后台持续直播,可以将上面一条命令替换为:
sudo nohup ./BilibiliLiver /dev/null 2>live.log
程序将会在后台运行。
或者编写一个系统服务,设置开机启动,控制开始关闭推流什么的。
sudo nano /etc/systemd/system/bilibiliLiver.service
将下方代码中的执行路径替换为BilibiliLiver程序所在的绝对路径。比如“/home/pi/BilibiliLiver_Linux_ARM/BilibiliLiver”,注意大小写。
[Unit]
Description=BilibiliLiver
After=network.target
[Service]
WorkingDirectory=BilibiliLiver所在路径,比如/home/pi/BilibiliLiver_Linux_ARM
ExecStart=BilibiliLiver所在路径包含程序的路径,比如/home/pi/BilibiliLiver_Linux_ARM/BilibiliLiver
Restart=always
SyslogIdentifier=BilibiliLiver Tool
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
执行start,开启推流服务。
sudo systemctl start bilibiliLiver
检查命令是否配置正确已经程序是否正常工作。
sudo systemctl status bilibiliLiver
其它服务维护命令。
sudo systemctl stop bilibiliLiver #停止推流服务
sudo systemctl enable bilibiliLiver #设置开机启动
sudo systemctl disable bilibiliLiver #禁用开机启动
FFmpeg的使用
无论是Windows还是Linux,运行环境无论是PC还是树莓派,如果使用FFmpeg推流,都要在上面安装好FFmpeg,并在命令行中执行ffmpeg -version后可以准确的获取ffmpeg的相关信息。
至于如何在各种环境中安装ffmpeg我就不在此赘述,网上有很多详细的教程。树莓派官方系统是内置了ffmpeg的,不用自己再编译安装。
以下是树莓派Raspbian系统中推流命令:
#推流USB摄像头(包含音频,音频源为音频文件)
ffmpeg -thread_queue_size 512 -f video4linux2 -s 1280*720 -input_format mjpeg -i "视频源" -stream_loop -1 -i "音频源" -vcodec h264_omx -pix_fmt yuv420p -r 30 -s 1280*720 -g 60 -b:v 10M -bufsize 10M -acodec aac -ac 2 -ar 44100 -ab 128k -f flv "推流地址"
#推流USB摄像头(包含音频,音频源麦克风)
ffmpeg -thread_queue_size 512 -f video4linux2 -s 1280*720 -input_format mjpeg -i "视频源" -i "音频源" -vcodec h264_omx -pix_fmt yuv420p -r 30 -s 1280*720 -g 60 -b:v 10M -bufsize 10M -acodec aac -ac 2 -ar 44100 -ab 128k -f flv "推流地址"
#推流USB摄像头(不包含音频)
ffmpeg -thread_queue_size 512 -f video4linux2 -s 1280*720 -i "视频源" -vcodec h264_omx -pix_fmt yuv420p -r 30 -s 1280*720 -g 60 -b:v 10M -bufsize 10M -an -f flv "推流地址"
#推流视频
ffmpeg -re -i "视频源" -vcodec copy -acodec aac -b:a 192k -f flv "推流地址"
以下是Windows系统中推流命令:
#推流USB摄像头(包含音频,音频源为音频文件)
ffmpeg -f dshow -s 1280*720 -r 1024 -i video="视频源" -stream_loop -1 -i "音频源" -vcodec libx264 -pix_fmt yuv420p -r 30 -s 1280*720 -g 60 -b:v 5000k -acodec aac -ac 2 -ar 44100 -ab 128k -preset:v ultrafast -tune:v zerolatency -f flv "推流地址"
#推流USB摄像头(包含音频,音频源麦克风)
ffmpeg -f dshow -s 1280*720 -r 1024 -i video="视频源" -i "音频源" -vcodec libx264 -pix_fmt yuv420p -r 30 -s 1280*720 -g 60 -b:v 5000k -acodec aac -ac 2 -ar 44100 -ab 128k -preset:v ultrafast -tune:v zerolatency -f flv "推流地址"
#推流USB摄像头(不包含音频)
ffmpeg -f dshow -s 1280*720 -r 1024 -i video="视频源" -vcodec libx264 -pix_fmt yuv420p -r 30 -s 1280*720 -g 60 -b:v 5000k -an -preset:v ultrafast -tune:v zerolatency -f flv "推流地址"
#推流视频
ffmpeg -re -i "视频源" -vcodec copy -acodec aac -b:a 192k -f flv "推流地址"
以上命令没有经过仔细测试,不同环境需要不同的参数,请自行学习FFmpeg的用法。
FFmpeg基本用法:
ffmpeg [全局选项] {[输入文件选项] -i 输入文件} … {[输出文件选项] 输出文件} …
参数简单介绍:
- -f:输入格式(video4linux2 )
- -i:输入源
- -s:视频分辨率
- -r:所需的帧率
- -vcodec:视频编解码器
- -vb:视频比特率
- -bufsize:缓冲区大小(对于流来说很重要)
- -vf:像素格式
- -g:GOP(图片组,对于流式传输很重要)
- -an:不使用音频
- -f:输出格式
树莓派在使用FFmpeg推流时,帧数大概在10帧左右,这个帧数并不理想,而且还在用树莓派硬件解码的情况下。但是也是目前我能找到的最优解了,如果还有更好的方案,欢迎留言或提交issue。
B站直播间分类及ID
开播时需要将ID填写到LiveSetting.json中的LiveCategory中。
ID | 分类名称 | 分区名称 |
---|---|---|
80 | 绝地求生 | 网游 |
86 | 英雄联盟 | 网游 |
88 | 穿越火线 | 网游 |
89 | CS:GO | 网游 |
87 | 守望先锋 | 网游 |
252 | 逃离塔科夫 | 网游 |
102 | 最终幻想14 | 网游 |
329 | VALORANT | 网游 |
84 | 300英雄 | 网游 |
91 | 炉石传说 | 网游 |
92 | DOTA2 | 网游 |
181 | 魔兽争霸3 | 网游 |
78 | DNF | 网游 |
388 | FIFA | 网游 |
82 | 剑网3 | 网游 |
83 | 魔兽世界 | 网游 |
240 | APEX英雄 | 网游 |
318 | 使命召唤:战区 | 网游 |
249 | 星际战甲 | 网游 |
115 | 坦克世界 | 网游 |
248 | 战舰世界 | 网游 |
316 | 战争雷霆 | 网游 |
383 | 战意 | 网游 |
196 | 无限法则 | 网游 |
114 | 风暴英雄 | 网游 |
93 | 星际争霸2 | 网游 |
239 | 刀塔自走棋 | 网游 |
164 | 堡垒之夜 | 网游 |
251 | 枪神纪 | 网游 |
81 | 三国杀 | 网游 |
112 | 龙之谷 | 网游 |
173 | 古剑奇谭OL | 网游 |
176 | 幻想全明星 | 网游 |
300 | 封印者 | 网游 |
288 | 怀旧网游 | 网游 |
298 | 新游前瞻 | 网游 |
331 | 星战前夜:晨曦 | 网游 |
350 | 梦幻西游端游 | 网游 |
107 | 其他游戏 | 网游 |
35 | 王者荣耀 | 手游 |
256 | 和平精英 | 手游 |
321 | 原神 | 手游 |
163 | 第五人格 | 手游 |
395 | LOL手游 | 手游 |
330 | 公主连结Re:Dive | 手游 |
292 | 火影忍者 | 手游 |
255 | 明日方舟 | 手游 |
418 | 四叶草剧场 | 手游 |
37 | Fate/GO | 手游 |
449 | 机动战姬:聚变 | 手游 |
36 | 阴阳师 | 手游 |
442 | 坎公骑冠剑 | 手游 |
448 | 天地劫:幽城再临 | 手游 |
140 | 决战!平安京 | 手游 |
293 | 战双帕弥什 | 手游 |
407 | 游戏王:决斗链接 | 手游 |
408 | 天谕 | 手游 |
389 | 天涯明月刀 | 手游 |
40 | 崩坏3 | 手游 |
386 | 使命召唤手游 | 手游 |
41 | 狼人杀 | 手游 |
411 | 幻书启世录 | 手游 |
286 | 百闻牌 | 手游 |
280 | 王者模拟战 | 手游 |
333 | CF手游 | 手游 |
154 | QQ飞车 | 手游 |
113 | 碧蓝航线 | 手游 |
352 | 三国杀移动版 | 手游 |
269 | 猫和老鼠 | 手游 |
354 | 综合棋牌 | 手游 |
250 | 自走棋手游 | 手游 |
156 | 影之诗 | 手游 |
206 | 剑网3指尖江湖 | 手游 |
343 | DNF手游 | 手游 |
290 | 双生视界 | 手游 |
342 | 梦幻西游手游 | 手游 |
305 | 我的勇者 | 手游 |
262 | 重装战姬 | 手游 |
189 | 明日之后 | 手游 |
50 | 部落冲突:皇室战争 | 手游 |
39 | 少女前线 | 手游 |
42 | 解密游戏 | 手游 |
203 | 忍者必须死3 | 手游 |
178 | 梦幻模拟战 | 手游 |
258 | BanG Dream | 手游 |
212 | 非人学园 | 手游 |
263 | 辐射:避难所Online | 手游 |
214 | 雀姬 | 手游 |
265 | 跑跑卡丁车 | 手游 |
340 | 黑潮之上 | 手游 |
274 | 新游评测 | 手游 |
98 | 其他手游 | 手游 |
236 | 主机游戏 | 单机游戏 |
216 | 我的世界 | 单机游戏 |
283 | 独立游戏 | 单机游戏 |
412 | 怪物猎人:崛起 | 单机游戏 |
455 | 尼尔:人工生命 | 单机游戏 |
276 | 恐怖游戏 | 单机游戏 |
237 | 怀旧游戏 | 单机游戏 |
424 | 鬼谷八荒 | 单机游戏 |
357 | 糖豆人 | 单机游戏 |
218 | 饥荒 | 单机游戏 |
217 | 怪物猎人:世界 | 单机游戏 |
438 | Loop Hero | 单机游戏 |
313 | 仁王2 | 单机游戏 |
277 | 命运2 | 单机游戏 |
221 | 战地5 | 单机游戏 |
245 | 只狼 | 单机游戏 |
282 | 使命召唤 | 单机游戏 |
447 | 霓虹深渊 | 单机游戏 |
426 | 重生细胞 | 单机游戏 |
443 | 永劫无间 | 单机游戏 |
431 | 小小梦魇 | 单机游戏 |
456 | 炼金工房 | 单机游戏 |
453 | 斩妖Raksasi | 单机游戏 |
452 | 异界之上 | 单机游戏 |
451 | 火焰审判 | 单机游戏 |
441 | 雨中冒险2 | 单机游戏 |
432 | 英灵神殿 | 单机游戏 |
422 | 戴森球计划 | 单机游戏 |
226 | 荒野大镖客2 | 单机游戏 |
435 | 节奏医生 | 单机游戏 |
228 | 精灵宝可梦 | 单机游戏 |
309 | 植物大战僵尸 | 单机游戏 |
227 | 刺客信条 | 单机游戏 |
387 | 恐鬼症 | 单机游戏 |
270 | 人类一败涂地 | 单机游戏 |
295 | 方舟 | 单机游戏 |
396 | Among Us | 单机游戏 |
433 | 格斗游戏 | 单机游戏 |
362 | NBA2K | 单机游戏 |
244 | 鬼泣5 | 单机游戏 |
308 | 塞尔达 | 单机游戏 |
243 | 全境封锁2 | 单机游戏 |
247 | 探灵笔记 | 单机游戏 |
402 | 赛博朋克2077 | 单机游戏 |
219 | 以撒 | 单机游戏 |
427 | 烟火 | 单机游戏 |
257 | 全面战争 | 单机游戏 |
326 | 骑马与砍杀 | 单机游戏 |
364 | 枪火重生 | 单机游戏 |
302 | FORZA 极限竞速 | 单机游戏 |
311 | 女神异闻录5 | 单机游戏 |
230 | 任天堂明星大乱斗 | 单机游戏 |
341 | 盗贼之海 | 单机游戏 |
273 | 无主之地3 | 单机游戏 |
261 | 马里奥制造2 | 单机游戏 |
319 | 东方大战争 | 单机游戏 |
220 | 辐射76 | 单机游戏 |
410 | 封灵档案 | 单机游戏 |
437 | Everhood | 单机游戏 |
421 | 归家异途 | 单机游戏 |
382 | 橙光 | 单机游戏 |
439 | 恐惧之间 | 单机游戏 |
436 | 泡沫冬景 | 单机游戏 |
446 | 双人成行 | 单机游戏 |
440 | 生化入侵 | 单机游戏 |
450 | 先驱者 | 单机游戏 |
454 | 甜蜜之家 | 单机游戏 |
235 | 其他单机 | 单机游戏 |
379 | 全面战争:竞技场 | 单机游戏 |
21 | 视频唱见 | 娱乐 |
145 | 视频聊天 | 娱乐 |
207 | 舞见 | 娱乐 |
123 | 户外 | 娱乐 |
399 | 日常 | 娱乐 |
339 | 放松电台 | 电台 |
190 | 唱见电台 | 电台 |
192 | 聊天电台 | 电台 |
193 | 配音 | 电台 |
371 | 虚拟主播 | 虚拟主播 |
404 | 赛博朋克2077虚拟区 | 虚拟主播 |
367 | 美食 | 生活 |
369 | 萌宠 | 生活 |
378 | 时尚 | 生活 |
33 | 影音馆 | 生活 |
376 | 人文社科 | 学习 |
375 | 科技科普 | 学习 |
377 | 职业技能 | 学习 |
372 | 陪伴学习 | 学习 |
373 | 绘画 | 学习 |
文章评论
想问一下直接把你的GitHub项目把FFmpeg改为推流视频可以实现嘛
@方成 没懂你的意思,ffmpeg本身就是用来推流的。
你好,我想问一下,如果不想推流了,该用什么方法停止树莓派推流呢?
@༺行尸༻ 唔,没懂你意思,直接拔电源不就行了。不拔电源关闭推流服务也行撒。
@afirefish 就是想问有没有能通过代码控制的关闭推流的指令,而不需要手动控制。我想设置一个按钮来控制开始推流和结束推流。
@༺行尸༻ 要用这个项目的话,你得自己拉代码来改了。做这玩意儿主要是考虑全天候的,没考虑过关[笑哭]
@afirefish 好的谢谢,那我只能通过kill杀死推流指令进程来实现了。
如果使用CSI的摄像头应该怎么修改命令呢