前主流的流媒體服務器主要有 nginx-rtmp、crtmpd、wowza、red5、adobe fms等。
協(xié)議是服務器的基礎,協(xié)議決定了關鍵應用場景,譬如毫秒級別延時只能用udp,秒級別延遲用RTMP,十秒級別可以用HLS。
Feature | SRS | NGINX | CRTMPD | AMS | WOWZA |
RTMP | Stable | Stable | Stable | Stable | Stable |
HLS | Stable | Stable | X | Stable | Stable |
HTTP FLV | Stable | X | X | X | X |
HLS(aonly) | Stable | X | X | Stable | Stable |
HDS | Experiment | X | X | Stable | Stable |
MPEG-DASH | Experiment | X | X | X | X |
HTTP Server | Stable | Stable | X | X | Stable |
比起YY的那種UDP私有協(xié)議,RTMP算延遲大的(延遲在1-3秒),比起HTTP流的延時(一般在10秒以上)RTMP算低延時。
一般的直播應用,只要不是電話類對話的那種要求,RTMP延遲是可以接受的。在一般的視頻會議(參考SRS的視頻會議延時)應用中,RTMP延時也能接受,原因是別人在說話的時候我們一般在聽,實際上1秒延時沒有關系,我們也要思考(話說有些人的CPU處理速度還沒有這么快)。
技術一定要知道弱點,RTMP有個弱點就是累積誤差,原因是RTMP基于TCP不會丟包。所以當網(wǎng)絡狀態(tài)差時,服務器會將包緩存起來,導致累積的延遲;待網(wǎng)絡狀況好了,就一起發(fā)給客戶端。這個的對策就是,當客戶端的緩沖區(qū)很大,就斷開重連。當然SRS也提供配置。
SRS集群(邊緣)不會增加延遲
C++音視頻學習資料免費獲取方法:關注音視頻開發(fā)T哥,點擊「鏈接」即可免費獲取2023年最新C++音視頻開發(fā)進階獨家免費學習大禮包!
配置SRS為低延時模式,可以將RTMP延遲降低到0.8-3秒:
# conf/realtime.conf
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
tcp_nodelay on;
min_latency on;
play {
gop_cache off;
queue_length 10;
mw_latency 100;
}
publish {
mr off;
}
}
低延時模式影響性能,更多參考如下:
github.com/ossrs/srs/w…
可以將HLS延遲降低到3-5秒:
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
hls {
enabled on;
hls_path ./objs/nginx/html;
hls_fragment 0.2;
hls_window 2;
hls_wait_keyframe off;
}
}
HLS還可考慮使用FLV協(xié)議替換
GOP = 1;Profile = baseline; Tune = zerolatency (主要是GOP編碼參數(shù)),例如OBS的編碼設置如下:
測試結果,RTMP為1秒、m3u8為3秒:
作者:郎涯技術 鏈接:https://juejin.cn/post/6996664571117174798
#音視頻開發(fā)#
LS (HTTP Live Streaming),Apple的動態(tài)碼率自適應技術。主要用于PC和Apple終端的音視頻服務。包括一個m3u(8)的索引文件,TS媒體分片文件和key加密串文件。
HLS (HTTP Live Streaming)
常用的流媒體協(xié)議主要有 HTTP 漸進下載和基于 RTSP/RTP 的實時流媒體協(xié)議,這二種基本是完全不同的東西,目前比較方便又好用的是用 HTTP 漸進下載方法。在這個中 apple 公司的 HTTP Live Streaming 是這個方面的代表。它最初是蘋果公司針對iPhone、iPod、iTouch和iPad等移動設備而開發(fā)的流.現(xiàn)在見到在桌面也有很多應用了,HTML5 是直接支持這個。
但是HLS協(xié)議的小切片方式會生成大量的文件,存儲或處理這些文件會造成大量資源浪費。如果要實現(xiàn)數(shù)天的時移,索引量將會是個巨額數(shù)字,并明顯影響請求速度。因此,HLS協(xié)議對存儲I/O要求相當苛刻。對此,也有公司提出了非常好的解決方案。
新型點播服務器系統(tǒng),獨創(chuàng)了內(nèi)存緩存數(shù)據(jù)實時切片技術,顛覆了這種傳統(tǒng)實現(xiàn)方法,從根本上解決了大量切片的碎片問題,使得單臺服務器的切片與打包能力不再是瓶頸。其基本原理如下:
不將TS切片文件存到磁盤,而是存在內(nèi)存當中,這種技術使得服務器的磁盤上面不再會有“數(shù)以噸計”的文件碎片,極大減少了磁盤的I/O次數(shù),延長了服務器磁盤的使用壽命,極大提高了服務器運行的穩(wěn)定性。同時,由于使用這種技術,使得終端請求數(shù)據(jù)時直接從服務器的內(nèi)存中獲取,極大提高了對終端數(shù)據(jù)請求的反應速度,優(yōu)化了視頻觀看體驗。
使用下面兩個工具
1、ffmpeg(下載地址:http://ffmpeg.org/download.html)
ffmpeg用來負責把直播流(RTSP)切片成*.ts文件
主要參數(shù):
-i 設定輸入流
-f 設定輸出格式
-ss 開始時間
視頻參數(shù):
-b 設定視頻流量,默認為200Kbit/s
-r 設定幀速率,默認為25
-s 設定畫面的寬與高
-aspect 設定畫面的比例
-vn 不處理視頻
-vcodec 設定視頻編解碼器,未設定時則使用與輸入流相同的編解碼器
-keyint_min 60 最小關鍵幀間隔
-g 60 GOP 長度
-sc_threshold 0 根據(jù)視頻的運動場景,自動為你添加額外的I 幀,所以會導致你編出來的視頻關鍵幀間隔不是你設置的長度,
這是只要將它設為0
音頻參數(shù):
-ar 設定采樣率
-ac 設定聲音的Channel 數(shù)
-acodec 設定聲音編解碼器,未設定時則使用與輸入流相同的編解碼器
-an 不處理音頻
----------------------------------------------------分隔線----------------------------------------------------
主要參數(shù)
-i 設定輸入檔名。
-f 設定輸出格式。
-y 若輸出檔案已存在時則覆蓋檔案。
-fs 超過指定的檔案大小時則結束轉換。
-ss 從指定時間開始轉換。
-title 設定標題。
-timestamp 設定時間戳。
-vsync 增減Frame 使影音同步。
影像參數(shù)
-b 設定影像流量,默認為200Kbit/秒。( 單位請參照下方注意事項)
-r 設定FrameRate 值,默認為25。
-s 設定畫面的寬與高。
-aspect 設定畫面的比例。
-vn 不處理影像,于僅針對聲音做處理時使用。
-vcodec 設定影像影像編解碼器,未設定時則使用與輸入檔案相同之編解碼器。
聲音參數(shù)
-ab 設定每Channel(最近的SVN 版為所有Channel 的總合)的流量。( 單位請參照下方注意事項)
-ar 設定采樣率。
-ac 設定聲音的Channel 數(shù)。
-acodec 設定聲音編解碼器,未設定時與影像相同,使用與輸入檔案相同之編解碼器。
-an 不處理聲音,于僅針對影像做處理時使用。
-vol 設定音量大小,256 為標準音量。(要設定成兩倍音量時則輸入512,依此類推。)
注意事項
以-b 及ab 參數(shù)設定流量時,根據(jù)使用的ffmpeg 版本,須注意單位會有kbits/sec 與bits/sec 的不同。(可用ffmpeg -h 顯
示說明來確認單位。)
例如,單位為bits/sec 的情況時,欲指定流量64kbps 時需輸入‘ -ab 64k ’;單位為kbits/sec 的情況時則需輸入‘ -ab 64 ’。
以-acodec 及-vcodec 所指定的編解碼器名稱,會根據(jù)使用的ffmpeg 版本而有所不同。例如使用AAC 編解碼器時,會有輸入aac
與libfaac 的情況。此外,編解碼器有分為僅供解碼時使用與僅供編碼時使用,因此一定要利用ffmpeg -formats 確認輸入的
編解碼器是否能運作。
2、WEB服務器(IIS,Apache,Nginx)分發(fā)切片
web服務器配置在這里就不多說了。
demo:http://live.16it.wang
如有需要源碼的可以聯(lián)系我:519468341
是一種將直播流模擬成FLV文件,通過HTTP協(xié)議進行下載的模式來實現(xiàn)流媒體傳輸?shù)膮f(xié)議,端口號80
一般建議使用HTTP FLV,實時性和RTMP相等。
優(yōu)點:HTTP相比于RTMP省去了一些協(xié)議交互時間,首屏時間更短。HTTP可拓展的功能更多。
Adobe公司的流媒體傳輸協(xié)議,端口號1935
普通網(wǎng)絡用戶均可使用,包括非IOS平臺用戶,對非80端口(如1935)無限制的網(wǎng)絡環(huán)境用戶。
優(yōu)點:防HTTP下載,延時短。
缺點:web端播放rtsp流的話,需要寫插件,而且對瀏覽器也很挑剔,flash不支持rtsp,需要做activeX插件
目前的CDN都是基于RTMP的
HLS
IOS平臺下的流媒體傳輸協(xié)議 ,端口號80
優(yōu)點:H5瀏覽器支持比較好,IOS,安卓原生支持。
缺點:延遲性比較大。樓上說的切片,關鍵幀改變后切片時間可以縮短,而且可以自己設定首次產(chǎn)生多少分片。
音視頻開發(fā)教學視頻:【免費】FFmpeg/WebRTC/RTMP/NDK/Android音視頻流媒體高級開發(fā)-學習視頻教程-騰訊課堂
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。