【目錄】
- 如何開(kāi)發(fā)出一款仿映客直播APP項(xiàng)目實(shí)踐篇 -【原理篇】
- 如何開(kāi)發(fā)出一款仿映客直播APP項(xiàng)目實(shí)踐篇 -【采集篇 】
- 如何開(kāi)發(fā)出一款仿映客直播APP項(xiàng)目實(shí)踐篇 -【服務(wù)器搭建+推流】
- 如何開(kāi)發(fā)出一款仿映客直播APP項(xiàng)目實(shí)踐篇 -【播放篇】
前言:有了服務(wù)器的構(gòu)建 ,就可以將手機(jī)端采集視頻傳輸?shù)椒?wù)器 ,可以在從服務(wù)器拉流,實(shí)現(xiàn)直播,延遲大約3-4秒!
效果圖

Mac搭建nginx+rtmp服務(wù)器
參考推酷:Mac搭建nginx+rtmp服務(wù)器
步驟:
打開(kāi)終端, 查看是否已經(jīng)安裝了Homebrew (Mac上好用的第三方安裝管理工具), 直接終端輸入命令
man brew
如果Mac已經(jīng)安裝了, 會(huì)顯示一些命令的幫助信息. 此時(shí)輸入Q退出即可, 直接進(jìn)入第二步.反之, 如果沒(méi)有安裝,執(zhí)行命令(命令行已更到最新 )
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
如果安裝后, 想要卸載
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)
一、【安裝nginx+rtmp服務(wù)器】
先clone nginx項(xiàng)目到本地
brew tap homebrew/nginx
執(zhí)行安裝:
brew install nginx-full --with-rtmp-module
此時(shí), nginx和rtmp模塊就安裝好了輸入命令:
nginx
在瀏覽器里打開(kāi)http://localhost:8080如果出現(xiàn)下圖, 則表示安裝成功

注意: 如果終端上提示
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
.....
則表示8080端口被占用了, 查看端口PID
lsof -i tcp:8080
根據(jù)端口PID, kill掉(這兒的9603 換成你自己8080端口的PID)
kill 9603
然后重新執(zhí)行
nginx
最后打開(kāi)http://localhost:8080驗(yàn)證
3.配置nginx和ramp首先我們查看nginx安裝到哪了
brew info nginx-full
如圖, 找到nginx.conf文件所在位置

通過(guò)vim或者點(diǎn)擊Finder->前往->前往文件夾->輸入/usr/local/etc/nginx/nginx.conf->用Xcode打開(kāi) nginx.conf 直接滾到最后一行, 在最后一個(gè)}(即最后的空白處, 沒(méi)有任何{}) 后面添加
在http節(jié)點(diǎn)后面加上rtmp配置:
rtmp {
server {
listen 1935;
application rtmplive {
live on;
record off;
}
}
}
然后重啟nginx(其中的1.10.1要換成你自己安裝的nginx版本號(hào), 查看版本號(hào)用nginx -v命令即可)
/usr/local/Cellar/nginx-full/1.10.1/bin/nginx -s reload
到此,安裝完成!
注意:(如果你命令執(zhí)行成功, 重啟成功了, 沒(méi)有沒(méi)有任何異常, 請(qǐng)直接跳轉(zhuǎn)到下一步)執(zhí)行命令的時(shí)候, 報(bào)異常
nginx: [emerg] unknown directive “rtmp” in /usr/local/etc/nginx/nginx.conf:119
rtmp成了未知指令.
查看你的命令是否敲錯(cuò) 建議直接復(fù)制. 如果安裝不成功,不妨多試幾次!
解決方案:卸載nginx
brew uninstall nginx
再次安裝nginx
brew install nginx-full --with-rtmp-module
二、【實(shí)現(xiàn)推流】
主要有兩種封裝庫(kù)來(lái)實(shí)現(xiàn)推流(基于RTMP協(xié)議):
- FFmpeg推流
- LFLiveKit推流(采集篇說(shuō)過(guò))
簡(jiǎn)介:FFmoeg集成工程中比較麻煩,但是在終端上運(yùn)行卻很方便 所以在2.1中只做本地視頻推流測(cè)試有了解的可以參考:iOS下使用FFMPEG的一些總結(jié),相對(duì)來(lái)說(shuō)LFLiveKit在工程中集成就方便,而且包含采集、美顏、推流與一身所以推薦
2.1 安裝ffmpeg,實(shí)現(xiàn)本地視頻推流
- 執(zhí)行命令
brew install ffmpeg
安裝ffmpeg時(shí)間就要長(zhǎng)一點(diǎn)了. 如果速度過(guò)慢, 建議翻墻. 不過(guò)也才50多M的東西, 耐心一點(diǎn)就好.
- 等待的時(shí)間里, 再下載一個(gè)支持rtmp協(xié)議的 VLC 視頻播放器
ffmpeg推流以我桌面的一個(gè)loginmovie.mp4
(自己準(zhǔn)備一個(gè)視頻文件)為例, 執(zhí)行推流命令
ffmpeg -re -i /Users/sunlin/Desktop/loginmovie.mp4 -vcodec libx264 -acodec aac -strict -2 -f flv rtmp://localhost:1935/rtmplive/room
注意: 更換你的視頻地址
將視頻推流到服務(wù)器后,打開(kāi)VLC,然后File->open network->輸入:
rtmp://localhost:1935/rtmplive/room
效果如圖

2.2 使用LFLiveKit,實(shí)現(xiàn)直播推流
將程序運(yùn)行在真機(jī)上只有真機(jī)上才能采集到音頻 (代碼在底部)
采集端用的LFLive庫(kù) 只需要在此加入服務(wù)器推流地址url即可
#import "CaputuereLiveViewController.h"
#import <LFLiveKit/LFLiveKit.h>
/**
**Live
*/
-(void )startLive{
LFLiveStreamInfo *stream = [LFLiveStreamInfo new];
stream.url = @"rtmp://192.168.0.2:1935/rtmplive/room";
[self.session startLive:stream];
}
** 注意:
由于搭建是本地服務(wù)器(實(shí)現(xiàn)外網(wǎng)須穿墻)
1.運(yùn)行服務(wù)器的電腦和手機(jī)保證在同一WiFi下
2.在運(yùn)行在真機(jī)的代碼中必須把地址換成你自己的電腦IP(192.168.0.2 )(不能再用local 本地了)**

1.開(kāi)始手機(jī)上運(yùn)行直播程序
2.然后打開(kāi) VLC 中 的 file -- Open Network, 直接輸入代碼中的 url:

有些延遲 耐心等待 :

總結(jié) :到此所有的直播主要大致結(jié)束 ,當(dāng)然一個(gè)直播還有許多功能: ** 禮物、聊天、 彈幕 、連麥**等后續(xù)整理出來(lái),待完善!喜歡我的朋友可以進(jìn)行關(guān)注!
gitHub代碼地址:
Object-C版 : https://github.com/one-tea/ZKKLiveDemo
Swift版 : https://github.com/one-tea/ZKKLiveAPP_Swift3.0