### [rtmp url基礎](https://pengrl.com/lal/#/RTMPURLVhost?id=rtmp-url%e5%9f%ba%e7%a1%80)
rtmp url的格式類似于http url。格式如下:
~~~cpp
rtmp://<host>[:port]/<appName>/<streamName>[?param1=value1][¶m2=value2]
~~~
*其中rtmp是scheme字段,固定不變。*
我們以rtmp play拉流來說明(publish類似)。rtmp拉流客戶端的邏輯:
第一步,如果host部分是domain域名,則先通過域名解析得到對端ip。
第二步,使用對端ip加port建立tcp連接。注意,如果url中不存在port,則使用1935。
第三步,客戶端和服務端通過rtmp信令的交互,建立好拉流通道,之后服務端給客戶端下發對應流的音視頻數據。這里有的同學可能會疑惑,域名解析成ip進行tcp連接后,服務端如何知道客戶端連接時用的域名是啥?
答案是客戶端通過rtmp信令,將域名傳輸給了服務端。
具體點,是rtmp connect信令(注意,這個connect不是tcp connect)和play信令。看一個簡單的url例子。
*測試前,修改/etc/hosts,使得fake.lal.com這個假的測試域名解析到本地127.0.0.1的*[*lalserver*](https://github.com/q191201771/lal)*上。客戶端使用ffmpeg。*
~~~cpp
ffplay rtmp://fake.lal.com/live/test110信令值:connect appName: live tcUrl: rtmp://fake.lal.com:1935/liveplay streamName: test110
~~~
### [vhost](https://pengrl.com/lal/#/RTMPURLVhost?id=vhost)
先說vhost的作用。舉個例子,假設你自身有一個rtmp服務器(后面將這個服務器稱為源站),上面有很多流。源站由于網絡以及負載的原因,并不能服務全國的觀眾拉流,于是你為了更好的播放效果,使用了阿里CDN做流分發,也即用戶從阿里CDN的邊緣節點拉流,阿里CDN從你的源站回源拉流。
又由于你擔心阿里CDN不可靠,于是你又加了一家騰訊CDN。用戶可以上任意一家CDN拉取任意一路你源站上的流。
此時,問題來了,你的源站被拉流時,如何區分是哪家CDN來拉流的呢?簡單的做法,你可以申請兩個域名,比如阿里使用`alfake.lal.com`,騰訊使用`txfake.lal.com`,它們的DNS解析都指向源站IP。
但這么做有個缺點,就是后續有變化,需要頻繁操作域名,比如又要接入CDN3,CDN4...然后說說vhost的做法。其實很簡單,就是url的host只用一個,在非host部分,填入一個域名字段。由于不是host,就不涉及到DNS域名解析。你可以任意命名,快速提供給CDN。那么具體放哪呢,這實際上是一個行業潛規則。常見的有兩種:
*還拿前面那個例子rtmp://fake.lal.com/live/test110來用*
第一種,在host和appName之間增加了一級目錄。服務端需要從rtmp connect信令中解析。
~~~plain
rtmp://fake.lal.com/alfake.lal.com/live/test110信令值:connect appName: alfake.lal.com/live tcUrl: rtmp://fake.lal.com:1935/alfake.lal.com/liveplay streamName: test110
~~~
第二種,更簡單些,直接增加一個url參數。服務端需要從rtmp play信令中解析。
~~~plain
rtmp://fake.lal.com/alfake.lal.com/live/test110信令值:connect appName: live tcUrl: rtmp://fake.lal.com:1935/liveplay streamName: test110?vhost=alfake.lal.com
~~~
原創不易,轉載請注明文章出自開源流媒體服務器[lal](https://github.com/q191201771/lal),Github:[https://github.com/q191201771/lal](https://github.com/q191201771/lal)官方文檔:[https://pengrl.com/lal](https://pengrl.com/lal)yoko,
- 序言
- 編解碼
- H264
- HEVC碼流解析
- H264編碼原理
- 多媒體封裝
- MP4
- 學好 MP4,讓直播更給力
- AAC
- FLV
- 流媒體協議
- RTSP
- RTCP
- RTP
- H265 RTP封包筆記
- SDP
- RTMP
- RTMP URL
- rtmp url基礎
- webrtc
- 編譯
- 最簡單的編譯webrtc方案
- Webrtc音視頻會議之Webrtc“不求甚解”
- Webrtc音視頻會議之Mesh/MCU/SFU三種架構
- 音頻傳輸之Jitter Buffer設計與實現
- Janus
- Webrtc音視頻會議之Janus編譯
- Webrtc音視頻會議之Janus源碼架構設計
- webrtc服務器-janus房間管理
- 源碼分析
- WebRTC視頻JitterBuffer詳解
- 走讀Webrtc 中的視頻JitterBuffer(一)
- 走讀webrtc 中的視頻JitterBuffer(二)
- webrtc視頻幀率控制算法機制
- 目標碼率丟幀-1
- 目標幀率丟幀-2
- 29 如何使用Medooze 實現多方視頻會議
- FFmpeg
- FFmpeg編譯
- Window10下編譯最新版FFmpeg的方法步驟
- FFMPEG靜態庫編譯
- ffmpeg實現畫中畫
- FFmpeg推流器
- ffmpeg-aac
- OpenCV
- OpenCV學習筆記——視頻的邊緣檢測
- 圖像特征點匹配(視頻質量診斷、畫面抖動檢測)
- 圖像質量診斷