养了条小鱼,想随时随地看看怎么办?各个直播平台就是最好的选择了。不用自己搭建RTMP服务器,还能和大家一起分享,何乐而不为呢?当然,比较注重隐私,可以自己搭建一个直播推流服务器,同样可以实现随时随地查看。搭建方式可以查看这篇博客:传送门。
效果图
直播间地址: http://live.bilibili.com/21614697 (欢迎关注哦~)
html5: Unsupported video format. Try installing Adobe Flash.
play-rounded-fill play-rounded-outline play-sharp-fill play-sharp-outline
pause-sharp-outline pause-sharp-fill pause-rounded-outline pause-rounded-fill
准备工作
(1)前提条件
a.首先要有一个树莓派,并连接了摄像头(USB摄像头)。并能够访问网络。
b.在Bilibili中通过实名认证,并开通了直播间。点击连接开通直播间(很简单的,实名认证通过后直接就可以开通了)
c.FFmpeg。推流默认使用FFmpeg,树莓派官方系统默认安装了的,我就不再赘述,其它系统请自行安装。
(2)获取程序
下载编译好的程序:
wget https://github.com/withsalt/BilibiliLiveTools/releases/download/1.3.0/BilibiliLiveTools_ARM32.zip
(2)解压并授权
unzip BilibiliLiveTools_ARM32.zip && chmod -R 775 BilibiliLiveTools_ARM32 && chmod +x BilibiliLiveTools_ARM32/BilibiliLiveTools
(3)编辑配置文件
编辑用户配置文件User.json
cd BilibiliLiveTools_ARM32
nano Settings/Users.json #输入用户名和密码
编辑直播配置文件
nano Settings/LiveSetting.json
{
"LiveCategory": "28", //直播间分类
"LiveRoomName": "【24H】小金鱼啦~", //直播间名称
"CmdString": "ffmpeg -thread_queue_size 1024 -f video4linux2 -s 1280*720 -i "/dev/video0" -stream_loop -1 -i "Source/demo_music.m4a" -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 [[URL]]", //推流命令
"AutoRestart": true //推流命令异常结束后是否自动重新开始
}
由于推流方式不同以及FFmpeg配置的多边性,这里采用直接填写推流命令的方式。建议填写之前先测试推流命令能否正确执行。
推流命令(CmdString)中的“[[URL]]”,是一个配置符号,将在程序中被替换为获取到的Bilibili推流地址,所以一定要在最终命令中,把测试文件或者地址修改为 “[[URL]]”(URL大写) ,否则程序将抛出错误。推流命令中注意半角双引号需要用符号‘’来进行转义。
FFmpeg的使用请查看最后一节:FFmpeg的使用
开始直播
继续输入
sudo ./BilibiliLiveTools
输出下面的就表示开始直播啦~
开始直播输出
如果希望在后台持续直播,可以将上面一条命令替换为:
sudo nohup ./BilibiliLiveTools /dev/null 2>live.log
程序将会在后台运行。
FFmpeg的使用
无论是Windows还是Linux,运行环境无论是PC还是树莓派,如果使用FFmpeg推流,都要在上面安装好FFmpeg,并在命令行中执行ffmpeg -version后可以准确的获取ffmpeg的相关信息。
ffmpeg命令行输出
至于如何在各种环境中安装ffmpeg我就不在此赘述,网上有很多详细的教程。树莓派官方系统是内置了ffmpeg的,不用自己再编译安装。
以下是树莓派Raspbian系统中推流命令:
#推流USB摄像头(包含音频,音频源为音频文件)
ffmpeg -thread_queue_size 512 -f video4linux2 -s 1280*720 -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 -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。