在Mac上安装nginx
为什么要在Mac上安装nginx,是因为在nginx上有支持rtmp协议的模块,比较容易实现rtmp协议。其他其服务只要能实现rtmp协议都可以,但由于nginx实现起来方便所以这里使用nginx来做直播的服务。
我们用brew命令来安装nginx,请先确保你的Mac上已经安装了homebrew,如果没有安装可以访问homebrew的官网https://brew.sh/index_zh-cn.html 下载安装,也可以在终端中运行以下命令安装:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装完homebrew后在终端中运行以下命令安装nginx。
// 将nginx下载到本地
brew tap homebrew/nginx
// 安装nginx服务器
brew install nginx-full --with-rtmp-module
// 开启服务器
nginx
配置nginx服务
// 用vim打开配置文件
vim /usr/local/etc/nginx/nginx.conf
rtmp {
server {
listen 1935; // 设置对应的端口
application mylive {
live on;
record off; // 不记录数据
}
}
}
// 添加完信息要重新加载文件才能用
nginx -s reload
安装FFmpeg
其实经过以上步骤直播服务已经搭建好了,我们以下的操作都是验证我们的成果的,我们要安装一个FFmpeg的第三方库用来实现推流。
// 安装ffmpeg
brew install ffmpeg
实现对视频文件的直播的推流
ffmpeg -re -i /Users/liuxiaoliang/Desktop/720.m4v -vcodec libx264 -acodec aac -strict -2 -f flv rtmp://localhost:1935/mylive/room
也可以将里面的参数简写
ffmpeg -re -i /Users/liuxiaoliang/Desktop/720.m4v -c:v libx264 -c:a aac -strict -2 -f flv rtmp://localhost:1935/mylive/room
上面的命令/Users/liuxiaoliang/Desktop/720.m4v是你视频文件的路径,请根据自己视频文件的位置更改。最后跟的rtmp://localhost:1935/mylive/room是我的推流的地址。现在运行命令后如果出现如下图推流的数据包信息就说明推流成功了。
实现拉流
为了方便测试我们利用vlc播放器来实现拉流,Mac端可以在vlc的官网下载Mac端的播放器,对于iOS端可以在iOS手机的AppStore上下载vlc播放器。
以手机为例,在手机的vlc播放器的网络串流内输入拉流的地址,其实和上面推流是同一个地址只是这里要把localhost替换成Mac电脑上的ip地址(在Mac上实现拉流可不用替换),并确保Mac电脑与手机在同一个局域网内。
// 在vlc播放器中输入以下地址就可看到拉流视频,如果在手机上记录把localhost替换成Mac上的ip地址,
rtmp://localhost:1935/mylive/room
实现电脑桌面直播
我们还可以将电脑桌面的图像推流传出去。不过首先我们得先获取电脑上的输入硬件信息,在终端执行以下命令获取硬件信息,以确定用哪个硬件作为视频图像的输入。
// 获取Mac上的输入设备的列表
ffmpeg -f avfoundation -list_devices true -i ""
我们看到电脑屏幕的序号是1,所以我们执行以下命令。
// 向服务器电脑桌面的图像信息
ffmpeg -f avfoundation -i "1" -vcodec libx264 -f flv rtmp://localhost:1935/mylive/room
上面的方法只有图像没有声音,想要声音可用以下命令
ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/rtmplive/room
用电脑的摄像头获取图像并进行推流
总感觉前面不像一个完整的直播是吧?因为没有用到摄像头,下面我们就用电脑的摄像头获取图像然后进行推流。可以用以下命令
// 设置帧率为30帧,图像大小为320x240
ffmpeg -f avfoundation -framerate 30 -video_size 320x240 -i "0" -vcodec libx264 -f flv rtmp://localhost:1935/mylive/room
上面的命令是没有声音的,下面是加上声音的命令
ffmpeg -f avfoundation -framerate 30 -video_size 320x240 -i "0:0" -vcodec libx264 -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/mylive/room
电脑屏幕和摄像头同时推流
有时我们直播电脑桌面的时候还要有摄像头,可以用以下命令
// 实现电脑桌面和摄像头同时直播
ffmpeg -f avfoundation -framerate 30 -i "1:0" -f avfoundation -framerate 30 -video_size 320x240 -i "0" -vcodec libx264 -filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/mylive/room