ios視頻直播(流媒體拉流播放、錄制推流、推流服務(wù)器搭建)

因?yàn)槲恼卤容^長(zhǎng),先上效果圖打點(diǎn)雞血
電腦攝像頭錄制播放.png
iphone錄制,模擬器播放.png

因?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
已安裝示圖.png

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)如下圖所示

安裝成功示圖.png

如果需要卸載nginx,執(zhí)行以下命令

brew uninstall nginx-full

三、配置rtmp參數(shù)

1.查看nginx配置文件安裝在哪

brew info nginx-full

然后command+f搜索"The default port has been set in",后面的就是配置文件路徑了

conf配置文件.png

2.然后command+shift+g 粘貼剛查詢到的conf路徑


前往配置文件.png

3.打開如下配置文件(xcode即可)


配置文件.png

在文本的最后面配置如下參數(shù),然后保存

rtmp {
        server {
        listen 1990;
        application liveApp {
            live on;
            record off;
        }
    }
}
參數(shù)配置.png

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
推流.png

-re: 一定要加,代表按照幀率發(fā)送,否則ffmpeg會(huì)一股腦地按最高的效率發(fā)送數(shù)據(jù)
-i : 輸入文件
-vcodec copy: 強(qiáng)制使用codec編解碼方式,要加,否則ffmpeg會(huì)重新編碼輸入的H.264裸流
-f 強(qiáng)制轉(zhuǎn)換為什么格式,后接格式

五、使用VLC播放rtmp推流

  1. 下載VLC安裝??這兒
    2.安裝結(jié)束后打開vlc然后“command+n"快捷打開,在網(wǎng)絡(luò)選項(xiàng)下輸入conf中配置的地址"rtmp://localhost:1990/liveApp/room"
vlc配置.png

如果此時(shí)還在桌面視頻的流推還在進(jìn)行,那么此時(shí)雙擊右圖中的地址活著播放按鈕則會(huì)進(jìn)行播放

六、利用mac攝像頭、mic、屏幕錄制進(jìn)行推流測(cè)試

1.先看一下ffmpeg都支持哪些設(shè)備

ffmpeg -f avfoundation -list_devices true -i ""
設(shè)備支持清單.png

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文件夾即可。

缺失framework和流地址.png

記得改里面的流地址(你的服務(wù)器的ip地址+路徑),如果你都是按上面的配置文件配置的話,直接替換你的ip地址就行(mac命令行ifconfig 或者網(wǎng)絡(luò)偏好設(shè)置查看ip地址),
AFF392CE-2476-44C6-9E81-929C3ABFC2B5.png

拉流客戶端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ī)端播放的功能,至于具體原理想了解的可以查看他們的博客

需要修改的地方.png

需要檢測(cè)手機(jī)端數(shù)據(jù)是否發(fā)送到服務(wù)器的話可以進(jìn)行端口監(jiān)聽

sudo tcpdump -i en0 'port 1990'  

推流客戶端demo:Github

有問題的地方希望大家提出來,大家一起交流進(jìn)步,不怎么會(huì)寫博客,望小火車們多多諒解

前段時(shí)間模仿微信做了個(gè)小視頻功能(95%還原度),下章將會(huì)講小視頻錄制功能

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容