標籤:net idt scribe 檔案的 target 響應 cli 參數 gravity
前段時間由於工作需要做了一個ApsaraVideo for Live/智能家居類的應用。算是對iOS音視頻專欄中流ApsaraVideo for Media Processing做了一次小結。這裡想把整個開發流程紀錄下來,一方面是和大家共同探討學習,另一方面也可以方便自己以後查漏補缺。
整個開發沒有藉助任何第三方架構,所有流媒體協議都是一行行敲上去的,為什麼呢?呵呵 授之以魚不如授之以漁!
下面開始先瞭解下整個軟體的架構。
前端我們在IOS audio&video 專欄中已經介紹的非常詳細了,包括網路攝影機、音視頻的各種處理都做了詳細的分析。後端我們也在IOS audio&video 專欄的FFmpeg中、進階使用中也做了詳細的介紹,這裡也不再討論。下面就網路部分做詳細的分析。
(1)RTCP
RTCP:RTP Control Protocol,即時傳輸控制通訊協定,一般和RTP配合使用,主要用於資料轉送的監視,控制功能。同時RTCP是基於UDP傳輸的。RTCP傳輸的這些資訊非常重要,主要包括:時間戳記(用於同步)、序號(用於丟包和重排序檢測)、以及負載格式(用於說明資料的編碼格式)。簡單概括一下,就是用於QoS反饋和同步媒體流。與RTP比較而言,其頻寬一半佔用只有RTP的5%左右。非常小。
根據不同的使用狀態,RTCP分為下面幾種情況:
直播、智能家居類項目只要用到發送端報告,這裡我們會在後面的代碼中詳細分析。
(2)RTP
Real-time Transport Protocol,即時傳輸協議,一般用於多媒體資料的傳輸。音視頻主要通過這個協議傳輸,它是建立在UDP協議上的,效率更高但允許丟包。所以在媒體重組時需要做不少工作。RTP協議包格式如下:
(3)SDP
我們先來看看抓包的網路請求過程:
伺服器響應資料。我們關心的部分:RTSP
response=RTSP/1.0 200 OK
CSeq: 1
Content-base: rtsp://192.168.36.168/
Date: 2015年7月29日 GMT+8下午2:52:00
Content-Type:application/sdp
Content-Length:424
SDP部分:
v=0
o=-1804289383 1804289383 IN IP4 192.168.36.168
s=Livestream from iOS
c=INIP4 0.0.0.0
t=00
a=control:*
m=video0 RTP/AVP 96
b=TIAS:85528
a=maxprate:9.0000
a=control:streamid=1
a=rtpmap:96H264/90000
a=mimetype:string;"video/H264"
a=framesize:96720-480
a=Width:integer;720
a=Height:integer;480i
a=fmtp:96packetization-mode=1;profile-level-id=64001e;sprop-parameter-sets=Z2QAHqxWwLQ9pqAgICBA,KO4CPLA=
可以很清晰的看到RTSP協議是包含兩部分的,第一部分為rtsp傳輸協議,另一部分是SDP協議。SDP準確的說其實不能算是傳輸層協議,而要規划到會話層協議部分。SDP(SessionDescription Protocol)是伺服器端產生的描述媒體檔案的編碼資訊以及所在伺服器的連結等資訊的檔案,用戶端通過它來設定播放軟體的參數。
(4)RTSP
有了以上的分析,我們基本瞭解了整個結構,那麼還剩下最後一部分,RTSP協議。即時資料流傳輸協議,是TCP/IP協議體系中的一個應用程式層協議。和Http協議類似。至於協議的具體結構我們放在後面和代碼一起講。
下面看看一個RTSP流媒體互動的簡單過程:這是一個比較典型的請求過程:
1. Client->Server:OPTION request //詢問S有哪些方法可用
1. Server->Client:OPTION response //S回應資訊中包括提供的所有可用方法
2. Client->Server:DESCRIBE request //要求得到S提供的媒體初始化描述資訊
2. Server->Client:DESCRIBE response //S回應媒體初始化描述資訊,主要是sdp
3. Client->Server:SETUP request //設定會話的屬性,以及傳輸模式,提醒S建立會話
3. Server->Client:SETUP response //S建立會話,返回工作階段識別項,以及會話相關資訊
4. Client->Server:PLAY request //C請求播放
4. Server->Client:PLAY response //S回應該請求的資訊
Server->Client:發送流媒體資料
5. Client->Server:TEARDOWN request //C請求關閉會話
5. Server->Client:TEARDOWN response //S回應該請求
IOS ApsaraVideo for Live/智能家居(一行行敲代碼,從零開始)lesson:1整體架構