因?yàn)楣ぷ黜?xiàng)目中需要用到點(diǎn)播贡必、直播等內(nèi)容疮装,但是服務(wù)器端的網(wǎng)速太渣昏兆,為了節(jié)省等待時(shí)間婴噩,因此在本地搭建了RTSP是尖、RTMP以及HLS服務(wù)器醉箕。
RTSP服務(wù)器的搭建
首先感謝強(qiáng)大的VLC播放器钾腺,這款播放器不僅僅是個(gè)萬(wàn)能解碼的播放器,而且還可以充當(dāng)RTSP點(diǎn)播服務(wù)器讥裤,用來(lái)與人分享音視頻放棒。先去官網(wǎng)下載安裝文件,安裝后VLC的路徑就是/Applications/VLC.app
己英。
下面我們將使用命令行來(lái)啟動(dòng)點(diǎn)播服務(wù)器间螟,命令如下:
/Applications/VLC.app/Contents/MacOS/VLC --ttl 12 -vvv --color -I telnet --telnet-password videolan --rtsp-host 0.0.0.0 --rtsp-port=50055
這里面碰到了幾個(gè)坑,一個(gè)是剛開始--rtsp-host 0.0.0.0:50055
來(lái)啟動(dòng)损肛,但是莫名的跳轉(zhuǎn)到544端口厢破,然后需要sudo權(quán)限,sudo權(quán)限又不能啟動(dòng)治拿,但是拆開成--rtsp-host 0.0.0.0 --rtsp-port=50055
就可以正常運(yùn)行摩泪。第二個(gè)坑就是端口被占用了,此時(shí)最好是改另外一個(gè)端口劫谅,不要用1-1000之內(nèi)的端口见坑,當(dāng)然也可以去查找被占用的端口,然后將其kill掉捏检。
啟動(dòng)里面參數(shù)我也不太了解荞驴,需要深入了解的,可以自己去找資料贯城。
如果一切正常的話熊楼,VLC會(huì)開啟一個(gè)telnet,并且監(jiān)聽4212端口能犯。
此時(shí)我們需要額外開啟一個(gè)終端窗口鲫骗,用來(lái)登錄telnet,輸入命令悲雳。
輸入命令登錄telnet : telnet localhost 4212
挎峦,
密碼就是前面參數(shù)--telnet-password
后面的videolan
香追。
登錄進(jìn)入以后合瓢,用命令創(chuàng)建一個(gè)new Test vod enabled
創(chuàng)建一個(gè)名字叫做Test
的點(diǎn)播,然后設(shè)置輸入源setup Test input /Users/aijun/Documents/Test.mp4
透典,后面就是你要點(diǎn)播的文件晴楔。
這樣一個(gè)點(diǎn)播源就建立好了顿苇,在局域網(wǎng)內(nèi)用VLC播放器打開rtsp://192.168.1.103:50055/Test
就可以播放此點(diǎn)播媒體文件了。
看網(wǎng)上教程税弃,不少可以直接用VLC圖形界面來(lái)建立點(diǎn)播源的纪岁, 但是大多都是windows系統(tǒng)下的,我在Mac系統(tǒng)下測(cè)試一直沒成功则果,有知道的可以給我留言幔翰,不勝感激。
搭建RTMP和HLS服務(wù)器
網(wǎng)上關(guān)于RTMP和HLS服務(wù)器的教程有多西壮,畢竟現(xiàn)在直播非骋旁觯火,不過自己去嘗試安裝一下款青,也有不少坑做修,下面寫一下自己的一些步驟。
1抡草、安裝Homebrow
已經(jīng)安裝的話饰及, 此步可以略過。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2康震、安裝Nginx服務(wù)器及配置文件
首先下載nginx擴(kuò)展
brew tap homebrew/nginx
安裝Nginx服務(wù)器及rtmp模塊
brew install nginx-full --with-rtmp-module
打開配置文件/usr/local/etc/nginx/nginx.conf
燎含,修改如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8080;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
#rtmp stat
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /usr/local/Cellar/rtmp-nginx-module/1.1.7.10/share/rtmp-nginx-module;
}
location /control {
rtmp_control all;
}
#HLS配置開始,這個(gè)配置為了`客戶端`能夠以http協(xié)議獲取HLS的拉流
location /hls {
# Serve HLS fragments
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root html;
add_header Cache-Control no-cache;
}
#HLS配置結(jié)束
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
include servers/*;
}
rtmp {
server {
listen 1935;
ping 30s;
notify_method get;
application myapp {
live on;
record off;
}
#增加對(duì)HLS支持開始
application hls {
live on;
hls on;
hls_path /usr/local/var/www/hls;
hls_fragment 5s;
}
#增加對(duì)HLS支持結(jié)束
}
}
修改后,直接運(yùn)行nginx
啟動(dòng)服務(wù)器腿短。
Nginx常用目錄
- 配置文件
/usr/local/etc/nginx/nginx.conf
- 安裝地址
/usr/local/Cellar/nginx-full/1.10.2/bin/nginx
- 默認(rèn)根目錄
/usr/local/var/www
Nginx常用操作命令
- 服務(wù)器啟動(dòng)
nginx
- 服務(wù)器重新加載配置文件
nginx -s reload
- 服務(wù)器停止
nginx -s stop
- 服務(wù)器退出
nginx -s quit
3瘫镇、安裝FFMPEG
brew install ffmpeg --with-ffplay
設(shè)置推流
- 設(shè)置文件推流
ffmpeg -re -i /Users/aijun/Documents/Test.mp4 -vcodec copy -ar 22050 -f flv rtmp://localhost:1935/hls/movie
網(wǎng)上不少教程都沒有-ar 22050
的參數(shù),如果你的轉(zhuǎn)碼flv也碰到和我一樣的問題答姥,加上這個(gè)參數(shù)就可以解決了铣除。
HLS服務(wù)器地址: http://192.168.1.103:8080/hls/movie.m3u8
RTMP服務(wù)器地址: rtmp://192.168.1.103/hls/movie
可以使用VLC打開網(wǎng)絡(luò)地址測(cè)試是否運(yùn)行正常。
** 記住必須先運(yùn)行命令進(jìn)行推流鹦付, 然后才能打開直播視頻流 **
其中movie可以改成其他的任何名字尚粘,對(duì)應(yīng)的服務(wù)器地址的movie也需要做出相應(yīng)更改
- 設(shè)置本地桌面攝像頭的推流
ffmpeg -f avfoundation -framerate 30 -i "1:0" -f avfoundation -framerate 25 -video_size 640x480 -i "0" -c:v libx264 -preset ultrafast -filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/hls/movie
使用攝像頭的詳細(xì)命令就不多解釋了,不過我用iMac看起來(lái)效果一般敲长,畢竟幀數(shù)不夠高郎嫁,而且延遲比較大。