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時要一致