ffmpeg命令行可以很方便地进行rtmp直播推流。
1 安装nginx服务
注意不能直接安装,一定要安装带rtmp模块的,否则会报rtmp找不到的错误。
安装有两种方式,一是自己编译安装,我没有采用;另一种是安装配置好的,用下面这篇教程的方法:
https://www.jianshu.com/p/cff04bb3c182
这两句命令即可安装成功,很方便。
brew tap denji/homebrew-nginx
brew install nginx-full --with-rtmp-module
启动
安装后用 nginx
命令即可启动,打开浏览器输入 localhost:8080 可以看到网页。
配置rtmp
修改 nginx.conf 文件,在 /opt/homebrew/etc/nginx/nginx.conf 这个位置
在里面加上rtmp配置,表示监听1935端口,服务名是live,rtmp推流地址是
rtmp://127.0.0.1:1935/live
...
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
}
}
}
http {
...
2 视频文件推流
先推个视频文件试试,找个flv格式视频(没有的话用ffmpeg转一个),这样可以直接推流了
ffmpeg -re -i 001.flv -f flv rtmp://127.0.0.1:1935/live
播放
本机播放:用ffplay
ffplay rtmp://127.0.0.1:1935/live
局域网播放:查一下本机局域网地址,我的是192.168.3.9,找一个流媒体播放器(电脑端可以用vlc播放器,移动端市场搜一下播放器有很多),在同一WIFI下输入地址rtmp://192.168.3.9:1935/live
就可以播放
3 摄像头/屏幕推流
上一篇ffmpeg mac录屏介绍了用ffmpeg录制mac电脑摄像头的命令
ffmpeg -video_size 1280x720 -framerate 30 -f avfoundation -i "0:0" output.mkv
把它稍微修改一下,把输出文件 output.mkv 换成推流地址试试
ffmpeg -video_size 1280x720 -framerate 30 -f avfoundation -i "0:0" rtmp://127.0.0.1:1935/live
发现会报两个错误,一是图像格式不对,二是找不到输出格式
[avfoundation @ 0x12f809e00] Selected pixel format (yuv420p) is not supported by the input device.
[avfoundation @ 0x12f809e00] Supported pixel formats:
[avfoundation @ 0x12f809e00] uyvy422
[avfoundation @ 0x12f809e00] yuyv422
[avfoundation @ 0x12f809e00] nv12
[avfoundation @ 0x12f809e00] 0rgb
[avfoundation @ 0x12f809e00] bgr0
[avfoundation @ 0x12f809e00] Overriding selected pixel format to use uyvy422 instead.
[NULL @ 0x12880cc00] Unable to find a suitable output format for 'rtmp://127.0.0.1:1935/live'
rtmp://127.0.0.1:1935/live: Invalid argument
用-pixel_format uyvy422
设置需要的图像格式,用-f flv
指定输出格式
ffmpeg -video_size 1280x720 -framerate 30 -f avfoundation -pixel_format uyvy422 -i "0:0" -f flv rtmp://127.0.0.1:1935/live
加上这两个参数运行后变成另一个错误了:
Input #0, avfoundation, from '0:0':
Duration: N/A, start: 208627.169433, bitrate: N/A
Stream #0:0: Video: rawvideo (UYVY / 0x59565955), uyvy422, 1280x720, 30 tbr, 1000k tbn, 1000k tbc
Stream #0:1: Audio: pcm_f32le, 48000 Hz, mono, flt, 1536 kb/s
[adpcm_swf @ 0x12f80ec00] Sample rate must be 11025, 22050 or 44100
这是说音频采样率不对,硬件输入的是48000的音频,而编解码只支持 11025, 22050 or 44100 这几种,那么用-ar 44100
指定一下音频采样率,注意它的位置要放到"0:0"
后面
ffmpeg -video_size 1280x720 -framerate 30 -f avfoundation -pixel_format uyvy422 -i "0:0" -ar 44100 -f flv rtmp://127.0.0.1:1935/live
这样可以成功推流了!用播放器可以实时观看摄像头画面。
把参数"0:0"
换成"1:0"
,表示用屏幕内容推流,可以实时播放屏幕内容,相当于投屏了。
ffmpeg 命令行功能非常强大,它的参数很容易更换,并且能准确报错,说明它的设计非常严谨合理。
推流播放有一个问题,声音很小,在手机上播放完全没有声音,可能是编解码格式导致的。我看的几乎所有博客都用了x264编解码器,我暂时没编译安装,等以后装好了再试试。
网友评论