一般的直播网站都使用OBS推流,其实ffmpeg也可以推流,在无界面环境下就可以推流使用。本文以Windows下为例,简单介绍下使用ffmpeg工具推流的方法和步骤。
下载安装
下载地址:https://ffmpeg.zeranoe.com/builds/
选择版本(默认即可),选择自己系统架构,Linking 选择 static
,点击Download Build下载压缩包。解压bin目录的三个exe程序到任意目录
- ffmpeg.exe
ffmpeg主程序,转码工具
- ffplay.exe
媒体播放工具,可播放本地视频以及网络视频
- ffprobe.exe
媒体探测工具,可探测媒体信息,如编码信息等
CMD切换到 EXE 该目录即可使用。也可以将三个exe解压到系统 Windows
目录下,方便全局访问。
命令行推流
推流摄像头,首先需要本机有音视频采集设备,可通过查询本机音视频设备名称
ffmpeg.exe -list_devices true -f dshow -i dummy |
查询后类似以下输出
[dshow @ 0496a480] DirectShow video devices |
注意上面的音频设备名称 楹﹀厠椋?(USB2.0 MIC)
乱码(字符编码不同导致,实为 ‘麦克风’ ),如果乱码可在设备管理器查询,最终可知当前机器的音视频设备名称为 USB2.0 PC CAMERA
及 麦克风 (USB2.0 MIC)
。
使用上述设备进行推流,命令如下
ffmpeg -f dshow -i video="USB2.0 PC CAMERA":audio="麦克风 (USB2.0 MIC)" \ |
不需要音频的命令如下
ffmpeg -f dshow -i video="USB2.0 PC CAMERA" -vcodec libx264 \ |
上述推流默认参数可能比较低,如果需要对某些参数进行配置优化,相应的命令行参数如下
- -r 设置帧率,命令为
-r 25
,全拼写为-framerate 25
- -s 设置分辨率,命令为
-s 640x480
,全拼为-video_size 640x480
- -b 设置码率,命令为
-b 1M
,相当于1024kbps,全拼为-bitrate 1M
,可配置小数- 其中 -b:a 可单独设置音频 -b:v 可单独设置视频
- -bufsize 设置码率控制缓冲器的大小 ,让码率非常平稳,如设置尽量与
-b
相同- 需要视频码流平稳的使用此参数,不需要设置 maxrate 和 minrate
- 同理,需要抖动的话设置 maxrate 和 minrate,不需要设置 bufsize
- -maxrate 可设置最大码率,可配置小数,如
-maxrate 1.5M
- -minrate 可设置最小码率,可配置小数,如
-minrate 1.5M
- -preset:v 视频H264配置参数,如
-preset:v ultrafast
- -tune:v 视频H264配置参数,如
-tune:v zerolatency
- -g 设置H264的GoP大小,即I帧间隔,如
-g 50
比如以25帧推送640x480分辨率的摄像头
ffmpeg -r 25 -f dshow -i video="USB2.0 PC CAMERA":audio="麦克风 (USB2.0 MIC)" \ |
带控制码率(码率波动平稳)的命令行示例如下
ffmpeg -r 25 -f dshow -i video="USB2.0 PC CAMERA":audio="麦克风 (USB2.0 MIC)" \ |
其他
在推流时候,有时候设置自定义帧率后发现ffmpeg会产生大量警告,如
Past duration 0.xxxxx too large |
出现这种现象只需要将指定帧率的命令放到设备之前,如 ffmpeg.exe -r 25 -fdshow -i ...