使用ffmpeg推流视频文件

使用ffmpeg推流的场景:

1. 我的机器配置烂死了,无法做到x264实时压制然后推流,我只想复制视频流放个片。

2. 我想在服务器上无人值守转播内容。

 

续接上篇文章:https://javascript.net.cn/article?id=551


ffmpeg -re -i 1.mp4 -vcodec copy -f flv rtmp://localhost/live
或者

ffmpeg -re -i 1.mp4 -vcodec copy -acodec copy
 -b:v 800k -b:a 32k -f flv rtmp://localhost/live

-re : 表示使用文件的原始帧率进行读取,因为ffmpeg读取视频帧的速度很快,如果不使用这个参数,ffmpeg可以在很短时间就把video.mp4中的视频帧全部读取完并进行推流,这样就无法体现出视频播放的效果了。官方文档中对这个参数的解释是:

-re (input)
Read input at native frame rate. Mainly used to simulate a grab device, or live input stream (e.g. when reading from a file). Should not be used with actual grab devices or live input streams (where it can cause packet loss). By default ffmpeg attempts to read the input(s) as fast as possible. This option will slow down the reading of the input(s) to the native frame rate of the input(s). It is useful for real-time output (e.g. live streaming).

-vcodec copy : -vcodec表示使用的视频编解码器 ,前缀v表示video。后面紧跟的copy 表示复制使用源文件的视频编解码器,比如原文件的编解码器(codec)是h264,则这里就使用h264。

-acodec copy : -acodec表示使用的音频编解码器,前缀a表示audio。后面的copy 表示使用源文件的音频编解码器。

-b:v 800k : -b:v表示视频的比特率(bitrate) ,为800k。

-b:a 32k : 表示音频的比特率为32k。

-f flv : -f表示format ,就是强制输出格式为flv,这一步其实也叫封装(mux),封装要做的事就是把视频和音频混合在一起,进行同步。紧跟在后面的rtmp://localhost/live 表示输出的"文件名",这个文件名可以是一个本地的文件,也可以指定为rtmp流媒体地址。指定为rtmp流媒体地址后,则ffmpeg就可以进行推流。


参考:

https://www.jianshu.com/p/ddafe46827b7

https://zhuanlan.zhihu.com/p/23951969

修改时间 2019-03-28

真诚赞赏,手留余香
赞赏
随机推荐
2018.1.26 Night King
CentOS 常用文件操作
CentOS 8 安装 Apache 和 PHP
jQuery Mobile 1.4.5实现类似微信的弹出提示
JavaScript中函数参数的值传递和引用传递
Vuex中的信息,刷新页面后,数据没有了的解决方案
Wordpress 添加主题自定义字段设置面板
实现Thinkcmf面包屑导航
重构:互联网公司的政治斗争和大清洗
为什么 PDO 无法捕获异常