在Mac上安裝nginx
為什么要在Mac上安裝nginx,是因?yàn)樵趎ginx上有支持rtmp協(xié)議的模塊,比較容易實(shí)現(xiàn)rtmp協(xié)議。其他其服務(wù)只要能實(shí)現(xiàn)rtmp協(xié)議都可以,但由于nginx實(shí)現(xiàn)起來(lái)方便所以這里使用nginx來(lái)做直播的服務(wù)。
我們用brew命令來(lái)安裝nginx,請(qǐng)先確保你的Mac上已經(jīng)安裝了homebrew,如果沒(méi)有安裝可以訪問(wèn)homebrew的官網(wǎng)https://brew.sh/index_zh-cn.html 下載安裝,也可以在終端中運(yùn)行以下命令安裝:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安裝完homebrew后在終端中運(yùn)行以下命令安裝nginx。
// 將nginx下載到本地
brew tap homebrew/nginx
// 安裝nginx服務(wù)器
brew install nginx-full --with-rtmp-module
// 開(kāi)啟服務(wù)器
nginx
配置nginx服務(wù)
// 用vim打開(kāi)配置文件
vim /usr/local/etc/nginx/nginx.conf
rtmp {
server {
listen 1935; // 設(shè)置對(duì)應(yīng)的端口
application mylive {
live on;
record off; // 不記錄數(shù)據(jù)
}
}
}
// 添加完信息要重新加載文件才能用
nginx -s reload
安裝FFmpeg
其實(shí)經(jīng)過(guò)以上步驟直播服務(wù)已經(jīng)搭建好了,我們以下的操作都是驗(yàn)證我們的成果的,我們要安裝一個(gè)FFmpeg的第三方庫(kù)用來(lái)實(shí)現(xiàn)推流。
// 安裝ffmpeg
brew install ffmpeg
實(shí)現(xiàn)對(duì)視頻文件的直播的推流
ffmpeg -re -i /Users/liuxiaoliang/Desktop/720.m4v -vcodec libx264 -acodec aac -strict -2 -f flv rtmp://localhost:1935/mylive/room
也可以將里面的參數(shù)簡(jiǎn)寫(xiě)
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是你視頻文件的路徑,請(qǐng)根據(jù)自己視頻文件的位置更改。最后跟的rtmp://localhost:1935/mylive/room是我的推流的地址?,F(xiàn)在運(yùn)行命令后如果出現(xiàn)如下圖推流的數(shù)據(jù)包信息就說(shuō)明推流成功了。

實(shí)現(xiàn)拉流
為了方便測(cè)試我們利用vlc播放器來(lái)實(shí)現(xiàn)拉流,Mac端可以在vlc的官網(wǎng)下載Mac端的播放器,對(duì)于iOS端可以在iOS手機(jī)的AppStore上下載vlc播放器。
以手機(jī)為例,在手機(jī)的vlc播放器的網(wǎng)絡(luò)串流內(nèi)輸入拉流的地址,其實(shí)和上面推流是同一個(gè)地址只是這里要把localhost替換成Mac電腦上的ip地址(在Mac上實(shí)現(xiàn)拉流可不用替換),并確保Mac電腦與手機(jī)在同一個(gè)局域網(wǎng)內(nèi)。
// 在vlc播放器中輸入以下地址就可看到拉流視頻,如果在手機(jī)上記錄把localhost替換成Mac上的ip地址,
rtmp://localhost:1935/mylive/room



實(shí)現(xiàn)電腦桌面直播
我們還可以將電腦桌面的圖像推流傳出去。不過(guò)首先我們得先獲取電腦上的輸入硬件信息,在終端執(zhí)行以下命令獲取硬件信息,以確定用哪個(gè)硬件作為視頻圖像的輸入。
// 獲取Mac上的輸入設(shè)備的列表
ffmpeg -f avfoundation -list_devices true -i ""

我們看到電腦屏幕的序號(hào)是1,所以我們執(zhí)行以下命令。
// 向服務(wù)器電腦桌面的圖像信息
ffmpeg -f avfoundation -i "1" -vcodec libx264 -f flv rtmp://localhost:1935/mylive/room
上面的方法只有圖像沒(méi)有聲音,想要聲音可用以下命令
ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/rtmplive/room

用電腦的攝像頭獲取圖像并進(jìn)行推流
總感覺(jué)前面不像一個(gè)完整的直播是吧?因?yàn)闆](méi)有用到攝像頭,下面我們就用電腦的攝像頭獲取圖像然后進(jìn)行推流??梢杂靡韵旅?/p>
// 設(shè)置幀率為30幀,圖像大小為320x240
ffmpeg -f avfoundation -framerate 30 -video_size 320x240 -i "0" -vcodec libx264 -f flv rtmp://localhost:1935/mylive/room
上面的命令是沒(méi)有聲音的,下面是加上聲音的命令
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

電腦屏幕和攝像頭同時(shí)推流
有時(shí)我們直播電腦桌面的時(shí)候還要有攝像頭,可以用以下命令
// 實(shí)現(xiàn)電腦桌面和攝像頭同時(shí)直播
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
