因?yàn)槲恼卤容^長(zhǎng),先上效果圖打點(diǎn)雞血
因?yàn)橹挥袀z手機(jī),沒法拍照,手機(jī)錄制、手機(jī)播放的就不貼圖了,可以直接demo中修改自己服務(wù)器的ip地址即可
本文盡量只講實(shí)現(xiàn)步驟,不講原理,想看原理的移步以下兩個(gè)博客
原理:http://www.lxweimin.com/p/53059be61546
推流原理:http://www.lxweimin.com/p/db7b2551538b
一、Homebrew安裝
Homebrew是Mac OSX上的軟件包管理工具,可以方便的管理mac上的軟件安裝、卸載。
1.首先使用man brew 命令在終端查看是否安裝了該工具,如果安裝了則會(huì)打印出如下一些信息,否則需要安裝homebrew管理工具
man brew
2.安裝homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
看到有"installation successful!"的提示,則表示安裝成功了。
二、利用home brew安裝nginx服務(wù)器
1.下載nginx
brew tap homebrew/nginx
2.安裝nginx 和rtmp模塊
brew install nginx-full --with-rtmp-module
3.安裝結(jié)束后查看一下是否安裝成功使用"nginx"命令開啟nginx服務(wù)器
nginx
如果出現(xiàn)bind fail,8080端口被占用的情況,則查看是哪個(gè)進(jìn)程端口占用了并關(guān)掉對(duì)應(yīng)pid的進(jìn)程
sudo lsof -n -P| grep :8080
//直接copy吧,空格和|不能少
假如對(duì)應(yīng)pid是1945
kill 1945
如果殺不死可以強(qiáng)制殺 sudo kill 1945 或者去進(jìn)程管理器里強(qiáng)制殺死
殺死后別忘記重新開啟nginx
然后在瀏覽器輸入http://localhost:8080
(localhost是本機(jī)地址,8080是nginx默認(rèn)監(jiān)聽端口)查看是否能出現(xiàn)如下圖所示
如果需要卸載nginx,執(zhí)行以下命令
brew uninstall nginx-full
三、配置rtmp參數(shù)
1.查看nginx配置文件安裝在哪
brew info nginx-full
然后command+f搜索"The default port has been set in",后面的就是配置文件路徑了
2.然后command+shift+g 粘貼剛查詢到的conf路徑
3.打開如下配置文件(xcode即可)
在文本的最后面配置如下參數(shù),然后保存
rtmp {
server {
listen 1990;
application liveApp {
live on;
record off;
}
}
}
4.重新加載nginx的配置文件,使其生效
nginx -s reload
四、安裝ffmepg進(jìn)行推流
1.安裝ffmpeg后我們可以使用mac的攝像頭、mic和桌面錄屏進(jìn)行數(shù)據(jù)推送
brew install ffmpeg
2、安裝成功后進(jìn)行ffmepg推流
ffmpeg -re -i (視頻全路徑) -vcodec copy -f flv (rtmp路徑
比如我桌面有一個(gè)Worth.mp4,之前conf配置的路徑是“rtmp://localhost:1990/liveApp/room”,那么我們?nèi)缦逻M(jìn)行推流
ffmpeg -re -i /Users/myMac/Desktop/Worth.mp4 -vcodec copy -f flv rtmp://localhost:1990/liveApp/room
-re: 一定要加,代表按照幀率發(fā)送,否則ffmpeg會(huì)一股腦地按最高的效率發(fā)送數(shù)據(jù)
-i : 輸入文件
-vcodec copy: 強(qiáng)制使用codec編解碼方式,要加,否則ffmpeg會(huì)重新編碼輸入的H.264裸流
-f 強(qiáng)制轉(zhuǎn)換為什么格式,后接格式
五、使用VLC播放rtmp推流
-
下載VLC安裝??這兒
2.安裝結(jié)束后打開vlc然后“command+n"快捷打開,在網(wǎng)絡(luò)選項(xiàng)下輸入conf中配置的地址"rtmp://localhost:1990/liveApp/room"
如果此時(shí)還在桌面視頻的流推還在進(jìn)行,那么此時(shí)雙擊右圖中的地址活著播放按鈕則會(huì)進(jìn)行播放
六、利用mac攝像頭、mic、屏幕錄制進(jìn)行推流測(cè)試
1.先看一下ffmpeg都支持哪些設(shè)備
ffmpeg -f avfoundation -list_devices true -i ""
2.抓取桌面和攝像頭進(jìn)行推流(自己把回車符去下)
ffmpeg -f avfoundation -framerate 30 -i "0: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:1990/liveApp/room
-f avfoundation 轉(zhuǎn)換為avfoundation
-framerate 30 : 設(shè)置幀率 30
-i "1:0" : 設(shè)置輸出,視頻:Capture screen 音頻:Built-in Microphone,前面的“1”表示視頻(0攝像頭,1:桌面截屏,出現(xiàn)畫中畫可以把1改成0),后面的"0"表示音頻輸入麥克風(fēng)
-f avfoundation -framerate 30 -video_size 640x480 : 設(shè)置幀率和視頻尺寸
-c:v libx264 設(shè)置視頻編碼,H.264編碼 優(yōu)點(diǎn)是同等清晰度,視頻文件更小 缺點(diǎn)就是轉(zhuǎn)換慢
-c:v flv 標(biāo)準(zhǔn)FLV編碼 這個(gè)好處是速度快 清晰度高的話 視頻文件會(huì)比較大
-preset slow 使用慢速模式 延遲長(zhǎng) 清晰度高
ffmpeg的轉(zhuǎn)碼延時(shí)測(cè)試與設(shè)置優(yōu)化 http://blog.chinaunix.net/uid-26000296-id-5747671.html
-filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10':給視頻打水印
-acodec libmp3lame 強(qiáng)制指定音頻處理模式
-ac 1 聲道選擇
-ar 44100 音頻赫茲
如此,你的
七、手機(jī)端拉流測(cè)試
手機(jī)端我是通過ljkplayer進(jìn)行拉流播放的,幾行代碼的事,就不講了,直接上demo,剛下載下來是沒有集成ijkframework的,因?yàn)樘螅琯ithub傳不上去,所以上傳到云端了( https://pan.baidu.com/s/1mhD9aqs ),從云端下載拖到framework文件夾即可。
記得改里面的流地址(你的服務(wù)器的ip地址+路徑),如果你都是按上面的配置文件配置的話,直接替換你的ip地址就行(mac命令行ifconfig 或者網(wǎng)絡(luò)偏好設(shè)置查看ip地址),
拉流客戶端demo
八、手機(jī)端推流測(cè)試
推流還是比較復(fù)雜的,因?yàn)樯婕暗揭曨l、音頻采集、裁剪、編碼、推流等一系列操作,這個(gè)之前參考 下他的這篇文章,因?yàn)樗奈恼轮兄恢v了視頻的推流、關(guān)于服務(wù)器的搭建和拉流的內(nèi)容沒有涉及,所以放到本章是為了讓大家對(duì)服務(wù)器、拉流客戶端和推流客戶端有一個(gè)閉環(huán)的實(shí)現(xiàn),實(shí)現(xiàn)手機(jī)端錄制、推送到服務(wù)器、手機(jī)端播放的功能,至于具體原理想了解的可以查看他們的博客
需要檢測(cè)手機(jī)端數(shù)據(jù)是否發(fā)送到服務(wù)器的話可以進(jìn)行端口監(jiān)聽
sudo tcpdump -i en0 'port 1990'
有問題的地方希望大家提出來,大家一起交流進(jìn)步,不怎么會(huì)寫博客,望小火車們多多諒解