iOS直播技术iOS学习iOS 开发每天分享优质文章

在Mac上自己搭建直播服务器

2017-06-02  本文已影响1408人  wosicuanqi

在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 ""
Mac电脑可输入设备信息.png

我们看到电脑屏幕的序号是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
屏幕截屏
上一篇下一篇

猜你喜欢

热点阅读