以B站推流为例,运用ffmpeg推流的各种操作-3_# 安装ffmpeg & Ubuntu云服务器用ffmpeg推送视频篇

第一步

升级服务器安装工具

sudo apt-get update 

第二步

安装ffmpeg

sudo apt-get install ffmpeg

第三步:在winscp上登录云后将想要直播的文件传到云端(只要打开了22端口就可以用putty或winscp访问服务器,一般在阿里云的防火墙规则处设置端口)
设文件位置为/root/Vedio/BB1.mp4

第四步(ffmpeg直播使用)

  1. 起步姿态:单文件直播
ffmpeg -re -i "/root/Vedio/F2.flv" -vcodec copy -acodec aac -strict -2 -f flv "rtmp://txy.live-send.acg.tv/live-txy/?streamname=live_XXXXXX_XXXXXX"

其中
-i 后的/root/Vedio/F2.flv为服务器文件路径,也可以是其他直播的直播流m3u8地址
==-re 按照视频的FPS进行推流,如果不加这个参数的话……反正不行。
-acodec aac == 设置音频编码为aac
-vcodec copy 设定视频编码与原视频相同
最后 rtmp://txy.live-send.acg.tv/live-txy/?streamname=live_XXXXXXXXX
其中:rtmp://txy.live-send.acg.tv/live-txy/
以及:
?streamname=live_XXXXXX_XXXXXXX&key=XXXXXXXXX

来自
B站直播间
B站实名认证后,选择好播放类型后,点击开始直播便会生成
在这个界面可以管理打开或关闭直播
注意:魔法上网工具需设置为直连或PAC
实名认证比较烦,但是为维护文明上网必不可少
假如视频不是x264格式会有警告,影响不大,想解决可以把原视频用Arctime或小丸工具箱转一下
B站直播间

  1. 循环播放设置
    参考来自
https://blog.csdn.net/cai6811376/article/details/74783269

循环命令使用-stream_loop会出现

 Option "-stream_loop" unrecognized

找到原因是因为 低版本Ubuntu无法识别循环命令来自 此网址
(注意,阿里云默认安装版本为,升级版本,这里直接依据这里的默认安装最高版本,查看Ubuntu内核版本)
参考;来自此网址

cat /etc/issue

升级系统版本,参考依据此Linux公社

sudo apt install update-manager-core
sudo do-release-upgrade

注意:
升级过程会遇到许多对话框,全部y然后enter,会有一个特殊对话框,上下键选择最上面一个即可
升级的最后一步需要restart重启,假如使用远程连接会断开一会

循环直播单个文件代码:

ffmpeg -re  -stream_loop -1 -i "/root/Vedio/BB1.mp4" -vcodec copy -acodec aac -strict -2 -f flv "rtmp:XXXXXXXXXXX"

其中 -stream_loop -1便是让其可以循环推流的命令
升级Ubuntu教程可以参考

  1. 将其他直播源直播(参考网址)
    简单些的直播网页直接F12调出开发者模式,选择到Network下的All信息流,然后在搜索框输入m3u8,然后5刷新一下就可以得到直播流的网址
    但是
    很多网站对直播流做了处理,不太好获取,有时获取到的是错误链接,有时获取的是但有音频的直播流,如何避开坑这里说不清,可以参考这上面的视频
    在不确定获取的是不是需要的直播流链接,可以打开potplayer(一款很好用的播放器,随便搜索就可以找到安装包),右键调出选项,选择打开中的打开链接选项,然后粘贴链接到对话框即可
    而且,在获取B站直播源时,发现即使是正确的直播源链接,在播放器可以打开,但是还是无法在B站直播,不知为何,处理去掉了链接中的客户端限制也不行,可能是B站不允许套娃,这里目前不知道为何
    成功例子
ffmpeg -i "http://cctvalih5ca.v.myalicdn.com/live/cctv2_2/index.m3u8" -c:v copy -c:a aac -b:a 320k -ar 44100 -strict -2 -f flv "rtmp://txXXXXX"
  1. 剪辑视频(准确起止时间、无编码变化快速切割)参考网址
    代码
ffmpeg -ss 00:00:00 -i /root/Vedio/BB2.mp4 -c copy -t  00:23:31 output.mp4

其中:

-ss: 起始时间
注意: -ss要放在-i之前
-i: 要分割的是频文件
-t: 分割时长:格式如下
可以是-t xx -> xx秒
也可以是-t 01:00:00 -> 时:分:秒,且不是视频中的时刻,而是要向后截取多长的视频
举例
若一个视频需要分成 3 段,具体分割位置为视频中的 Start~01:17:55,01:17:55~02:06:50,02:06:50~End

则可以:
ffmpeg -ss 00:00:00 -i sample_Input.mp4 -c copy -t 01:17:55 sample_Output-part1.mp4 #Start~01:17:55
ffmpeg -ss 01:17:56 -i sample_Input.mp4 -c copy -t 00:48:57 sample_Output-part2.mp4 #01:17:55~02:06:50
ffmpeg -ss 02:06:55 -i sample_Input.mp4 -c copy -t 01:11:48 sample_Output-part3.mp4 #02:06:50~End
可以试试,速度很快
另外,想快速切割视频为多份可以使用BoilsoftVideoSplitter这个软件
5. 服务器中Screen使用
screen命令为Ubuntu内部自带,可以让服务器现在进行的进程在关闭远程连接后继续进行,比如你在新Screen里推流成功后,电脑关机离线了后,云服务器还可以继续推流

screen -S name

启动一个名字为name的screen
其实假如直接用字符‘name’系统会自动分配一个随机数字加.nsme,比如1122.name进程,想知道现在服务器的所有screen进程时,使用

screen -ls

需要关闭某screen时,使用

screen -S name -X quit

可以让服务器现在进程在关闭远程连接后继续进行,就是你在新Screen里推流成功后,电脑关机离线了后,云服务器还可以继续推流
下次打开服务器时,打开的screen进程时默认关闭的,想要打开需要用

screen -r name

6.进阶用法 多文件自动续播及自动循环播放
用bash命令与循环命令来实现,同时搭配Winspcp来写入文件
下面代码感谢@一只不愿透露姓名的猫:

while true
do
for i in ./*.mp4
do
ffmpeg -re -i "$i" -c copy -f flv "rtmp://txy.live-send.acg.tv/live-txy/?streamname=live_232670856_9449243&key=6c4e26928342b910be48404c7309bbc2"
done
done

用法:将代码复制后新建一个文本文档中,如txt结尾的文档,将代码粘贴到里面,用winscp传到需要直播的文件夹里后,例如文件名为tl.txt,
winscp用法
winscp是一款很方便的文件传输工具,轻松在本地与服务器之间传输文件
以B站推流为例,运用ffmpeg推流的各种操作-3_# 安装ffmpeg & Ubuntu云服务器用ffmpeg推送视频篇_第1张图片
上图为新建对话以连接服务器
下图为软件界面
以B站推流为例,运用ffmpeg推流的各种操作-3_# 安装ffmpeg & Ubuntu云服务器用ffmpeg推送视频篇_第2张图片

在用cd命令进入到所在文件夹后(例如绝对路径为/root/vedio/tl.txt)

cd /root/vedio/tl.txt

之后bash命令使得tl.txt中命令自动运行

bash tl.txt

—————————————————结束分割线—————————————————————
每一分我都当作是你十分的喜欢(❤ ω ❤)在这里插入图片描述

你可能感兴趣的:(ffmpeg,服务器,网络,ubuntu,linux)