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

因為文章比較長,先上效果圖打點雞血
電腦攝像頭錄制播放.png
iphone錄制,模擬器播放.png

因為只有倆手機,沒法拍照,手機錄制、手機播放的就不貼圖了,可以直接demo中修改自己服務(wù)器的ip地址即可

本文盡量只講實現(xiàn)步驟,不講原理,想看原理的移步以下兩個博客
原理:http://www.itdecent.cn/p/53059be61546
推流原理:http://www.itdecent.cn/p/db7b2551538b

一、Homebrew安裝

Homebrew是Mac OSX上的軟件包管理工具,可以方便的管理mac上的軟件安裝、卸載。
1.首先使用man brew 命令在終端查看是否安裝了該工具,如果安裝了則會打印出如下一些信息,否則需要安裝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端口被占用的情況,則查看是哪個進程端口占用了并關(guān)掉對應(yīng)pid的進程

sudo lsof -n -P| grep :8080
//直接copy吧,空格和|不能少
假如對應(yīng)pid是1945
kill 1945
如果殺不死可以強制殺 sudo kill 1945 或者去進程管理器里強制殺死
殺死后別忘記重新開啟nginx

然后在瀏覽器輸入http://localhost:8080
(localhost是本機地址,8080是nginx默認監(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進行推流

1.安裝ffmpeg后我們可以使用mac的攝像頭、mic和桌面錄屏進行數(shù)據(jù)推送

brew install ffmpeg

2、安裝成功后進行ffmepg推流
ffmpeg -re -i (視頻全路徑) -vcodec copy -f flv (rtmp路徑
比如我桌面有一個Worth.mp4,之前conf配置的路徑是“rtmp://localhost:1990/liveApp/room”,那么我們?nèi)缦逻M行推流

ffmpeg -re -i /Users/myMac/Desktop/Worth.mp4 -vcodec copy -f flv rtmp://localhost:1990/liveApp/room
推流.png

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

五、使用VLC播放rtmp推流

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

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

六、利用mac攝像頭、mic、屏幕錄制進行推流測試

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

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

2.抓取桌面和攝像頭進行推流(自己把回車符去下)

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)點是同等清晰度,視頻文件更小 缺點就是轉(zhuǎn)換慢
-c:v flv 標(biāo)準(zhǔn)FLV編碼 這個好處是速度快 清晰度高的話 視頻文件會比較大
-preset slow 使用慢速模式 延遲長 清晰度高
ffmpeg的轉(zhuǎn)碼延時測試與設(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 強制指定音頻處理模式
-ac 1 聲道選擇
-ar 44100 音頻赫茲
如此,你的

七、手機端拉流測試

手機端我是通過ljkplayer進行拉流播放的,幾行代碼的事,就不講了,直接上demo,剛下載下來是沒有集成ijkframework的,因為太大,github傳不上去,所以上傳到云端了( 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

八、手機端推流測試

推流還是比較復(fù)雜的,因為涉及到視頻、音頻采集、裁剪、編碼、推流等一系列操作,這個之前參考 下他的這篇文章,因為他的文章中只講了視頻的推流、關(guān)于服務(wù)器的搭建和拉流的內(nèi)容沒有涉及,所以放到本章是為了讓大家對服務(wù)器、拉流客戶端和推流客戶端有一個閉環(huán)的實現(xiàn),實現(xiàn)手機端錄制、推送到服務(wù)器、手機端播放的功能,至于具體原理想了解的可以查看他們的博客

需要修改的地方.png

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

sudo tcpdump -i en0 'port 1990'  

推流客戶端demo:Github

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容