提問:
- day01:
- 1、何為直播?何為點播?
- 2、簡述推流、拉流的工作流程?
- 3、常見的直播協議有哪些?之間有什么區別?
- 4、常見的點播協議有有哪些?
- 5、何為Nginx?有什么特點?
- 6、何為homebrew?你用它安裝過什么?常用命令有哪些?
- 7、ffmpeg是什么?
- 8、RTMP、HLS協議各自的端口號是?
- 9、m3u8構成是?直播中m3u8、ts如何實時更新?
- 10、音視頻的編解碼器分別是什么?
- 11、簡述如何在Mac上搭建本地直播服務器?
回答:
1、我認為:直播是一個三方交互(主播、服務器、觀眾),這個交互式實時的!盡管會根據選擇的協議不同而有一些延遲,但我們仍認為它直播是實時的!--->主播在本地發送音視頻給服務器(推流),觀眾從服務器實時解碼(拉流)收看收聽主播發送給服務器的音視頻(直播內容)。直播是不能快進的!
點播:首先一定要明確的一點,點播不存在推流這一過程,你本身你的流已經早就推給服務器了,或者這么說也不對,應該是你的音視頻早就上傳到了服務器,觀眾只需要在線收看即可,由于你的音視頻上傳到了服務器,觀眾則可以通過快進,快退,調整進度條等手段各種收看!2、推流:在直播中,主播方向服務器發送請求,向服務器推送自己正在實時直播的內容,而這些內容在推送到服務器的這一過程中是以 “流” 的形式傳遞的,這就是“推流”,把音視頻數據以流的方式推送(或上傳)到服務器的過程就是“推流”!主播方的音視頻往往會很大,在推流的過程中首先按照 acc音頻-編碼 和 h264視頻-編碼的內部把主播推過來的音視頻壓縮,然后合并成 MP4或者 FLV格式,然后遵守直播的封裝協議,最后傳給服務器完成推流過程!
拉流與推流正好相反,拉流是觀眾從服務器獲取主播推流給服務器的音視頻的過程,這就是“拉流”!拉流首先acc音頻-解碼 和 h264視頻-解碼的內部把主播推過來的音視頻解壓縮,然后合成 MP4或者 FLV 格式,再解封裝,最后到我們的客戶端與觀眾進行交互!
總結來看,拉流與推流就是因為音視頻太大了!不方便原封不動的直接“生傳”給服務器,而且天下主播千千萬每天跟新聞聯播似的準時準點兒的訪問我的服務器!!!地主家也揭不開鍋啊!!!服務器寶寶苦,但是寶寶不說~寶寶直接崩潰!!!
-
3、常見的直播協議有三種 RTMP、HLS、FLV...
- 1、RTMP:real time messaging protocol實時傳輸協議該協議功能龐大,即可以用來推送也可以用于直播,從主播方推流到服務器會用到這個協議!RTMP 的端口號為1935;
- 2、FLV:adobe 公司出品必屬精品!flash video:體積小,傳輸速度快!adobe 主推!
- 3、HLS:蘋果原生:HTTP Live Streaming,遵循的是 HTTP 超文本傳輸協議,端口號8080,是未來的趨勢!
-
4、常見的點播協議有三種:MP4、FLV、HLS:
- 1、MP4:應用廣泛,App 大都支持,網頁支持也很好,但是內部結構復雜,體積較大,處理成本較高,在線播放會較慢;
-2、FLV:必須要 App 播放,加載進度較慢;
-3、蘋果原生,精簡的m3u8的索引結構可以規避MP4的索引慢問題,適合點播;
- 1、MP4:應用廣泛,App 大都支持,網頁支持也很好,但是內部結構復雜,體積較大,處理成本較高,在線播放會較慢;
5、Nginx 是一個遵循 HTTP 協議的服務器!內存占用少,并發能力強!
6、homebrew是一個 Mac系統下所獨有的套件管理器,我要做直播,需要 rtmp 和 nginx ,單獨安裝很復雜,只要在終端里輸入簡單的安裝相應的套件命令即可完成安裝,復雜的過程都靠 homebrew 規避掉了!
我用它安裝過很多東西,比如今天的 nginx 搭建服務器等。
常用命令:brew install 、brew uninstall、brew search、brew list、brew update、brew help 等~7、FFmpeg是一套用來記錄和轉換數字音視頻,并能將其轉化為流的開源計算機程序。拉流和推流離不開 FFmpeg 的幫助!
8、RTMP端口號:1935-----HLS:8080;
9、m3u8:是一個播放列表,通過ffmpeg將本地的xxx.mp4進行切片處理,生成m3u8播放列表(索引文件)和N多個 .ts文件,并將其(m3u8、N個ts)放置在本地搭建好的webServer服務器的指定目錄下,我就可以得到一個可以實時播放的網址,我們把這個旺旺號資復制到 VLA 上可以實時觀看!
在 HLS 流下,本地視頻被分割成一個一個的小切片,一般10秒一個,這些個小切片被 m3u8管理,并且隨著終端的ffmpeg 向本地拉流的命令而實時更新,影片進度隨著拉流的進度而更新,播放過的片段不在本地保存,自動刪除,直到該文件播放完畢或停止,ts 切片會相應的被刪除,流停止,影片不會立即停止,影片播放會滯后于拉流一段時間,10、音頻的編解碼器是acc: Advanced Audio Coding,高級音頻編(解)碼器;
視頻的編解碼器是:H264(libx264);-
11、在 Mac 上搭建本地服務器:
- 1、安裝 homebrew;
2、執行命令:brew tap homebrew/nginx 和 brew -install nginx-full --with-rtmp-module-->安裝nginx,并帶有rtmp-module直播流模塊從而完成安裝
3、進入網址:http://localhost:8080 驗證nginx開啟狀態;如果安裝成功會顯示歡迎來到 nginx!哈哈哈~
4、啟動 nginx!在終端執行 nginx 命令!
5、配置nginx.conf--->
添加如下代碼塊:
rtmp {
server {
listen 1935;
chunk_size 4000;
# RTMP 直播流配置
application rtmplive {
live on;
#為 rtmp 引擎設置最大連接數。默認為 off
max_connections 1024;
}
# HLS 直播流配置
application hls{
live on;
hls on;
hls_path /usr/local/var/www/hls;
hls_fragment 5s;
}
}
}
location /hls {
# Serve HLS fragments
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /usr/local/var/www;
add_header Cache-Control no-cache;
}
-
6、ffmpeg推流至nginx:可以推兩種流:
- 1、RTMP流,推流至rtmplive;
- 2、HLS流,推流至hls;
-
7、補充內容:
- 1、其中,HLS流表現較明顯,在nginx的臨時目錄下,直觀的可看到m3u8索引文件和N多個.ts文件。m3u8列表會實時更新,且會動態更改當前播放索引切片(.ts)。這種實時更新的機制,不會使得.ts文件長時間存在于Nginx服務器上,且當推流結束之后,該目錄下的內容會被全部清除,這樣無形中減緩了nginx服務器的壓力。另外,也闡釋了HLS這種流媒體播放相較RTMP延時較高的原因。