提問:
- day01:
- 1弄贿、何為直播?何為點播矫膨?
- 2差凹、簡述推流、拉流的工作流程侧馅?
- 3危尿、常見的直播協(xié)議有哪些?之間有什么區(qū)別馁痴?
- 4谊娇、常見的點播協(xié)議有有哪些?
- 5罗晕、何為Nginx济欢?有什么特點赠堵?
- 6、何為homebrew法褥?你用它安裝過什么茫叭?常用命令有哪些?
- 7挖胃、ffmpeg是什么杂靶?
- 8、RTMP酱鸭、HLS協(xié)議各自的端口號是吗垮?
- 9、m3u8構(gòu)成是凹髓?直播中m3u8烁登、ts如何實時更新?
- 10蔚舀、音視頻的編解碼器分別是什么饵沧?
- 11、簡述如何在Mac上搭建本地直播服務(wù)器赌躺?
回答:
1狼牺、我認為:直播是一個三方交互(主播、服務(wù)器礼患、觀眾)是钥,這個交互式實時的!盡管會根據(jù)選擇的協(xié)議不同而有一些延遲缅叠,但我們?nèi)哉J為它直播是實時的悄泥!--->主播在本地發(fā)送音視頻給服務(wù)器(推流),觀眾從服務(wù)器實時解碼(拉流)收看收聽主播發(fā)送給服務(wù)器的音視頻(直播內(nèi)容)肤粱。直播是不能快進的弹囚!
點播:首先一定要明確的一點,點播不存在推流這一過程领曼,你本身你的流已經(jīng)早就推給服務(wù)器了鸥鹉,或者這么說也不對,應(yīng)該是你的音視頻早就上傳到了服務(wù)器悯森,觀眾只需要在線收看即可宋舷,由于你的音視頻上傳到了服務(wù)器,觀眾則可以通過快進瓢姻,快退祝蝠,調(diào)整進度條等手段各種收看!2、推流:在直播中绎狭,主播方向服務(wù)器發(fā)送請求细溅,向服務(wù)器推送自己正在實時直播的內(nèi)容,而這些內(nèi)容在推送到服務(wù)器的這一過程中是以 “流” 的形式傳遞的儡嘶,這就是“推流”喇聊,把音視頻數(shù)據(jù)以流的方式推送(或上傳)到服務(wù)器的過程就是“推流”!主播方的音視頻往往會很大蹦狂,在推流的過程中首先按照 acc音頻-編碼 和 h264視頻-編碼的內(nèi)部把主播推過來的音視頻壓縮誓篱,然后合并成 MP4或者 FLV格式,然后遵守直播的封裝協(xié)議凯楔,最后傳給服務(wù)器完成推流過程窜骄!
拉流與推流正好相反,拉流是觀眾從服務(wù)器獲取主播推流給服務(wù)器的音視頻的過程摆屯,這就是“拉流”邻遏!拉流首先acc音頻-解碼 和 h264視頻-解碼的內(nèi)部把主播推過來的音視頻解壓縮,然后合成 MP4或者 FLV 格式虐骑,再解封裝准验,最后到我們的客戶端與觀眾進行交互!
總結(jié)來看廷没,拉流與推流就是因為音視頻太大了糊饱!不方便原封不動的直接“生傳”給服務(wù)器,而且天下主播千千萬每天跟新聞聯(lián)播似的準時準點兒的訪問我的服務(wù)器5呃琛<盟啤!地主家也揭不開鍋罢电汀!1推恕唉铜!服務(wù)器寶寶苦,但是寶寶不說~寶寶直接崩潰B筛堋L读鳌!
-
3柜去、常見的直播協(xié)議有三種 RTMP灰嫉、HLS、FLV...
- 1嗓奢、RTMP:real time messaging protocol實時傳輸協(xié)議該協(xié)議功能龐大讼撒,即可以用來推送也可以用于直播,從主播方推流到服務(wù)器會用到這個協(xié)議!RTMP 的端口號為1935根盒;
- 2钳幅、FLV:adobe 公司出品必屬精品!flash video:體積小炎滞,傳輸速度快敢艰!adobe 主推!
- 3册赛、HLS:蘋果原生:HTTP Live Streaming钠导,遵循的是 HTTP 超文本傳輸協(xié)議,端口號8080森瘪,是未來的趨勢牡属!
-
4、常見的點播協(xié)議有三種:MP4柜砾、FLV湃望、HLS:
- 1、MP4:應(yīng)用廣泛痰驱,App 大都支持证芭,網(wǎng)頁支持也很好,但是內(nèi)部結(jié)構(gòu)復(fù)雜担映,體積較大废士,處理成本較高,在線播放會較慢蝇完;
-2官硝、FLV:必須要 App 播放,加載進度較慢短蜕;
-3氢架、蘋果原生,精簡的m3u8的索引結(jié)構(gòu)可以規(guī)避MP4的索引慢問題朋魔,適合點播岖研;
- 1、MP4:應(yīng)用廣泛痰驱,App 大都支持证芭,網(wǎng)頁支持也很好,但是內(nèi)部結(jié)構(gòu)復(fù)雜担映,體積較大废士,處理成本較高,在線播放會較慢蝇完;
5、Nginx 是一個遵循 HTTP 協(xié)議的服務(wù)器警检!內(nèi)存占用少孙援,并發(fā)能力強!
6扇雕、homebrew是一個 Mac系統(tǒng)下所獨有的套件管理器拓售,我要做直播,需要 rtmp 和 nginx 镶奉,單獨安裝很復(fù)雜础淤,只要在終端里輸入簡單的安裝相應(yīng)的套件命令即可完成安裝崭放,復(fù)雜的過程都靠 homebrew 規(guī)避掉了!
我用它安裝過很多東西值骇,比如今天的 nginx 搭建服務(wù)器等莹菱。
常用命令:brew install 、brew uninstall吱瘩、brew search道伟、brew list、brew update使碾、brew help 等~7蜜徽、FFmpeg是一套用來記錄和轉(zhuǎn)換數(shù)字音視頻,并能將其轉(zhuǎn)化為流的開源計算機程序票摇。拉流和推流離不開 FFmpeg 的幫助拘鞋!
8、RTMP端口號:1935-----HLS:8080矢门;
9盆色、m3u8:是一個播放列表,通過ffmpeg將本地的xxx.mp4進行切片處理祟剔,生成m3u8播放列表(索引文件)和N多個 .ts文件隔躲,并將其(m3u8、N個ts)放置在本地搭建好的webServer服務(wù)器的指定目錄下物延,我就可以得到一個可以實時播放的網(wǎng)址宣旱,我們把這個旺旺號資復(fù)制到 VLA 上可以實時觀看!
在 HLS 流下叛薯,本地視頻被分割成一個一個的小切片浑吟,一般10秒一個,這些個小切片被 m3u8管理耗溜,并且隨著終端的ffmpeg 向本地拉流的命令而實時更新组力,影片進度隨著拉流的進度而更新,播放過的片段不在本地保存抖拴,自動刪除忿项,直到該文件播放完畢或停止,ts 切片會相應(yīng)的被刪除城舞,流停止,影片不會立即停止寞酿,影片播放會滯后于拉流一段時間家夺,10、音頻的編解碼器是acc: Advanced Audio Coding伐弹,高級音頻編(解)碼器拉馋;
視頻的編解碼器是:H264(libx264);-
11、在 Mac 上搭建本地服務(wù)器:
- 1煌茴、安裝 homebrew随闺;
2、執(zhí)行命令:brew tap homebrew/nginx 和 brew -install nginx-full --with-rtmp-module-->安裝nginx蔓腐,并帶有rtmp-module直播流模塊從而完成安裝
3矩乐、進入網(wǎng)址:http://localhost:8080 驗證nginx開啟狀態(tài);如果安裝成功會顯示歡迎來到 nginx回论!哈哈哈~
4散罕、啟動 nginx!在終端執(zhí)行 nginx 命令傀蓉!
5欧漱、配置nginx.conf--->
添加如下代碼塊:
rtmp {
server {
listen 1935;
chunk_size 4000;
# RTMP 直播流配置
application rtmplive {
live on;
#為 rtmp 引擎設(shè)置最大連接數(shù)。默認為 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奕翔、補充內(nèi)容:
- 1、其中浩蓉,HLS流表現(xiàn)較明顯派继,在nginx的臨時目錄下,直觀的可看到m3u8索引文件和N多個.ts文件捻艳。m3u8列表會實時更新驾窟,且會動態(tài)更改當前播放索引切片(.ts)。這種實時更新的機制认轨,不會使得.ts文件長時間存在于Nginx服務(wù)器上绅络,且當推流結(jié)束之后,該目錄下的內(nèi)容會被全部清除嘁字,這樣無形中減緩了nginx服務(wù)器的壓力恩急。另外,也闡釋了HLS這種流媒體播放相較RTMP延時較高的原因纪蜒。