盒子网_电视盒子网_盒子刷机网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2061|回复: 2

如何B站24小时直播 ?从素材到推流[转载]

[复制链接]

1

主题

1

回帖

68

积分

注册会员

Rank: 2

积分
68
发表于 2022-4-9 16:01:48 | 显示全部楼层 |阅读模式
  最近给服务器折腾了不少东西,然后就在思考,能否实现24小时直播。这当然是很好实现的,而且用FFmpeg推流就行,这个对资源占用极低。但是如何做到自动化开播,或是说一键开启直播呢?这就需要你自己操作一下,而且这个你想想就知道肯定不止一种方法,建议自己先想想怎么来实现。我这里用的是思路比较简单的方法(换言之,比较低级),来看看。

简单思路

这是我一直想要的,一直在研究的,现今做成了的一件事。但其实,这是一个曲线救国的方法,因为这里面应用了操控“鼠标”的方法。
环境:Linux Deepin 20 beta。
主要使用:xdotool——一个能“控制”你鼠标和键盘的命令,需要安装软件包。FFmpeg——一个底层的,处理音视频流的命令行程序,需要安装软件包。如果不确定自己有,最好装一下。

sudo apt-get update

sudo apt install xdotool

sudo apt install ffmpeg

注意!这只是用于我的电脑,你可以对照你的情况自己改。另外,没有图形界面的电脑要另想办法了。

    有了这两个工具,我们就可以写个shell脚本,用xdotool操纵鼠标逐步点击,开始直播。用FFmpeg推流到B站的直播间。然后在脚本里写上循环体,就可以循环推流了。
    由于我这个 电脑 / 服务器 是做了网络唤醒(用于定时开机)和定时关机的,所以我会把脚本放到cron定时任务里,让它开机自启。

就这几个



xdotool操纵键鼠

    主要用到这几个命令,这个工具还有许多强大的功能,你如果想了解,去网上搜搜看,同样有许多文章介绍地很详细。
1.显示当前鼠标的位置

xdotool getmouselocation

2.把光标移动到 x y 处,这里的位置你可以用上一条命令得到

xdotool mousemove x y

3.鼠标移动到x y处,并单击左键。

xdotool mousemove x y click 1

这里click 1是左键,click 2为滚轮下滑,click 3为右键,click 4为滚轮上滑。
如果要双击,可以写成

xdotool click 1 click 1

4.从键盘输入一串文字

xdotool type 'text'

5.敲击某一个按键。

xdotool key $[key]

敲回车为xdotool key Return,组合键xdotool key ctrl+Tab。
敲回车也可以写成:

xdotool type 'text

'




打开B站直播脚本

首先创建脚本autolive1.sh

#! /bin/bash

#get mouse location

xdotool getmouselocation

用于便捷地获取当前鼠标位置
然后是用于打开B站直播的脚本:

#! /bin/bash

#Test For Auto Start Live on Bilibili

sleep 7

xdotool type 'vhyimy@7805'

xdotool key Return

sleep 1

google-chrome-stable > /dev/null 2>&1 & #打开Google Chrome

sleep 5

xdotool type 'vhyimy@7805'

xdotool key Return

sleep 20

xdotool mousemove 169 92 click 1 #点击地址栏

sleep  1

xdotool type 'https://link.bilibili.com/p/center/index?visit_id=XXXXXXXXXX#/my-room/start-live'

xdotool key Return #键入地址,按下回车,等待其加载完成

sleep 30

xdotool mousemove 360 639 click 1 #点击选择分类

sleep 1

xdotool mousemove 576 333 click 1 #点击上次分类

sleep 1

xdotool mousemove 1357 763 click 1 click 1 #向下滚动

sleep 1

xdotool mousemove 406 704 click 1 #点击“开始直播”

sleep 1

#ps -ef | grep chrome | grep -v grep | cut -c 9-15 |xargs kill -9 #关闭Chrome进程,已弃用

#sleep 1

xdotool mousemove 1374 5 click 1 #关闭chrome窗口

sleep 2

xdotool mousemove 988 18 click 3

sleep 1

xdotool mousemove 1000 160 click 1 # 退出Chrome

我来解释地详细一点:

1.开机输入密码
    首先我的Deepin系统,为了运行这个脚本时不必开机输入密码,就设置了“无密码登录”和“自动登录”,这样开机没有密码就能进入桌面,但是“钥匙环”是需要密码来解锁的,开机就会弹出对话框,让你输入密码,所以前两句用于输入密码

sleep 7

xdotool type 'vhyimy@7805'

xdotool key Return

sleep 1

sleep 1表示停留1秒,用于防止前一步操作没有做完。

2.打开Chrome浏览器
google-chrome-stable > /dev/null 2>&1 & #打开Google Chrome

sleep 5

xdotool type 'vhyimy@7805'  #防止之前输入密码失败,这里再输入一次

xdotool key Return

sleep 20

    打开chrome用的命令google-chrome-stable > /dev/null 2>&1 &,写成这样是为了防止往屏幕输出信息,后边 &表示放入后台运行。

3.逐步打开B站的“开播设置”页面
xdotool mousemove 169 92 click 1 #点击地址栏

sleep  1

xdotool type 'https://link.bilibili.com/p/center/index?visit_id=XXXXXXXXXX#/my-room/start-live'; #这里换成你的“开播设置”页面

xdotool key Return #键入地址,按下回车,等待其加载完成

sleep 30

xdotool mousemove 360 639 click 1 #点击选择分类

sleep 1

