一、環境介紹
操作系統:虛擬機運行的Ubuntu18.04 64位系統
二、流媒體服務器介紹
百度百科: 流媒體指以流方式在網絡中傳送音頻、視頻和多媒體文件的媒體形式。相對於下載後觀看的網絡播放形式而言,流媒體的典型特徵是把連續的音頻和視頻信息壓縮後放到網絡服務器上,用戶邊下載邊觀看,而不必等待整個文件下載完畢。由於流媒體技術的優越性,該技術廣泛應用於視頻點播、視頻會議、遠程教育、遠程醫療和在線直播系統中。作爲新一代互聯網應用的標誌,流媒體技術在近幾年得到了飛速的發展。
流媒體服務器是流媒體應用的核心繫統,是運營商向用戶提供視頻服務的關鍵平臺。流媒體服務器的主要功能是對流媒體內容進行採集、緩存、調度和傳輸播放。流媒體應用系統的主要性能體現都取決於媒體服務器的性能和服務質量。因此,流媒體服務器是流媒體應用系統的基礎,也是最主要的組成部分。
流媒體服務器的主要功能是以流式協議(RTP/RTSP、MMS、RTMP等)將視頻文件傳輸到客戶端,供用戶在線觀看;也可從視頻採集、壓縮軟件接收實時視頻流,再以流式協議直播給客戶端。
nginx服務器是開源的高性能的http服務器,反向代理服務器,在國內許多公司應用比較多。
rtmp是實時消息傳輸協議(real time messaging protocol),主要應用在流媒體傳輸,實時音視頻通信的協議。
三、搭建流媒體服務器需要下載的軟件包
下載示例:
wbyq@wbyq:~/work_pc$ mkdir nginx
wbyq@wbyq:~/work_pc$ cd nginx/
wbyq@wbyq:~/work_pc/nginx$ wget http://nginx.org/download/nginx-1.10.3.tar.gz
wbyq@wbyq:~/work_pc/nginx$ wget http://zlib.net/zlib-1.2.11.tar.gz
wbyq@wbyq:~/work_pc/nginx$ wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
wbyq@wbyq:~/work_pc/nginx$ wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
wbyq@wbyq:~/work_pc/nginx$ wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
下載過程:
wbyq@wbyq:~/work_pc/nginx$ wget http://nginx.org/download/nginx-1.10.3.tar.gz
--2020-04-08 09:12:24-- http://nginx.org/download/nginx-1.10.3.tar.gz
正在解析主機 nginx.org (nginx.org)... 62.210.92.35, 95.211.80.227, 2001:1af8:4060:a004:21::e3
正在連接 nginx.org (nginx.org)|62.210.92.35|:80... 已連接。
已發出 HTTP 請求,正在等待迴應... 200 OK
長度: 911509 (890K) [application/octet-stream]
正在保存至: “nginx-1.10.3.tar.gz”
nginx-1.10.3.tar.gz 100%[=========================================================================>] 890.15K 38.2KB/s 用時 20s
2020-04-08 09:12:45 (44.0 KB/s) - 已保存 “nginx-1.10.3.tar.gz” [911509/911509])
wbyq@wbyq:~/work_pc/nginx$ wget http://zlib.net/zlib-1.2.11.tar.gz
--2020-04-08 09:12:48-- http://zlib.net/zlib-1.2.11.tar.gz
正在解析主機 zlib.net (zlib.net)... 68.66.224.49
正在連接 zlib.net (zlib.net)|68.66.224.49|:80... 已連接。
已發出 HTTP 請求,正在等待迴應... 200 OK
長度: 607698 (593K) [application/x-gzip]
正在保存至: “zlib-1.2.11.tar.gz”
zlib-1.2.11.tar.gz 100%[=========================================================================>] 593.46K 164KB/s 用時 3.6s
2020-04-08 09:12:57 (164 KB/s) - 已保存 “zlib-1.2.11.tar.gz” [607698/607698])
wbyq@wbyq:~/work_pc/nginx$ wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
--2020-04-08 09:13:05-- https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
正在解析主機 ftp.pcre.org (ftp.pcre.org)... 131.111.8.88
正在連接 ftp.pcre.org (ftp.pcre.org)|131.111.8.88|:443... 已連接。
已發出 HTTP 請求,正在等待迴應... 200 OK
長度: 2065161 (2.0M) [application/x-gunzip]
正在保存至: “pcre-8.40.tar.gz”
pcre-8.40.tar.gz 100%[=========================================================================>] 1.97M 166KB/s 用時 11s
2020-04-08 09:13:17 (191 KB/s) - 已保存 “pcre-8.40.tar.gz” [2065161/2065161])
wbyq@wbyq:~/work_pc/nginx$ wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
--2020-04-08 09:13:39-- https://github.com/arut/nginx-rtmp-module/archive/master.zip
正在解析主機 github.com (github.com)... 52.74.223.119
正在連接 github.com (github.com)|52.74.223.119|:443... 已連接。
已發出 HTTP 請求,正在等待迴應... 302 Found
位置:https://codeload.github.com/arut/nginx-rtmp-module/zip/master [跟隨至新的 URL]
--2020-04-08 09:13:40-- https://codeload.github.com/arut/nginx-rtmp-module/zip/master
正在解析主機 codeload.github.com (codeload.github.com)... 13.250.162.133
正在連接 codeload.github.com (codeload.github.com)|13.250.162.133|:443... 已連接。
已發出 HTTP 請求,正在等待迴應... 200 OK
長度: 545945 (533K) [application/zip]
正在保存至: “master.zip”
master.zip 100%[=========================================================================>] 533.15K 392KB/s 用時 1.4s
2020-04-08 09:13:42 (392 KB/s) - 已保存 “master.zip” [545945/545945])
如果有些軟件包下載不下來,可以登錄對應的官網下載或者百度直接搜索下載。
四、編譯安裝軟件包
4.1 下載編譯時需要依賴的一些工具
wbyq@wbyq:~/work_pc/nginx$sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
4.2 將上面下載的壓縮包進行解壓
wbyq@wbyq:~/work_pc/nginx$ tar xvf openssl-1.0.2k.tar.gz
wbyq@wbyq:~/work_pc/nginx$ tar xvf nginx-rtmp-module-master.tar.gz
wbyq@wbyq:~/work_pc/nginx$ tar xvf nginx-1.8.1.tar.gz
wbyq@wbyq:~/work_pc/nginx$ tar xvf pcre-8.40.tar.gz
wbyq@wbyq:~/work_pc/nginx$ tar xvf zlib-1.2.11.tar.gz
4.3 配置nginx,生成Makefile文件
(進入到nginx-1.8.1目錄下,配置nginx
wbyq@wbyq:~/work_pc/nginx$ cd nginx-1.8.1/
wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1$ ./configure --prefix=/usr/local/nginx --with-debug --with-pcre=../pcre-8.40 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.0.2k --add-module=../nginx-rtmp-module-master
執行命令時,注意下自己的依賴路徑是否正確。
4.4 修改Makefile,去掉-Werror選項
執行完上一步之後,打開objs/Makefile 文件,找到-Werror選項並刪除。
wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1$ gedit objs/Makefile
4.5 編譯安裝
wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1$ make
wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1$ sudo make install
五、配置nginx服務
5.1 設置開機啓動
wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1/nginx_install/sbin$ sudo wget http://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1/nginx_install/sbin$ sudo chmod +x /etc/init.d/nginx
wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1/nginx_install/sbin$ sudo update-rc.d nginx defaults
5.2 控制nginx服務的3個命令: 啓動、停止、重啓
sudo service nginx start
sudo service nginx stop
sudo service nginx restart
5.3 修改Nginx的配置文件
打開/usr/local/nginx/conf/nginx.conf文件,在文件最後面加入下面的配置。
rtmp {
server {
listen 8888;
application live {
live on;
}
}
}
因爲當前只用到了rtmp服務,代碼裏只配置了rtmp,其他服務沒有配置。
配置代碼裏的8888是監聽的端口號。
修改nginx.conf之後,重啓nginx服務:
wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1$ sudo service nginx restart
重啓服務之後,使用netstat -ltn命令查看TCP監聽的端口,確認下Nginx的監聽端口是否正常。
從上面截圖裏紅線框,框了2個端口,一個是我們自己設置的rtmp服務監聽端口8888,還有一個80是Nginx默認的HTTP服務監聽端口。
接下來可以在瀏覽器裏輸入本機IP地址:http://127.0.0.1/,查看Nginx服務開啓狀態。
六、安裝FFMPEG測試推流
安裝ffmpeg庫的方法參考這裏:https://blog.csdn.net/xiaolong1126626497/article/details/104919095
使用ffmpeg命令推流本地的攝像頭和音頻數據到RTMP服務器:
ffmpeg -thread_queue_size 128 -f video4linux2 -r 12 -s 1280x720 -i /dev/video0 -f alsa -i default -ar 44100 -ac 1 -f mp3 -qscale 5 -vcodec libx264 -acodec aac -f flv "rtmp://127.0.0.1:8888/live/xl"
我這裏是本地測試,向服務器推流地址就是:rtmp://127.0.0.1:8888/live/xl
其中127.0.0.1是你服務器的IP地址,8888是rtmp監聽的端口號,live在配置文件裏已經固定,xl可以隨便填這是rtmp的臨時目錄。
推流之後在linux下可以安裝個Mplayer播放器,拉流查看視頻。
$ mplayer rtmp://127.0.0.1:8888/live/xl
拉流的地址和推流的地址是一樣的。
如果在雲服務上搭建,有公網IP地址,就可以實現遠程直播功能了。
通過ffmpeg代碼推流編程,可以參考這裏:
https://blog.csdn.net/xiaolong1126626497/article/details/105377651
下面公衆號裏有全套QT、C、C++、單片機基礎教程--歡迎關注: