即時串流傳輸指保證媒體信號頻寬與網路連接匹配,使媒體可被即時觀看到。即時串流與HTTP串流傳輸不同,他需要專用的串流媒體伺服器與傳輸協定。即時串流傳輸總是即時傳送,特別適合現場事件,也支持隨機訪問。即時串流傳輸必須匹配連接頻寬,這意味著在以數據機速度連接時圖像質量較差。而且,由於出錯丟失的資訊被忽略掉,網路擁擠或出現問題時,視頻質量很差。如欲保證視頻質量,順序流式傳輸也許更好。
即時串流傳輸需要特定伺服器,如QuickTime Streaming Server、RealServer與Windows Media Server。即時串流傳輸還需要特殊網路協定,如:RTSP (Realtime Streaming Protocol)或MMS (Microsoft Media Server)。
串流傳輸的實現需要合適的傳輸協定。由於TCP需要較多的開銷,故不太適合傳輸即時資料。在串流傳輸的實現方案中,一般採用HTTP/TCP來傳輸控制資訊,而用RTP/UDP來傳輸即時聲音資料。
串流媒體播放方式 - 單播 (Unicast)
在用戶端與媒體伺服器之間需要建立一個單獨的資料通道,從一台伺服器送出的每個資料封包只能傳送給一個客戶機,這種傳送方式稱為單播。每個用戶必須分別對媒體伺服器發送單獨的查詢,而媒體伺服器必須向每個用戶發送所申請的資料封包拷貝。這種巨大冗餘首先造成伺服器沉重的負擔,回應需要很長時間,甚至停止播放;管理人員也被迫購買硬體和頻寬來保證一定的服務質量。
串流媒體檔案格式
串流檔案格式經過特殊編碼,使其適合在網路上邊下載邊播放,而不是等到下載完整個檔案才能播放。可以在網上以串流的方式播放標準媒體檔,但效率不高。將壓縮媒體檔編碼成串流檔,必須加入一些附加資訊,如計時、壓縮和版權資訊。
即時傳輸協議RTP
RTP(Real-timeTransportProtocol)是用於Internet上針對多媒體資料串流的一種傳輸協定。RTP被定義為在一對一或一對多的傳輸情況下工作,其目的是提供時間資訊和實現串流同步。RTP通常使用UDP來傳送資料,但RTP也可以在TCP或ATM等其他協議之上工作。當應用程式開始一個RTP會話時將使用兩個埠:一個給RTP,一個給RTCP。RTP本身並不能為按順序傳送資料封包提供可靠的傳送機制,也不提供流量控制或擁塞控制,它依靠RTCP提供這些服務。通常RTP演算法並不作為一個獨立的網路層來實現,而是作為應用程式碼的一部分。
即時傳輸控制協議RTCP
RTCP(Real-time Transport Control Protocol)和RTP一起提供流量控制和擁塞控制服務。在RTP會話期間,RTCP協定使用與資料封包相同的發送機制對各連接者週期性地傳送RTCP封包。RTCP封包中含有已發送的資料封包的數量、丟失的資料封包的數量等統計資料,因此,伺服器可以利用這些資訊動態地改變傳輸速率,甚至改變有效載荷類型。低層協定提供資料與控制封包的多用,如使用單獨的UDP埠號。RTCP執行下列四大功能:
主要是提供資料封包發送的質量反饋。是作為RTP傳輸協議的一部分,與其他傳輸協議的串流和阻塞控制有關。這些反饋對自適應編碼控制直接起作用,但IP組播經驗表明,從發送者收到反饋對診斷發送錯誤是致關重要的。給所有參加者發送接收反饋報告允許問題觀察者估計那些問題是局部的,還是全局的。諸如IP組播等發佈機制使網路服務提供商類團體可能接收反饋資訊,充當第三方監控者來診斷網路問題。反饋功能由RTCP發送者和接收者報告執行。
RTCP帶有一個稱作規範名字(CNAME)的RTP源持久傳輸層標識。如發現衝突,或程式重新啟動,既然SSRC標識可改變,接收者需要CNAME追蹤參加者。接收者也需要CNAME 與相關RTP連接中給定的幾個資料流程聯繫
前兩種功能要求所有參加者發送RTCP封包,因此,為了讓RTP擴展到大規模數量,速率必須受到控制。讓每個參加者給其他參加者發送控制封包,就得獨立觀察參加者數量。該數量用於計算封包發送的速率。
第四個可選功能是傳送最小連接控制資訊,如參加者識別。最可能用在 "鬆散控制" 連接,那裏參加者自由進入或離開,沒有成員控制或參數協調,RTCP充當通往所有參加者的方便通道,但不必支援應用的所有控制通訊要求。高級連接控制協議則不在此探討。
RTP和RTCP配合使用,它們能以有效的反饋和最小的開銷使傳輸效率最佳化,因而特別適合傳送網上的即時資料。
RTP提供端對端網路傳輸功能,適合通過組播和點播傳送即時資料,如視頻、音頻和仿真資料。RTP沒有涉及資源預訂和質量保證等即時服務,RTCP擴充資料傳輸以允許監控資料傳送,提供最小的控制和識別功能。RTP與RTCP設計成獨立傳輸和網路層。
即時串流協議RTSP
即時串流協議RTSP(RealTimeStreamingProtocol)是應用級協定,控制即時資料的發送,是由RealNetworks和Netscape共同提出的,該協定定義了一對多應用程式如何有效地通過IP網路傳送多媒體資料。RTSP提供了一個可擴展框架,使即時資料,如音頻與視頻,的受控、點播成為可能。資料源包括現場資料與存儲在剪輯中資料。該協定目的在於控制多個資料發送連接,為選擇發送通道,如UDP、組播UDP與TCP,提供途徑,並為選擇基於RTP上發送機制提供方法。
RTSP在體系結構上位於RTP和RTCP之上,它使用TCP或RTP完成資料傳輸。HTTP與RTSP相比,HTTP傳送HTML,而RTP傳送的是多媒體資料。HTTP請求由客戶機發出,伺服器作出回應;使用RTSP時,客戶機和伺服器都可以發出請求,即RTSP可以是雙向的。
Multimedia Over IP: RSVP, RTP, RTCP, RTS
http://www.cse.wustl.edu/~jain/cis788-97/ftp/ip_multimedia/index.htm
RTP Sample Code:
http://discussion.forum.nokia.com/fo...d.php?t=107523
http://www.symbian.com/developer/tec...iew.guide.html
http://www.forum.nokia.com/info/sw.n...Pack1.zip.html
the RTP APIs are available in the SDK API plugin, see the above links:
* S60 3rd MR
http://www.forum.nokia.com/info/sw.n...Pack1.zip.html
* S60 3rd FP1
http://www.forum.nokia.com/info/sw.n...g-In_Pack.html
The S60 RTP quick quide as followed:
1. Open RTP
iRtpApi = CRtpAPI::NewL( ..)
iRtpApi->OpenL( ..);
iRtpApi->StrartConnection( ..);
2. CreateSession
iRtpApi->CreateSessionL( .. );
if RTCP is enabled
iRtpApi->RegisterRtcpObserver( );
if non-rtp packet will be received with the same port then
iRtpApi->SetNonRTPDataObserver ( ...)
3. Set Remote address
iRtpApi->SetRemoteAddress( ..);
4. CreateStream
iRtpApi->CreateReceiveStreamL(..);
iRtpApi->CreateTransmitStreamExtL(..);
Use this function if ssrc is not specified
iRtpApi->CreateTransmitStreamL(..)
5.Start Session
To start session, there must be one stream created already.
If no receive stream created then the incoming packets will not be received
iRtpApi->StartSession( aSessionId );
6. Start Stream
iRtpApi->StartSession( aSessionId );
7. Remove Stream
CloseStreamL(..);
8. Send RTCP packet
Set session bandwidth or rtcp fraction
iRtpApi->SetRtcpParameters(..);
iRtpApi->SendRtcpByePacket( .. );
iRtpApi->SendRtcpAppPacket( .. );
iRtpApi->SendRtcpSrPacket( .. );
iRtpApi->SendRtcpRrPacket( .. );
9 Suspend RTCP
iRtpApi->SuspendRtcpSending( .. )
10 Resum RTCP
With autoSending parameter as ETrue.
iRtpApi->SuspendRtcpSending(..)
11. GetRTCP status
iRtpApi->IsRtcpSendingSuspended( .. );
12. Send NonRtpData
some data can be send to same remote address with RTP
iRtp->SendDataL( ..);
13 Send Rtp Packet
iRtpApi->SendRtpPacket( ..);
14.Close session
delete session;
15. Close RTP
delete iRtpApi;
http://library.developer.nokia.com/index.jsp?topic=/S60_5th_Edition_Cpp_Developers_Library/GUID-35228542-8C95-4849-A73F-2B4F082F0C44/sdk/doc_source/examples/MultimediaProtocolsEx/rtpex.overview.guide.html
RTP Sample Code:
http://discussion.forum.nokia.com/fo...d.php?t=107523
http://www.symbian.com/developer/tec...iew.guide.html
http://www.forum.nokia.com/info/sw.n...Pack1.zip.html
the RTP APIs are available in the SDK API plugin, see the above links:
* S60 3rd MR
http://www.forum.nokia.com/info/sw.n...Pack1.zip.html
* S60 3rd FP1
http://www.forum.nokia.com/info/sw.n...g-In_Pack.html
The S60 RTP quick quide as followed:
1. Open RTP
iRtpApi = CRtpAPI::NewL( ..)
iRtpApi->OpenL( ..);
iRtpApi->StrartConnection( ..);
2. CreateSession
iRtpApi->CreateSessionL( .. );
if RTCP is enabled
iRtpApi->RegisterRtcpObserver( );
if non-rtp packet will be received with the same port then
iRtpApi->SetNonRTPDataObserver ( ...)
3. Set Remote address
iRtpApi->SetRemoteAddress( ..);
4. CreateStream
iRtpApi->CreateReceiveStreamL(..);
iRtpApi->CreateTransmitStreamExtL(..);
Use this function if ssrc is not specified
iRtpApi->CreateTransmitStreamL(..)
5.Start Session
To start session, there must be one stream created already.
If no receive stream created then the incoming packets will not be received
iRtpApi->StartSession( aSessionId );
6. Start Stream
iRtpApi->StartSession( aSessionId );
7. Remove Stream
CloseStreamL(..);
8. Send RTCP packet
Set session bandwidth or rtcp fraction
iRtpApi->SetRtcpParameters(..);
iRtpApi->SendRtcpByePacket( .. );
iRtpApi->SendRtcpAppPacket( .. );
iRtpApi->SendRtcpSrPacket( .. );
iRtpApi->SendRtcpRrPacket( .. );
9 Suspend RTCP
iRtpApi->SuspendRtcpSending( .. )
10 Resum RTCP
With autoSending parameter as ETrue.
iRtpApi->SuspendRtcpSending(..)
11. GetRTCP status
iRtpApi->IsRtcpSendingSuspended( .. );
12. Send NonRtpData
some data can be send to same remote address with RTP
iRtp->SendDataL( ..);
13 Send Rtp Packet
iRtpApi->SendRtpPacket( ..);
14.Close session
delete session;
15. Close RTP
delete iRtpApi;
http://library.developer.nokia.com/index.jsp?topic=/S60_5th_Edition_Cpp_Developers_Library/GUID-35228542-8C95-4849-A73F-2B4F082F0C44/sdk/doc_source/examples/MultimediaProtocolsEx/rtpex.overview.guide.html
沒有留言:
張貼留言