上一篇文章說了如何去播放別人的視頻缸血,現(xiàn)在講講推流埋哟,第一次讀快速集成iOS基于RTMP的視頻推流的時(shí)候煞赢,一臉懵逼,不知道說的是什么.
說說推流是干啥的,說白了,就是我當(dāng)主播支鸡,你來看棚菊,將我的視頻码邻,實(shí)時(shí)傳輸?shù)礁魑挥^眾的終端,現(xiàn)在有一個(gè)比較好的開元框架奏甫,叫做LFLiveKit,是優(yōu)酷開源的色乾,內(nèi)部集成了
GPUImage
和推流的功能,可以拿來就用,一個(gè)接口就好,非常方便,但是在其中遇見一個(gè)小事故宵蛀,就是我沒有開啟Privacy - Camera Usage Description
和Privacy - Microphone Usage Description
,導(dǎo)致進(jìn)入到直播界面就崩潰,還沒有任何提示~~,第二天晚上我才找到了問題所在,各位如果使用的時(shí)候,千萬要先去把ios10的相關(guān)配置處理好.
集成RTMP的視頻推流
我們做demo侥猬,上傳視頻荤胁,至少要有個(gè)服務(wù)器是不圆丹?沒有就自己搭建一個(gè)
Mac搭建nginx+rtmp服務(wù)器
1.打開終端,查看是否安裝Homebrew,直接終端輸入命令
man brew
2.如果Mac已經(jīng)安裝了, 會(huì)顯示一些命令的幫助信息,我們就可以繼續(xù)第三步了~,如果沒有责球,去安裝一下
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
如果想去卸載,可以這樣
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
三. 安裝完畢,開始安裝nginx
3.1 先clone nginx項(xiàng)目到本地
brew tap homebrew/nginx
3.2 執(zhí)行安裝命令
brew install nginx-full --with-rtmp-module
3.3 nginx和rtmp模塊安裝好了
輸入命令:
nginx
4.在服務(wù)器中輸入 http://localhost:8080
5.配置nginx和ramp
5.1 看看 nginx 安裝到哪了
brew info nginx-full
5.2 直接滾到最后一行, 在最后一個(gè)}(即最后的空白處, 沒有任何{})后面添加
# 在http節(jié)點(diǎn)后面加上rtmp配置:
rtmp {
server {
listen 1935;
application rtmplive {
live on;
record off;
}
}
}
5.3 然后重啟nginx
(其中的1.10.1
要換成你自己安裝的nginx
版本號(hào), 查看版本號(hào)用nginx -v
命令即可)
/usr/local/Cellar/nginx-full/1.10.1/bin/nginx -s reload
5.4 如果出現(xiàn)問題,建議卸載慎冤,然后再去安轉(zhuǎn)
//卸載nginx
brew uninstall nginx
再次安裝nginx
brew install nginx-full --with-rtmp-module
6.安裝ffmpeg
6.1 執(zhí)行命令
brew install ffmpeg
安裝ffmpeg時(shí)間就要長一點(diǎn)了. 如果速度過慢, 建議翻墻. 不過也才50多M的東西, 耐心一點(diǎn)就好. 等待的時(shí)間里, 再安裝一個(gè)支持
rtmp
協(xié)議的視頻播放器VLC
七、使用ffmepg推流測(cè)試
此時(shí)此刻颅崩,你去推流喉刘,估計(jì)是要被拒絕rtmp://localhost:1935/rtmplive/room 提示refuse
,因?yàn)檫€沒有開啟服務(wù)器
執(zhí)行代碼备绽,開啟服務(wù)器
brew services start homebrew/nginx/nginx-full
7.1 將本地的視頻倍靡,推送到服務(wù)器,通過vlc觀看視頻
基本的格式
ffmpeg -re -i (視頻全路徑) -vcodec copy -f flv (rtmp路徑)
//解釋一下
(視頻全路徑) ===》/Users/wangxin/Desktop/bilibili.mp4
(rtmp路徑) ===》 rtmp://localhost:1935/rtmplive/room
例如:
//這個(gè)位置的1935和rtmplive一定要和你之前寫的對(duì)應(yīng)哈~不然一直顯示找不到地址
ffmpeg -re -i /Users/wangxin/Desktop/bilibili.mp4 -vcodec copy -f flv rtmp://localhost:1935/rtmplive/room
7.2 將視頻推流到服務(wù)器后,打開VLC顾孽,然后File->open network->輸入:
rtmp://localhost:1935/rtmplive/room
一定是先推送,然后再去查看~肃晚,如果推送完了,你再去看落剪,也是沒有的,就像直播一樣,你直播完畢了稠肘,人家再去找你,肯定是結(jié)束了沒有了
搜索代碼粥谬,替換服務(wù)器的地址即可實(shí)現(xiàn)直播的效果
//這個(gè)是直播的時(shí)候一也,上傳
- (IBAction)startPlayer:(UIButton *)btn {
btn.selected = !btn.selected;
if (btn.selected) {
LFLiveStreamInfo *streamInfo = [LFLiveStreamInfo new];
//將地址改成你的自己的服務(wù)器地址就好了
streamInfo.url = @"rtmp://192.168.1.102:1935/rtmplive/room";
self.tempUrl = streamInfo.url;
[self.session startLive:streamInfo];
}else{
[self.session stopLive];
self.statusLabel.text = [NSString stringWithFormat:@"狀態(tài): 直播被關(guān)閉\nRTMP: %@", self.tempUrl];
}
}
如果想實(shí)現(xiàn)一個(gè)手機(jī)直播,一個(gè)手機(jī)收看她奥,也是可以的,,替換收看的接口即可
//9.當(dāng)前的播放器
IJKFFOptions *options = [IJKFFOptions optionsByDefault];
[options setPlayerOptionIntValue:1 forKey:@"videotoolbox"];
// 幀速率(fps) (可以改膝藕,確認(rèn)非標(biāo)準(zhǔn)楨率會(huì)導(dǎo)致音畫不同步,所以只能設(shè)定為15或者29.97)
[options setPlayerOptionIntValue:29.97 forKey:@"r"];
// -vol——設(shè)置音量大小,256為標(biāo)準(zhǔn)音量俺陋。(要設(shè)置成兩倍音量時(shí)則輸入512,依此類推
[options setPlayerOptionIntValue:512 forKey:@"vol"];
//替換liveM.flv成你的服務(wù)器地址焚辅,兩個(gè)手機(jī)湾蔓,就可以一個(gè)直播,一個(gè)收看了~基本的項(xiàng)目就算完畢了
self.moviePlayer = [[IJKFFMoviePlayerController alloc] initWithContentURLString:liveM.flv withOptions:options];
```
####簡單說說`LFLiveKit`
> 1.要記得適配ios10的`Privacy - Camera Usage Description`和`Privacy - Microphone Usage Description`否則可能奔潰還沒有提示
> 2.`_session.preView = self.livingPreView;`,我的`livingPreView`給錯(cuò)了魂贬,用weak修飾裙顽,導(dǎo)致了不顯示付燥,切記,要用strong
本文參考自[快速集成iOS基于RTMP的視頻推流](http://www.reibang.com/p/8ea016b2720e)愈犹,[推酷:Mac搭建nginx+rtmp服務(wù)器](http://www.tuicool.com/articles/muya6rz)