搭建Nginx環(huán)境
1.下載并配置Nginx
????Nginx下載
????下載完成后,解壓Nginx壓縮包,并將Nginx的文件路徑添加至環(huán)境變量。注意路徑中不能有中文,80端口不被占用。

添加至環(huán)境變量
打開CMD,輸入
nginx -v若如下圖所示,則表示安裝配置成功。

Nginx配置成功
2.Nginx常用命令(windows)
+ 查看nginx的版本號:nginx -v
+ 啟動nginx:start nginx
+ 快速停止或關(guān)閉nginx:nginx -s stop
+ 正常停止或關(guān)閉nginx:nginx -s quit
+ 配置文件nginx.conf修改重裝載命令:nginx -s reload
3.搭建媒體服務(wù)器--配置Nginx http代理路徑
HLS協(xié)議是基于Http協(xié)議的,我們這里使用Nginx作為視頻服務(wù)器。
- nginx.conf
# nginx.conf
server {
listen 80;
server_name localhost;
#視頻目錄
location / {
root /;
rewrite ^/video/(.*)$ /ApacheSoftware/ftpop/$1 break;
}
}
FFmpeg
FFmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計算機(jī)程序。采用LGPL或GPL許可證。它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案。它包含了非常先進(jìn)的音頻/視頻編解碼庫libavcodec,為了保證高可移植性和編解碼質(zhì)量,libavcodec里很多code都是從頭開發(fā)的。
FFmpeg在Linux平臺下開發(fā),但它同樣也可以在其它操作系統(tǒng)環(huán)境中編譯運(yùn)行,包括Windows、Mac OS X等。這個項目最早由Fabrice Bellard發(fā)起,2004年至2015年間由Michael Niedermayer主要負(fù)責(zé)維護(hù)。許多FFmpeg的開發(fā)人員都來自MPlayer項目,而且當(dāng)前FFmpeg也是放在MPlayer項目組的服務(wù)器上。項目的名稱來自MPEG視頻編碼標(biāo)準(zhǔn),前面的"FF"代表"Fast Forward"
FFmpeg被許多開源項目采用,QQ影音、暴風(fēng)影音等。
1.FFmpeg環(huán)境搭建
????FFmpeg下載

下載Windows適用的版本

下載Windows適用的版本
2.配置環(huán)境變量
將解壓后的路徑添加至環(huán)境變量中。

配置環(huán)境變量
打開CMD,輸入ffmpeg -version若如下圖所示,則表示配置成功。

安裝成功
3.FFmpeg命令
- 把a(bǔ)vi格式轉(zhuǎn)為mp4
ffmpeg -i test.avi -c:v libx264 -s 1280x720 -pix_fmt yuv420p -b:a 63k -b:v 753k -r 18 .\test.mp4
-c:v 視頻編碼為x264 ,x264編碼是H264的一種開源編碼格式。
-s 設(shè)置分辨率
-pix_fmt yuv420p:設(shè)置像素采樣方式,主流的采樣方式有三種,YUV4:4:4,YUV4:2:2,YUV4:2:0,它的作用是 根據(jù)采樣方式來從碼流中還原每個像素點(diǎn)的YUV(亮度信息與色彩信息)值。
-b 設(shè)置碼率,-b:a和-b:v分別表示音頻的碼率和視頻的碼率,-b表示音頻加視頻的總碼率。碼率對一個視頻質(zhì)量有 很大的作用,后邊會介紹。
-r:幀率,表示每秒更新圖像畫面的次數(shù),通常大于24肉眼就沒有連貫與停頓的感覺了。
# 碼率
碼率又叫比特率即每秒傳輸?shù)腷it數(shù),單位為bps(Bit Per Second),碼率越大傳送數(shù)據(jù)的速度越快。
碼率的計算公式是:文件大小(轉(zhuǎn)成bit)/ 時長(秒)/1024 = kbps 即每秒傳輸千位數(shù)
例如一個1M的視頻,它的時長是10s,它的碼率等于
1*1024*1024*8/10/1024 = 819Kbps
- mp4生成m3u8
# 將test.mp4視頻文件按每10秒生成一個ts文件,最后生成一個m3u8文件,m3u8文件就是ts的索引文件
ffmpeg ‐i test.mp4 ‐hls_time 10 ‐hls_list_size 0 ‐hls_segment_filename ./hls/test_%05d.ts ./hls/test.m3u8
-hls_time 設(shè)置每片的長度,單位為秒
-hls_list_size n: 保存的分片的數(shù)量,設(shè)置為0表示保存所有分片
-hls_segment_filename :段文件的名稱,%05d表示5位數(shù)字
測試
- html 代碼Demo
<html>
<head>
<link rel="stylesheet">
<script src="https://cdn.bootcss.com/video.js/7.4.1/video.min.js"></script>
<script src="https://cdn.bootcss.com/videojs-contrib-hls/5.11.0/videojs-contrib-hls.js"></script>
</head>
<body>
<video id="my-video" class="video-js vjs-big-play-centered" controls="controls" preload="auto" width="1280" height="480"
poster="http://192.168.1.36/video/test.jpg" data-setup="{}">
<source src="http://192.168.1.36/video/demo1/test.m3u8" type='application/x-mpegURL'>
<p class="vjs-no-js">
To view this video please enable JavaScript, and consider upgrading to a web browser that
<a target="_blank">supports HTML5 video</a>
</p>
</video>
</body>
</html>
- 將html Demo文件、視頻ts分片以及索引文件m3u8放置在Nginx指向的路徑下。
通過Nginx 的http代理來訪問Demo html文件。
http://192.168.1.36/video/html/index.html