用树莓派在斗鱼直播视频

提示:树莓派3B+使用ffmpeg推流直播cpu占用在40%上下

1安装ffmpeg

sudo apt-get install ffmpeg -y

2直播单个视频

ffmpeg -re -i ./play/luv-apink.mp4 -c copy -f flv "rtmp://send3.douyu.com/live/你的推流码"

3直播多个视频

ffmpeg -re -f concat -safe 0 -i 1.txt -vcodec copy -acodec aac -b:a 192k -f flv "rtmp地址/你的推流码"

1.txt是播放列表,按如下格式。如果是电脑编辑文本文档的记得要复制过去,因为树莓派里面的和电脑的虽然看起来一样但实际上不一样。

sudo nano1.txt

注意:

这里添加的多个视频最好是同类型的,比如同一个网站下下载的,都是720P的,都是MP4或者都是flv格式,或者都是用同一设备拍摄的,总之越统一越好。这样才能最大限度的保证直播的时候不会出现花屏,有声音没图像等故障。判断是否同一类型的方法也很简单,用合成视频的命令合成一下,

ffmpeg -f concat -i 1.txt -c copy output.flv

如果得到的视频播放器来无任何问题,那么证明你的这个1.txt播放列表没有问题,当然你也可以把合成后的视频单个播放,效果是一样的。

file 1.mp4                                                   
file 2.mp4
file 3.mp4
file 4.mp4
file 5.mp4
file 6.mp4
file 7.mp4
file 8.mp4
file 9.mp4
file 10.mp4

4视频合并

上面说到1.txt播放列表里面的视频有严格要求,必须大致一样才能添加到列表播放。那么问题来了,视频素材来源参差不齐不就弄不了了?解决办法是引入另外一个软件,QQ影音。用他的转码压缩功能先把视频标准化,弄成格式,分辨率,帧数,码率一样的视频文件,再次用ffmpeg合并就百分百成功了,亲测有用。不合并直接添加到播放列表也可以,总之就是可以合并才能台南佳到1.txt播放列表里面。合并命令:

ffmpeg -f concat -i 1.txt -c copy output.flv

QQ截图20190102093320.png


5循环24小时播放

写一个循环脚本

sudo nano zhibo.sh
#!/bin/bash
while true
do
    cd /zhibo/720p
    ffmpeg -re -f concat -safe 0 -i 1.txt -vcodec copy -acodec aac -b:a 192k -f flv "rtmp://send3a.douyu.com/live/xxxxxx"
done

增加执行权限

sudo chmod +x zhibo.sh

让这个脚本后台运行

sudo nohup  ./zhibo.sh >/dev/null 2>&1 &

使用jobs可看到test.sh处于running状态

使用ps -ef |grep zhibo.sh可查看到正在运行的test.sh脚本进程

退出当前shell终端,再重新打开,使用jobs看不到正在运行的test.sh,但使用ps -ef可以看到

结束直播的话,sudo kill -9 进程的pid

sudo ps -ef | pgrep zhibo.sh | sudo xargs kill -9
sudo ps -ef | pgrep ffmpeg | sudo xargs kill -9

6 进阶之脚本

每次开关直播都这么多命令很麻烦,那就写个脚本出来省时省力。

1.开播

sudo nano kaizhibo.sh
#!/bin/bash
sudo nohup /zhibo/720p/zhibo.sh >/dev/null 2>&1 &
if [ $? -eq 0 ];then
echo "开播成功!"
else
echo "开播失败!"
exit 0
fi

加执行权限

sudo chmod +x kaizhibo.sh

2.关播

sudo nano guanzhibo.sh

前面不要加#!/bin/bash这一行,加了脚本只会执行第一个,我也搞不懂,试了几次,去掉才正常执行。

sudo ps -ef | pgrep zhibo.sh | sudo xargs kill -9 
if [ $? -eq 0 ];then
echo "直播脚本关闭成功!"
else
echo "直播脚本关闭失败!"
exit 0
fi
sudo ps -ef | pgrep ffmpeg | sudo xargs kill -9
if [ $? -eq 0 ];then
        echo "直播关闭成功!"
else
        echo "直播关闭失败!"
        exit 0
fi

加执行权限

sudo chmod +x guanzhibo.sh

效果如下:

QQ截图20190104083351.png

注意:斗鱼直播推流码下播就失效,甚至你播着时间长了没人看也会失效。所以这个开播脚本的前提是,你每次开播之后要重新编辑那个循环zhibo.sh脚本,改成新的推流码,否则虽然脚本提示成功,直播间也许还是正在连线。

还有就是脚本命名为啥是拼音这么low,用kaibo/gaunbo这样的。其实这里就显现了英文的弱点,start/stop,on/off这一对单词开头都是一样的,要多按几下tab,拼音的强大就在于kai/guan,shang/xia首字母都不一样,这就是优势。中国人用拼音,没毛病,老外黑进来也看不懂脚本名称,稳得很!

最后编辑于:2019/01/01作者: admin

发表评论