最近我想把“10分钟练琴系列”的视频放到直播平台循环播放,本来想着用云服务器实现,但家中落灰的树莓派说:“这事儿交给我就行了,还不用你花钱!”于是就有了下面的事情。
直播链接
http://live.bilibili.com/3544257
ssh连接树莓派
1
2
3
$ ssh pi@192.168.x.x
# 默认密码 raspberry
上传视频文件
把本地电脑的视频上传到树莓派的/home/pi/Videos/
文件夹:
1
$ scp video.mp4 pi@192.168.x.x:/home/pi/Videos/
循环播放核心代码
在/home/pi/
目录下创建一个名为stream.sh
的可执行文件,并贴入以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
RTMP_URL="rtmp://live-push.bilivideo.com/live-bvc/?streamname=example"
VIDEO_DIR="/home/pi/Videos"
while true; do
for VIDEO_FILE in $VIDEO_DIR/*.mp4; do
ffmpeg -re -i "$VIDEO_FILE"\
-c:v copy -c:a aac \
-b:a 192k -strict -2 \
-f flv $RTMP_URL
done
done
其实就是用ffmpeg实现直播推流。这里的RTMP_URL需要自己去对应的直播平台获得。其中-c:v copy
可以让树莓派不必重新解码,毕竟它性能很一般。建议把视频用HandBrake软件或其他格式转换工具提前处理一下,我处理成720p,Constant Quality是30。
最后不要忘了改一下的权限,否则之后进程管理工具会没有权限执行:
1
$ chmod +x stream.sh
进程管理工具
使用supervisorctl
方便后台运行,这样即使我们关闭当前终端session,也不会影响直播进程。如果没有的话,记得先安装:
1
sudo apt install supervisor
这是几个常用的控制命令:
1
2
3
sudo supervisorctl start play
sudo supervisorctl stop play
sudo supervisorctl status
配置路径与内容
包括工作目录、要运行的脚本、容错机制与日志保存。
/etc/supervisor/conf.d/play.conf
1
2
3
4
5
6
7
8
9
10
11
[program:play]
directory=/home/pi
command=./stream.sh
autostart=true
autorestart=true
startretries=10
redirect_stderr=true
stdout_logfile=/home/pi/stream.log
stdout_logfile_maxbytes=512KB
stdout_logfile_backups=2
environment=ASPNETCORE_ENVIRONMENT="Development"