xdotool mousemove 576 333 click 1 #点击上次分类

sleep 1

xdotool mousemove 1357 763 click 1 click 1 #向下滚动

sleep 1

xdotool mousemove 406 704 click 1 #点击“开始直播”

sleep 1

    为了不用登录,我是先前用浏览器登陆过B站的,而Deepin的密码存储在“钥匙环”里,这也是为什么我前面反复调整的原因,使得既不需要开机密码,又能保证这一步不用登录B站。
    这几行命令中,鼠标的位置,是需要你自己测试的,这只是适应我屏幕的按钮位置。

4.退出Chrome
#ps -ef | grep chrome | grep -v grep | cut -c 9-15 |xargs kill -9 #关闭Chrome进程,已弃用

#sleep 1

xdotool mousemove 1374 5 click 1 #关闭chrome窗口

sleep 2

xdotool mousemove 988 18 click 3 #右键状态栏的Chrome图标

sleep 1

xdotool mousemove 1000 160 click 1 # 退出Chrome

    注意第一行弃用了,因为这是用杀进程的方式关闭Chrome的,这会导致下次打开Chrome有崩溃提示,不利于反复操作,于是采用了和上面一样的“曲线救国”
的策略。其实上面的点击是可以化为console里发消息的,但是出于不会,所以没弄。




推流

采用FFmpeg推流,它的命令格式你可以去官网看文档
我是这么用的:

ffmpeg -re -i "/home/moonhikari/Videos/dong.flv"\            

-vcodec copy -preset veryfast -acodec aac -strict -2 -f flv \         

rtmp://XXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXX

-i后面的是你视频的路径,中间的为预设,最后一行为你B站的推流地址。不会变,需要你提前粘贴到脚本里来。
然后我打算一次推流有四个视频连着,顺次播放。然后再做成循环。成品在下面:

#! /bin/bash

#Auto FFmpeg Push   

for i in $(seq 7)

do

   echo Gen_Num: $i >>/home/moonhikari/sh/log/live.log #第几次循环,输出到日志

   echo live start time(date +'%F %T') >>/home/moonhikari/sh/log/live.log    ffmpeg -re -i "/home/moonhikari/Videos/dong.flv"\                     -vcodec copy -preset veryfast -acodec aac -strict -2 -f flv \           "rtmp://txy.live-send.acg.tv/live-txy/?        streamname=XXXXXXXXXXXXXXXXXXXX   

   echo End of $i-a time(date +'%F %T') >>/home/moonhikari/sh/log/live.log #第一个视频结束,时间

   ffmpeg -re -i "/home/moonhikari/Videos/zhong.flv"\                -vcodec copy -preset veryfast -acodec aac -strict -2 -f flv \            "rtmp://txy.live-send.acg.tv/live-txy/?streamname=XXXXXXXXXXXXXXXXXXXXXXXX   

echo End of $i-b time(date +'%F %T') >>/home/moonhikari/sh/log/live.log #二   

   ffmpeg -re -i "/home/moonhikari/Videos/bei.flv"\                -vcodec copy -preset veryfast -acodec aac -strict -2 -f flv \            "rtmp://txy.live-send.acg.tv/live-txy/?streamname=XXXXXXXXXXXXXXXXXXXXX   

echo End of $i-c time(date +'%F %T') >>/home/moonhikari/sh/log/live.log #三   

   ffmpeg -re -i "/home/moonhikari/Videos/pan.flv"\                -vcodec copy -preset veryfast -acodec aac -strict -2 -f flv \            "rtmp://txy.live-send.acg.tv/live-txy/?streamname=XXXXXXXXXXXXXXXXXXXXXXXXXXXX   

echo End of $i-d time(date +'%F %T') >>/home/moonhikari/sh/log/live.log #四   

echo End of all in Gen $i time(date +'%F %T') >>/home/moonhikari/sh/log/live.log #全部结束,时间输出到日志

done

就这些!






开始

放到定时任务里:

crontab -e

里面写上:

#auto_start_live

35 5 * * * DISPLAY=:0 /home/moonhikari/sh/autolive2.sh

#auto_start_push

37 5 * * * /home/moonhikari/sh/autolive3.sh

这个怎么写,规则去百度吧,简单来说就是:

crontab
这里我们不用指定谁来执行。

间隔两分钟,考虑了之前开启直播所需要的时间,这一点可以按需修改。

注意因为第一个脚本里会用到xdotool,所以前面加上DISPLAY=:0来使其在显示器上操作,这个怎么写,去百度吧,太多了。。。

如果能运行起来,那就万事大吉了,之后也可以看着改进。若有问题,仔细排查,祝你成功! 作者:marvel084 https://www.bilibili.com/read/cv5787951 出处:bilibili





回复

使用道具 举报

44

主题

67

回帖

292

积分

版主

Rank: 7Rank: 7Rank: 7

积分
292
QQ
发表于 2022-4-9 16:36:03 | 显示全部楼层
这个教程好耶 感谢
哔哩哔哩:我系诺旬
回复 支持 1 反对 0

使用道具 举报

0

主题

160

回帖

859

积分

高级会员

Rank: 4

积分
859
发表于 2022-4-10 00:18:05 | 显示全部楼层
谢谢分享,楼主辛苦了
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|盒子网 ( 粤ICP备2022074510号-1 ) 粤公网安备44190002006514号 .

GMT+8, 2024-5-18 19:08 , Processed in 0.055011 second(s), 23 queries .

Powered by Discuz! X3.4