夸克之书

  • 首页
  • 科普
  • 笔记
  • .NET/C#
  • 物联网
  • 算法
  • Linux
  • 树莓派
夸克之内,别有洞天
  1. 首页
  2. 树莓派
  3. 正文

树莓派自动化推流摄像头到Bilibili直播

2019-09-29 15481点热度 2人点赞 8条评论

养了条小鱼,想随时随地看看怎么办?各个直播平台就是最好的选择了。不用自己搭建RTMP服务器,还能和大家一起分享,何乐而不为呢?当然,比较注重隐私,可以自己搭建一个直播推流服务器,同样可以实现随时随地查看。搭建方式可以查看这篇博客:传送门。

源码下载:https://github.com/withsalt/BilibiliLiveTools

效果图

%title插图%num

直播间地址: http://live.bilibili.com/21614697 (欢迎关注哦~)

video
play-sharp-fill
Link

准备工作

(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

输出下面的就表示开始直播啦~

%title插图%num
开始直播输出

如果希望在后台持续直播,可以将上面一条命令替换为:

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的相关信息。

%title插图%num
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翻译文档下载

树莓派在使用FFmpeg推流时,帧数大概在10帧左右,这个帧数并不理想,而且还在用树莓派硬件解码的情况下。但是也是目前我能找到的最优解了,如果还有更好的方案,欢迎留言或提交issue。

B站直播间分类及ID

开播时需要将ID填写到LiveSetting.json中的LiveCategory中。

ID分类名称分区名称
80绝地求生网游
86英雄联盟网游
88穿越火线网游
89CS:GO网游
87守望先锋网游
252逃离塔科夫网游
102最终幻想14网游
329VALORANT网游
84300英雄网游
91炉石传说网游
92DOTA2网游
181魔兽争霸3网游
78DNF网游
388FIFA网游
82剑网3网游
83魔兽世界网游
240APEX英雄网游
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第五人格手游
395LOL手游手游
330公主连结Re:Dive手游
292火影忍者手游
255明日方舟手游
418四叶草剧场手游
37Fate/GO手游
449机动战姬:聚变手游
36阴阳师手游
442坎公骑冠剑手游
448天地劫:幽城再临手游
140决战!平安京手游
293战双帕弥什手游
407游戏王:决斗链接手游
408天谕手游
389天涯明月刀手游
40崩坏3手游
386使命召唤手游手游
41狼人杀手游
411幻书启世录手游
286百闻牌手游
280王者模拟战手游
333CF手游手游
154QQ飞车手游
113碧蓝航线手游
352三国杀移动版手游
269猫和老鼠手游
354综合棋牌手游
250自走棋手游手游
156影之诗手游
206剑网3指尖江湖手游
343DNF手游手游
290双生视界手游
342梦幻西游手游手游
305我的勇者手游
262重装战姬手游
189明日之后手游
50部落冲突:皇室战争手游
39少女前线手游
42解密游戏手游
203忍者必须死3手游
178梦幻模拟战手游
258BanG Dream手游
212非人学园手游
263辐射:避难所Online手游
214雀姬手游
265跑跑卡丁车手游
340黑潮之上手游
274新游评测手游
98其他手游手游
236主机游戏单机游戏
216我的世界单机游戏
283独立游戏单机游戏
412怪物猎人:崛起单机游戏
455尼尔:人工生命单机游戏
276恐怖游戏单机游戏
237怀旧游戏单机游戏
424鬼谷八荒单机游戏
357糖豆人单机游戏
218饥荒单机游戏
217怪物猎人:世界单机游戏
438Loop 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方舟单机游戏
396Among Us单机游戏
433格斗游戏单机游戏
362NBA2K单机游戏
244鬼泣5单机游戏
308塞尔达单机游戏
243全境封锁2单机游戏
247探灵笔记单机游戏
402赛博朋克2077单机游戏
219以撒单机游戏
427烟火单机游戏
257全面战争单机游戏
326骑马与砍杀单机游戏
364枪火重生单机游戏
302FORZA 极限竞速单机游戏
311女神异闻录5单机游戏
230任天堂明星大乱斗单机游戏
341盗贼之海单机游戏
273无主之地3单机游戏
261马里奥制造2单机游戏
319东方大战争单机游戏
220辐射76单机游戏
410封灵档案单机游戏
437Everhood单机游戏
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绘画学习
本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2023-03-30

afirefish

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

  • 方成

    想问一下直接把你的GitHub项目把FFmpeg改为推流视频可以实现嘛

    2020-05-11
    登录以回复
    • afirefish

      @方成 没懂你的意思,ffmpeg本身就是用来推流的。

      2020-05-19
      登录以回复
  • ༺行尸༻

    你好,我想问一下,如果不想推流了,该用什么方法停止树莓派推流呢?

    2021-02-20
    登录以回复
    • afirefish

      @༺行尸༻ 唔,没懂你意思,直接拔电源不就行了。不拔电源关闭推流服务也行撒。

      2021-02-20
      登录以回复
      • ༺行尸༻

        @afirefish 就是想问有没有能通过代码控制的关闭推流的指令,而不需要手动控制。我想设置一个按钮来控制开始推流和结束推流。

        2021-02-21
        登录以回复
        • afirefish

          @༺行尸༻ 要用这个项目的话,你得自己拉代码来改了。做这玩意儿主要是考虑全天候的,没考虑过关[笑哭]

          2021-02-21
          登录以回复
          • ༺行尸༻

            @afirefish 好的谢谢,那我只能通过kill杀死推流指令进程来实现了。

            2021-02-21
  • 去月球

    如果使用CSI的摄像头应该怎么修改命令呢

    2022-01-17
    登录以回复
  • 您需要 登录 之后才可以评论
    放松一下
    https://www.quarkbook.com/wp-content/uploads/2021/05/凤凰传奇-海底(Live).flac
    分类
    • .NET/C#
    • Linux
    • 树莓派
    • 物联网
    • 科普
    • 笔记
    • 算法
    • 默认
    最新 热点 随机
    最新 热点 随机
    在代码中判断龙芯新旧世界平台 Windows获取固定后缀的IPv6地址 目前为止,你可能找不到第二台支持志强的1L小主机(P350 Tiny+W-1350+ECC+双NVME+PCIE扩展)!!! iKuai(爱快)实现成都移动IPTV IPoE拨号 Linux EXT4分区误删除后数据恢复 C#连接到巴法云
    在代码中判断龙芯新旧世界平台
    Windows获取固定后缀的IPv6地址 树莓派安装Golang环境 R86S散热改造 极路由B70 免开发者开启ROOT权限(2018/09/15) 解决Mysql中文乱码 极路由B70刷固件详细步骤
    最近评论
    Eagle 发布于 7 个月前(10月21日) 参考博主教程成功搞定了成都移动IPTV组播转单播,电脑、手机都可以播放了。但目前有个问题,原IPTV...
    rundoze 发布于 9 个月前(08月31日) 牛逼
    cc21216695 发布于 2 年前(09月27日) 试了一下,加入启动项也无效,压根没有用
    afirefish 发布于 3 年前(11月28日) 非常感谢,非常棒!
    》随缘《 发布于 3 年前(11月20日) 最新【一键处理】方法: https://github.com/MrXhh/VSTools/rele...
    书签
    • 打赏
    • 毒鸡汤
    • 米店
    • 金鱼直播间

    COPYRIGHT © 2023 quarkbook.com. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    蜀ICP备15036129号-9

    登录
    注册|忘记密码?