使用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

真诚赞赏,手留余香
赞赏
随机推荐
thinkphp 3.1.3 添加项目分组
OS X 中怎样快速调出终端?
Wordpress 添加主题自定义字段设置面板
Vue和Ajax的关系,Axios简介
npm国内镜象设置的三种方法
加载占位图 Skeleton Screen Loading
JavaScript 的深复制和浅复制
Angular和React简单对比
使用FormData无刷新上传文件
macOS下禁止Chrome更新
QQ号

微信联系我

夜间模式切换
回到顶部