【目錄】
- 如何開發出一款仿映客直播APP專案實踐篇 -【原理篇】
- 如何開發出一款仿映客直播APP專案實踐篇 -【採集篇 】
- 如何開發出一款仿映客直播APP專案實踐篇 -【伺服器搭建+推流】
- 如何開發出一款仿映客直播APP專案實踐篇 -【播放篇】
前言:有了伺服器的構建 ,就可以將手機端採集視訊傳輸到伺服器 ,可以在從伺服器拉流,實現直播,延遲大約3-4秒!
效果圖
Mac搭建nginx+rtmp伺服器
參考推酷:Mac搭建nginx+rtmp伺服器
步驟:
開啟終端, 檢視是否已經安裝了Homebrew (Mac上好用的第三方安裝管理工具), 直接終端輸入命令
1 |
man brew |
如果Mac已經安裝了, 會顯示一些命令的幫助資訊. 此時輸入Q退出即可, 直接進入第二步.反之, 如果沒有安裝,執行命令(命令列已更到最新 )
1 |
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
如果安裝後, 想要解除安裝
1 |
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall) |
一、【安裝nginx+rtmp伺服器】
先clone nginx專案到本地
1 |
brew tap homebrew/nginx |
執行安裝:
1 |
brew install nginx-full --with-rtmp-module |
此時, nginx和rtmp模組就安裝好了輸入命令:
1 |
nginx |
在瀏覽器裡開啟http://localhost:8080如果出現下圖, 則表示安裝成功
安裝成功
注意:
如果終端上提示
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
1 |
lsof -i tcp:8080 |
根據埠PID, kill掉(這兒的9603
換成你自己8080
埠的PID)
1 |
kill 9603 |
然後重新執行
nginx
最後開啟http://localhost:8080驗證
3.配置nginx和ramp首先我們檢視nginx安裝到哪了
1 |
brew info nginx-full |
如圖, 找到nginx.conf檔案所在位置
通過vim或者點選Finder->前往->前往資料夾->輸入/usr/local/etc/nginx/nginx.conf->用Xcode開啟 nginx.conf 直接滾到最後一行, 在最後一個}
(即最後的空白處, 沒有任何{}) 後面新增
在http節點後面加上rtmp配置:
1 2 3 4 5 6 7 8 9 |
rtmp { server { listen 1935; application rtmplive { live on; record off; } } } |
然後重啟nginx
(其中的1.10.1要換成你自己安裝的nginx版本號, 檢視版本號用nginx -v
命令即可)
1 |
/usr/local/Cellar/nginx-full/1.10.1/bin/nginx -s reload |
到此,安裝完成!
注意:
(如果你命令執行成功, 重啟成功了, 沒有沒有任何異常, 請直接跳轉到下一步)執行命令的時候, 報異常
1 |
nginx: [emerg] unknown directive “rtmp” in /usr/local/etc/nginx/nginx.conf:119 |
rtmp
成了未知指令.
檢視你的命令是否敲錯 建議直接複製. 如果安裝不成功,不妨多試幾次!
解決方案:解除安裝nginx
1 |
brew uninstall nginx |
再次安裝nginx
1 |
brew install nginx-full --with-rtmp-module |
二、【實現推流】
主要有兩種封裝庫來實現推流(基於RTMP協議):
- FFmpeg推流
- LFLiveKit推流(採集篇說過)
簡介:FFmoeg整合工程中比較麻煩,但是在終端上執行卻很方便 所以在2.1中只做本地視訊推流測試有了解的可以參考:iOS下使用FFMPEG的一些總結,相對來說LFLiveKit在工程中整合就方便,而且包含採集、美顏、推流與一身所以推薦
2.1 安裝ffmpeg,實現本地視訊推流
- 執行命令
1brew install ffmpeg
安裝ffmpeg
時間就要長一點了. 如果速度過慢, 建議搬梯子. 不過也才50多M的東西, 耐心一點就好. - 等待的時間裡, 再下載一個支援rtmp協議的 VLC 視訊播放器ffmpeg推流以我桌面的一個loginmovie.mp4
(自己準備一個視訊檔案)為例, 執行推流命令
1ffmpeg -re -i /Users/sunlin/Desktop/loginmovie.mp4 -vcodec libx264 -acodec aac -strict -2 -f flv rtmp://localhost:1935/rtmplive/room
注意: 更換你的視訊地址
將視訊推流到伺服器後,開啟VLC,然後File->open network->輸入:
rtmp://localhost:1935/rtmplive/room
效果如圖
2.2 使用LFLiveKit,實現直播推流
將程式執行在真機上只有真機上才能採集到音訊 (程式碼在底部)
採集端用的LFLive庫 只需要在此加入伺服器推流地址url
即可
#import "CaputuereLiveViewController.h"
#import
1 2 3 4 5 6 7 8 |
/** **Live */ -(void )startLive{ LFLiveStreamInfo *stream = [LFLiveStreamInfo new]; stream.url = @"rtmp://192.168.0.2:1935/rtmplive/room"; [self.session startLive:stream]; } |
注意:
由於搭建是本地伺服器(實現外網須穿牆)
1.執行伺服器的電腦和手機保證在同一WiFi下
2.在執行在真機的程式碼中必須把地址換成你自己的電腦IP(192.168.0.2 )(不能再用local 本地了)
1.開始手機上執行直播程式
2.然後開啟 VLC 中 的 file — Open Network, 直接輸入程式碼中的 url:
有些延遲 耐心等待 :
總結 :到此所有的直播主要大致結束 ,當然一個直播還有許多功能: 禮物、聊天、 彈幕 、連麥等後續整理出來,待完善!喜歡我的朋友可以進行關注!
gitHub程式碼地址:
Object-C版 : https://github.com/one-tea/ZKKLiveDemo
Swift版 : https://github.com/one-tea/ZKKLiveAPP_Swift3.0