一、准備環境
1.下載wget、lrzsz工具
yum install -y wget yum install -y lrzsz
2.備份系統原來的repo文件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
3.配置阿里雲的yum源
wget -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
4.運行yum makecache生成緩存
yum clean all
yum makecache
5.安裝依賴
yum install -y gcc-c++ zlib pcre openssl openssl-devel
6.新建文件夾方便我們存儲文件
mkdir /opt/nginx
mkdir /opt/soft
二、下載nginx及其相關擴展模塊
Nginx本身只是一個服務器,對流媒體並沒有支持,所以我們要下載對應的模塊來擴展其功能。 MP4模塊:http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
FLV模塊:http://sourceforge.net/projects/yamdi/files/yamdi/yamdi-1.9.tar.gz
直播流模塊:https://github.com/adwpc/nginx-rtmp-module
FastDFS模塊:https://github.com/happyfish100/fastdfs-nginx-module
下載完畢后將所有文件上傳到nginx目錄下
cd /opt/nginx
再輸入命令:rz,選擇要上傳的文件
三、解壓並安裝文件
1.安裝FLV模塊
tar -zxvf yamdi-1.9.tar.gz cd yamdi-1.9 make && make install
2.解壓MP4模塊
tar -zxvf nginx_mod_h264_streaming-2.2.7.tar.gz
3.解壓HLS模塊(m3u8、流媒體)
yum install -y unzip #解壓用的 unzip nginx-rtmp-module-master.zip
4.解壓nginx軟件
tar -zxvf nginx-1.8.1.tar.gz
5.在安裝之前 mp4模塊有一個bug 要把它處理一下
cd nginx_mod_h264_streaming-2.2.7/src vim ngx_http_streaming_module.c 157行-161行 對WINDOW系統的檢查注釋掉:
命令模式下157gg跳轉到157行
注釋完畢后保存並退出
6.開始安裝
在安裝nginx的時候 一起把mp4模塊 以及HLS模塊一起裝上去
C語言中 ./configure 向導 預配置
--add-module 安裝擴展插件
--prefix 安裝在哪里
--with- 使用系統內置的模塊 已經安裝完畢 關聯
cd nginx-1.8.1
./configure --add-module=/opt/nginx/nginx_mod_h264_streaming-2.2.7 --add-module=/opt/nginx/nginx-rtmp-module-master --with-http_ssl_module --prefix=/opt/soft/nginx --with-http_flv_module --with-http_stub_status_module
修改 objs下的文件Makefile:
vim objs/Makefile
將圖中所示第3行 -Werror 刪除掉
保存並退出后:
make && make install
四、修改nginx服務器配置文件 nginx.conf
cd /opt/soft/nginx/conf vim nginx.conf
一個 nginx.conf中可以配置多個服務器
一個服務器可以監聽1個端口
我們修改配置文件如下圖所示:
保存后退出
上傳一個MP4文件以供測試
cd /opt/soft/nginx/html 輸入命令:rz選擇上傳一個MP4文件
五、啟動nginx服務器
cd /opt/soft/nginx
./nginx
關閉nginx服務器: ./nginx -s stop
重啟服務器:./nginx -s reload
在瀏覽器輸入ip:80/test.mp4,播放成功則點播服務器搭建成功(如下圖所示)
六、優化視頻播放機制
如今網站大多采用m3u8格式的視頻播放方式,即把視頻切片,用戶播放的時候依照順序播放視頻片段,這樣做的好處是減少了緩沖時間,提高了用戶的體驗感。
我們這里用的是Linux版ffmpeg工具,下載地址:https://ffmpeg.zeranoe.com/builds/
1.下載ffmpeg程序的依賴程序yasm:
鏈接:https://pan.baidu.com/s/1nIkNQNmOgVW1CYcTs1Um8w
提取碼:y00y
上傳到虛擬機:
cd /opt/nginx 輸入命令rz選擇剛才下載的ffmpeg-4.2.2.tar.bz2和yasm-1.3.0.tar.gz
2.解壓:
yun install -y bzip2 tar -jxvf ffmpeg-4.2.2.tar.bz2
tar -zxvf yasm-1.3.0.tar.gz
3.安裝yasm:
cd yasm-1.3.0 ./configure
make && make install
4.安裝ffmpeg:
cd
./configure --prefix=/opt/soft/ffmpeg make && make install
安裝過程有點長,請耐心等待
5.安裝完畢后先將MP4文件轉換為ts文件:
cd /opt/soft/ffmpeg/bin ./ffmpeg -y -i /opt/soft/nginx/html/test.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb output.ts 運行好后,輸入命令ll即可看到轉換后的ts文件
6.將ts文件切片:
ffmpeg -i output.ts -c copy -map 0 -f segment -segment_list testlist.m3u8 -segment_time 1000 output.ts #output.ts 這個看上條命令后面出輸的文件名稱。我這里是output.ts #出輸的m3u8文件索引文件名稱,可以隨意修改,我這里是testlist.m3u8 #-segment_time 1000 每一段切片的控制時間,我這里是1000s,根據你的情況隨意修改
七、直播推流
1.修改nginx配置文件nginx.conf
vim /opt/soft/nginx/conf/nginx.conf
rtmp { server { listen 1935; #監聽的端口 chunk_size 4096; application hls { #rtmp推流請求路徑 live on; hls on; hls_path /usr/share/nginx/html/hls; hls_fragment 5s; } } }
加入以上代碼,具體關系如下:
保存退出后創建目錄hls
cd /opt/soft/nginx/html mkdir hls
重啟nginx服務:
cd /opt/soft/nginx/sbin
./nginx -s reload
2.下載推流工具
下載地址:https://pc.qq.com/detail/4/detail_23604.html
安裝完畢后在來源區域點擊"+",再添加視頻捕獲設備(打開攝像頭)
點擊確定即可看到正在操作電腦的自己.......
再添加顯示器捕獲:
如果窗口出現黑屏
設備管理器中-->顯示適配器-->獨立顯卡-禁用
右鍵禁言該顯卡,再啟動OBS即可看到攝像頭+顯示器(記得調換一下視頻和顯示器的順序,讓視頻捕獲在前)
3.推流
點擊右下角的設置,再點擊推流,配置如下圖所示:
配置好后點擊右下角:開始推流
4.拉流
①方法一(推薦):下載Nginx_EV播放器:
鏈接:https://pan.baidu.com/s/1IeqmFa5K8buIk-ck8CR9aA
提取碼:7com
下載完成后將該項目導入前端開發工具中(WebStorm、HBuilder等等),運行index.html
在rtmp地址中填入推流中設置的服務器地址,注意下圖的12345就是推流時自己設置的串流密鑰,點擊觀看直播即可看到畫面
②方法二:下載百度開源播放器:https://cloud.baidu.com/doc/Developer/index.html?sdk=Player
點擊下載完成后解壓,完成后如下圖所示有兩個文件(標記的文件我改過名字,我們要用的播放器就在標記的文件中,反正知道不是第一個就行...)
在player文件夾中新建一個test.html,內容如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="playercontainer"></div> </body> <script type="text/javascript" src="cyberplayer.js"></script> <script type="text/javascript"> var player = cyberplayer("playercontainer").setup({ width: 640, height: 360, file: "rtmp://192.168.187.101:1935/hls/12345", // 注意!!!<—rtmp直播地址,這里填寫自己對應的服務器地址 autostart: true, stretching: "uniform", volume: 100, controls: true, rtmp: { reconnecttime: 5, // rtmp直播的重連次數 bufferlength: 1 // 緩沖多少秒之后開始播放 默認1秒 }, ak: "某個accessKey" // 注意!!百度雲管理控制平台注冊即可獲得accessKey }); </script> </html>
代碼中ak需要注冊百度雲管理控制平台賬號並登錄才可獲得
地址:https://login.bce.baidu.com/?redirect=https%3A%2F%2Fconsole.bce.baidu.com%2Fiam%2F#/iam/accesslist
將該項目(我這里是player)導入前端開發工具中(WebStorm、HBuilder等等),運行test.html即可看到直播內容!!!