基于Nginx服務器通過ffmpeg命令來進行推流
- 1.首先要在Mac下搭建Nginx+rtmp服務器,打開終端,直接復制,查看是否安裝了
Homebrew
man brew
如果已經(jīng)安裝了,會這么顯示,此時輸入Q退出即可, 直接進入第二步.反之, 如果沒有安裝,執(zhí)行命令

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
如果安轉(zhuǎn)之后想要卸載的話,輸入以下命令
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
- 2.安裝
nginx
先clone nginx項目到本地
brew tap homebrew/nginx
執(zhí)行安裝:
brew install nginx-full --with-rtmp-module
此時, nginx和rtmp模塊就安裝好了輸入命令:
nginx
在瀏覽器里打開http://localhost:8080,如果出現(xiàn)下面的圖,就表示安轉(zhuǎn)成功

- 3.配置
nginx和rtmp
brew info nginx-full
執(zhí)行完之后拖到最下面看到

可以看到
nginx的配置信息在/usr/local/etc/nginx/nginx.conf這個路徑,前往可以發(fā)現(xiàn)nginx.conf文件,可以用Xcode打開直接滾到最后一行
http {
……
}
#在http節(jié)點下面(也就是文件的尾部)加上rtmp配置:
rtmp {
server {
listen 1935;
application rtmplive {
live on;
record off;
}
}
}
rtmp是協(xié)議名稱
server說明內(nèi)部中是服務器相關配置
listen 監(jiān)聽的端口號,
rtmp協(xié)議的默認端口號是1935
application訪問的應用路徑是 rtmplive
live on 開啟實時
record off 不記錄數(shù)據(jù)
- 4.重啟
nginx(其中的1.10.2要換成你自己安裝的nginx版本號, 查看版本號用nginx -v命令即可)
/usr/local/Cellar/nginx-full/1.10.2/bin/nginx -s reload
- 5.安裝
ffmpeg
brew install ffmpeg
這個要等一會,我用了大概5分鐘左右,如果我沒有記錯的話是50.4M,下載完之后,再安裝一個支持 rtmp協(xié)議的視頻播放器VLC鏈接,下面就可以正式開始推流啦,命令中的1935是rtmp默認端口號,rtmplive是訪問的應用路徑,上面解釋的有。
ffmpeg -re -i /Users/xsx/Downloads/項目管理小知識系列之預算編制.mp4 -vcodec libx264 -acodec aac -strict -2 -f flv rtmp://localhost:1935/rtmplive/room
/Users/xsx/Downloads/項目管理小知識系列之預算編制.mp4是我桌面準備的一個用于推流的視頻,輸入命令之后會看到,文件一點一點被推到服務器。

然后打開VLC,File->open network->輸入:

然后就可以看到服務器一邊推流,VLC上面一邊播放。剛開始可能會有點延遲

- 6.額外補充:
6.1如果希望將桌面錄制或者分享,可以使用命令行如下:
首先查看ffmpeg是否支持對應的設備,在OSX下面,Video和Audio設備使用的是avfoundation,所以可以使用AVFoundation來查看
ffmpeg -f avfoundation -list_devices true -i ""

ffmpeg -f avfoundation -i "1" -vcodec libx264 -preset ultrafast -acodec libfaac -f flv rtmp://localhost:1935/rtmplive/home
然后就OK啦,效果如下:

6.2如果需要桌面+麥克風,比如一般做遠程教育分享 命令行如下:
ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/rtmplive/home
6.3.如果需要桌面+麥克風,并且還要攝像頭拍攝到自己,比如一般用于互動主播,游戲主播,命令行如下
ffmpeg -f avfoundation -framerate 30 -i "1:0" -f avfoundation -framerate 30 -video_size 640x480 -i "0" -c:v libx264 -preset slow -filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/rtmplive/home
我的出現(xiàn)了這樣的錯誤,說是不支持yuv420p格式的,目前正在解決中...

接下來介紹另外一種推流的方式:
利用LFLiveKit實現(xiàn)推流,這里參考了文章
- 推流前的工作是:采集,處理,編碼壓縮
- 推流中要做的是:封裝,上傳


** LFLiveKit **默認支持的格式是
RTMP和FLV同時,結(jié)構(gòu)也非常容易去延展.支持
- 后臺記錄
- 水平垂直記錄(橫屏和豎屏)
- 美顏
- H264 AAC硬編碼
- 弱網(wǎng)絡失幀
- 動態(tài)轉(zhuǎn)換速率
- 音頻視頻 音頻靜音配置
- PTMP轉(zhuǎn)換
- 切換攝像頭
- 支持發(fā)送緩沖區(qū)
- FLV包裝和發(fā)送
首先在你的項目里用CocoaPods集成
platform :ios, '8.0'
target 'LFLiveKit 視頻推流' do
pod 'LFLiveKit'
end
主要代碼是設置session配置AudioConfiguration和VideoConfiguration:
- (LFLiveSession *)session {
if (_session == nil) {
LFLiveAudioConfiguration *audioConfiguration = [LFLiveAudioConfiguration new];
audioConfiguration.numberOfChannels = 2;
audioConfiguration.audioBitrate = LFLiveAudioBitRate_128Kbps;
audioConfiguration.audioSampleRate = LFLiveAudioSampleRate_44100Hz;
LFLiveVideoConfiguration *videoConfiguration = [LFLiveVideoConfiguration new];
videoConfiguration.videoSize = CGSizeMake(1280, 720);
videoConfiguration.videoBitRate = 800*1024;
videoConfiguration.videoMaxBitRate = 1000*1024;
videoConfiguration.videoMinBitRate = 500*1024;
videoConfiguration.videoFrameRate = 15;
videoConfiguration.videoMaxKeyframeInterval = 30;
videoConfiguration.videoSizeRespectingAspectRatio = YES;
videoConfiguration.outputImageOrientation = UIInterfaceOrientationPortrait ;
videoConfiguration.sessionPreset = LFCaptureSessionPreset720x1280;
_session = [[LFLiveSession alloc]initWithAudioConfiguration:audioConfiguration videoConfiguration:videoConfiguration];
_session.running = YES;
_session.preView = self;
}
return _session;
}
開始直播:
LFLiveStreamInfo *stream = [LFLiveStreamInfo new];
stream.url = @"rtmp://10.118.164.64/rtmplive/room";
[_self.session startLive:stream];
結(jié)束直播
[_self.session stopLive];
然后運行,在VLC的File->open network->輸入rtmp://10.118.164.64/rtmplive/room
就可以同步直播了,左邊的是VLC上面的畫面,右邊的是我自己手機的畫面
