RTMP是一種設計用來進行實時資料通信的網絡協定,主要用來在Flash/AIR平台和支援RTMP協定的流媒體/互動伺服器之間進行音視訊和資料通信。支援該協定的軟體包括Adobe Media Server、Ultrant Media Server、red5、nginx。
HTTP Live Streaming(HLS)是蘋果公司(Apple Inc.)實作的基于HTTP的流媒體傳輸協定,可實作流媒體的直播和點播,相對于常見的流媒體直播協定,例如RTMP協定、RTSP協定、MMS協定 等,HLS直播最大的不同在于,直播用戶端擷取到的,并不是一個完整的資料流。HLS協定在伺服器端将直播資料流存儲為連續的、很短時長的媒體檔案 (MPEG-TS格式),而用戶端則不斷的下載下傳并播放這些小檔案,因為伺服器端總是會将最新的直播資料生成新的小檔案,這樣用戶端隻要不停的按順序播放從伺服器擷取到的檔案,就實作了直播。由此可見,基本上可以認為,HLS是以點播的技術方式來實作直播。由于資料通過HTTP協定傳輸,是以完全不用考慮防火牆或者代理的問題,而且分段檔案的時長很短,用戶端可以很快的選擇和切換碼率,以适應不同帶寬條件下的播放。不過HLS的這種技術特點,決定了它的延遲 一般總是會高于普通的流媒體直播協定。
nginx配合ffmpeg做流媒體伺服器的原理是:nginx通過rtmp子產品提供rtmp服務, ffmpeg推送一個rtmp流到nginx, 然後用戶端通過通路nginx來收看實時視訊流. HLS也是差不多的原理,隻是最終用戶端是通過HTTP協定來通路的,但是ffmpeg推送流仍然是rtmp的。
1、推送視訊檔案到rtmp上
ffmpeg -re -i "D:\videos\test1.mp4"-vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv-s 1280x720 -q 10 rtmp://127.0.0.1:1935/live/test1
2、推送到視訊檔案到hls上
ffmpeg -re -i "D:\videos\test1.mp4"-vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv-s 1280x720 -q 10 rtmp://127.0.0.1:1935/hls/test2
3、執行ffmpeg指令進行rtsp協定轉成rtmp:
ffmpeg -i"rtsp://admin:[email protected]/h264/ch1/main/av_stream" -f flv -r25 -s 640x480 -an "rtmp://127.0.0.1:1935/live/test3"
-i:後面是我所需要的攝像頭協定
-f flv:後面是我要轉到nginx的rtmp伺服器上
-s:視訊解析度:(配置設定率)也就是能調視屏的清晰度,如果在本機上測試建議640*480就好,改變視屏流的解析式cpu會消耗很大
(rtmp服務位址:rtmp://127.0.0.1:1935/myapp/test2)
127.0.0.1:nginx啟動的機器ip
1935:端口号(之前在nginx.conf裡配置的)
live:是application後面的名稱
test3:可以随便起,記得到時候通路rtmp時要一緻