go語(yǔ)言rtp數(shù)據(jù)流 go語(yǔ)言 type

什么是RTCP/RTP

RTP(Real-time Transport Protocol)是用于Internet上針對(duì)多媒體數(shù)據(jù)流的一種傳輸協(xié)議。RTP被定義為在一對(duì)一或一對(duì)多的傳輸情況下工作。其目的是提供時(shí)間信息和實(shí)現(xiàn)流同步。但RTP通常使用UDP來(lái)傳送數(shù)據(jù)。但RTP也可以在TCP或ATM等其他協(xié)議之上工作。當(dāng)應(yīng)用程序開(kāi)始一個(gè)RTP會(huì)話時(shí)將使用兩個(gè)端口:一個(gè)給RTP一個(gè)給 RTCP。RTP本身并不能為接順序傳送數(shù)據(jù)包提供可靠的傳送機(jī)制。也不提供流量控制或擁塞控制。它依靠RTCP提供這些服務(wù)。通常RTP算法并不作為一個(gè)獨(dú)立的網(wǎng)絡(luò)層來(lái)實(shí)現(xiàn)。而是作為應(yīng)用程序代碼的一部分。實(shí)時(shí)傳送控制協(xié)議RTCP.RTCP(Real-time Transport Control Protocol)和RTP提供流量控制和擁塞控制。在RTP會(huì)話期間,各參與者周期性地傳送RTCP包.RTCP包中含有已發(fā)送的數(shù)據(jù)包的數(shù)量、丟失的數(shù)據(jù)包的數(shù)量等統(tǒng)計(jì)資料.因此,服務(wù)器可以利用這些信息動(dòng)態(tài)地改變傳輸速率,甚至改變有效載荷類(lèi)型。RTP和RTCP配合使用,它們能以有效的反饋和最小的開(kāi)銷(xiāo)使傳輸效率最佳化。因而特別適合傳送網(wǎng)上的實(shí)時(shí)數(shù)據(jù)。

創(chuàng)新互聯(lián)于2013年開(kāi)始,先為崆峒等服務(wù)建站,崆峒等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為崆峒企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

gstreamer分析-rtp流的接收

?關(guān)于數(shù)據(jù)流的接收過(guò)程,[1]有很好的分析。這個(gè)問(wèn)題,令人困惑,依然有些東西沒(méi)有搞明白。gst_pad_start_task()創(chuàng)建任務(wù),使得gst_base_src_loop()被循環(huán)調(diào)用。

?udosrc怎么同rtpbin關(guān)聯(lián)起來(lái)呢?gst-lpugins-good/tests/examples/client-rtpaux.c下有個(gè)例子,有個(gè)圖:

?udosrc和rtpbin都繼承了element。gst_element_link_pads將兩者連起來(lái)。

?rtpbin中的pad是如何接收數(shù)據(jù)呢?

gst_pad_push中調(diào)用的chainfun就是這個(gè)gst_rtp_session_chain_recv_rtp。

?接下來(lái)分析rtp數(shù)據(jù)流的處理,以on-feedback-rtcp這個(gè)類(lèi)型的消息為例。

?前前后后一共浪費(fèi)了六天時(shí)間,好奇心害死貓。以后應(yīng)該研究一些數(shù)學(xué)密集型的程序,而不是邏輯密集型的程序。

?劇終。

[1] GStreamer插件架構(gòu)簡(jiǎn)析

webrtc-RTP/RTSP/RTCP的概念

Real-time Transport Protocol)是用于Internet上針對(duì)多媒體數(shù)據(jù)流的一種傳輸層協(xié)議。RTP協(xié)議詳細(xì)說(shuō)明了在互聯(lián)網(wǎng)上傳遞音頻和視頻的標(biāo)準(zhǔn)數(shù)據(jù)包格式。RTP協(xié)議常用于流媒體系統(tǒng)(配合RTCP協(xié)議),視頻會(huì)議和一鍵通(Push to Talk)系統(tǒng)(配合H.323或SIP),使它成為IP電話產(chǎn)業(yè)的技術(shù)基礎(chǔ)。RTP協(xié)議和RTP控制協(xié)議RTCP一起使用,而且它是建立在UDP協(xié)議上的。

RTP 本身并沒(méi)有提供按時(shí)發(fā)送機(jī)制或其它服務(wù)質(zhì)量(QoS)保證,它依賴于低層服務(wù)去實(shí)現(xiàn)這一過(guò)程。 RTP 并不保證傳送或防止無(wú)序傳送,也不確定底層網(wǎng)絡(luò)的可靠性。 RTP 實(shí)行有序傳送, RTP 中的序列號(hào)允許接收方重組發(fā)送方的包序列,同時(shí)序列號(hào)也能用于決定適當(dāng)?shù)陌恢?,例如:在視頻解碼中,就不需要順序解碼。

RTP 由兩個(gè)緊密鏈接部分組成: RTP ― 傳送具有實(shí)時(shí)屬性的數(shù)據(jù);RTP 控制協(xié)議(RTCP) ― 監(jiān)控服務(wù)質(zhì)量并傳送正在進(jìn)行的會(huì)話參與者的相關(guān)信息。

實(shí)時(shí)傳輸控制協(xié)議(Real-time Transport Control Protocol或RTP Control Protocol或簡(jiǎn)寫(xiě)RTCP)是實(shí)時(shí)傳輸協(xié)議(RTP)的一個(gè)姐妹協(xié)議。RTCP為RTP媒體流提供信道外(out-of-band)控制。RTCP本身并不傳輸數(shù)據(jù),但和RTP一起協(xié)作將多媒體數(shù)據(jù)打包和發(fā)送。RTCP定期在流多媒體會(huì)話參加者之間傳輸控制數(shù)據(jù)。RTCP的主要功能是為RTP所提供的服務(wù)質(zhì)量(Quality of Service)提供反饋。

RTCP收集相關(guān)媒體連接的統(tǒng)計(jì)信息,例如:傳輸字節(jié)數(shù),傳輸分組數(shù),丟失分組數(shù),jitter,單向和雙向網(wǎng)絡(luò)延遲等等。網(wǎng)絡(luò)應(yīng)用程序可以利用RTCP所提供的信息試圖提高服務(wù)質(zhì)量,比如限制信息流量或改用壓縮比較小的編解碼器。RTCP本身不提供數(shù)據(jù)加密或身份認(rèn)證。SRTCP可以用于此類(lèi)用途。

安全實(shí)時(shí)傳輸協(xié)議(Secure Real-time Transport Protocol或SRTP)是在實(shí)時(shí)傳輸協(xié)議(Real-time Transport Protocol或RTP)基礎(chǔ)上所定義的一個(gè)協(xié)議,旨在為單播和多播應(yīng)用程序中的實(shí)時(shí)傳輸協(xié)議的數(shù)據(jù)提供加密、消息認(rèn)證、完整性保證和重放保護(hù)。它是由David Oran(思科)和Rolf Blom(愛(ài)立信)開(kāi)發(fā)的,并最早由IETF于2004年3月作為RFC 3711發(fā)布。

由于實(shí)時(shí)傳輸協(xié)議和可以被用來(lái)控制實(shí)時(shí)傳輸協(xié)議的會(huì)話的實(shí)時(shí)傳輸控制協(xié)議(RTP Control Protocol或RTCP)有著緊密的聯(lián)系,安全實(shí)時(shí)傳輸協(xié)議同樣也有一個(gè)伴生協(xié)議,它被稱為安全實(shí)時(shí)傳輸控制協(xié)議(Secure RTCP或SRTCP);安全實(shí)時(shí)傳輸控制協(xié)議為實(shí)時(shí)傳輸控制協(xié)議提供類(lèi)似的與安全有關(guān)的特性,就像安全實(shí)時(shí)傳輸協(xié)議為實(shí)時(shí)傳輸協(xié)議提供的那些一樣。

在使用實(shí)時(shí)傳輸協(xié)議或?qū)崟r(shí)傳輸控制協(xié)議時(shí),使不使用安全實(shí)時(shí)傳輸協(xié)議或安全實(shí)時(shí)傳輸控制協(xié)議是可選的;但即使使用了安全實(shí)時(shí)傳輸協(xié)議或安全實(shí)時(shí)傳輸控制協(xié)議,所有它們提供的特性(如加密和認(rèn)證)也都是可選的,這些特性可以被獨(dú)立地使用或禁用。唯一的例外是在使用安全實(shí)時(shí)傳輸控制協(xié)議時(shí),必須要用到其消息認(rèn)證特性。

RTSP(Real Time Streaming Protocol)是用來(lái)控制聲音或影像的多媒體串流協(xié)議,并允許同時(shí)多個(gè)串流需求控制,傳輸時(shí)所用的網(wǎng)絡(luò)通訊協(xié)定并不在其定義的范圍內(nèi),服務(wù)器端可以自行選擇使用TCP或UDP來(lái)傳送串流內(nèi)容,它的語(yǔ)法和運(yùn)作跟HTTP 1.1類(lèi)似,但并不特別強(qiáng)調(diào)時(shí)間同步,所以比較能容忍網(wǎng)絡(luò)延遲。而前面提到的允許同時(shí)多個(gè)串流需求控制(Multicast),除了可以降低服務(wù)器端的網(wǎng)絡(luò)用量,更進(jìn)而支持多方視訊會(huì)議(Video Conference)。 因?yàn)榕cHTTP1.1的運(yùn)作方式相似,所以代理服務(wù)器《Proxy》的快取功能《Cache》也同樣適用于RTSP,并因RTSP具有重新導(dǎo)向功能,可視實(shí)際負(fù)載情況來(lái)轉(zhuǎn)換提供服務(wù)的服務(wù)器,以避免過(guò)大的負(fù)載集中于同一服務(wù)器而造成延遲。

RTP:實(shí)時(shí)傳輸協(xié)議(Real-time Transport Protocol)

RTP/RTCP是實(shí)際傳輸數(shù)據(jù)的協(xié)議

RTP傳輸音頻/視頻數(shù)據(jù),如果是PLAY,Server發(fā)送到Client端,如果是RECORD,可以由Client發(fā)送到Server

整個(gè)RTP協(xié)議由兩個(gè)密切相關(guān)的部分組成:RTP數(shù)據(jù)協(xié)議和RTP控制協(xié)議(即RTCP)

RTSP:實(shí)時(shí)流協(xié)議(Real Time Streaming Protocol,RTSP)

RTSP的請(qǐng)求主要有DESCRIBE,SETUP,PLAY,PAUSE,TEARDOWN,OPTIONS等,顧名思義可以知道起對(duì)話和控制作用

RTSP的對(duì)話過(guò)程中SETUP可以確定RTP/RTCP使用的端口,PLAY/PAUSE/TEARDOWN可以開(kāi)始或者停止RTP的發(fā)送,等等

RTCP:

RTP/RTCP是實(shí)際傳輸數(shù)據(jù)的協(xié)議

RTCP包括Sender Report和Receiver Report,用來(lái)進(jìn)行音頻/視頻的同步以及其他用途,是一種控制協(xié)議

以下是每個(gè)協(xié)議的概要介紹:

一、RTP數(shù)據(jù)協(xié)議

RTP數(shù)據(jù)協(xié)議負(fù)責(zé)對(duì)流媒體數(shù)據(jù)進(jìn)行封包并實(shí)現(xiàn)媒體流的實(shí)時(shí)傳輸,每一個(gè)RTP數(shù)據(jù)報(bào)都由頭部(Header)和負(fù)載(Payload)兩個(gè)部分組成,其中頭部前12個(gè)字節(jié)的含義是固定的,而負(fù)載則可以是音頻或者視頻數(shù)據(jù)。

其中比較重要的幾個(gè)域及其意義如下:

CSRC記數(shù)(CC):表示CSRC標(biāo)識(shí)的數(shù)目。CSRC標(biāo)識(shí)緊跟在RTP固定頭部之后,用來(lái)表示RTP數(shù)據(jù)報(bào)的來(lái)源,RTP協(xié)議允許在同一個(gè)會(huì)話中存在多個(gè)數(shù)據(jù)源,它們可以通過(guò)RTP混合器合并為一個(gè)數(shù)據(jù)源。例如,可以產(chǎn)生一個(gè)CSRC列表來(lái)表示一個(gè)電話會(huì)議,該會(huì)議通過(guò)一個(gè)RTP混合器將所有講話者的語(yǔ)音數(shù)據(jù)組合為一個(gè)RTP數(shù)據(jù)源。

負(fù)載類(lèi)型(PT):標(biāo)明RTP負(fù)載的格式,包括所采用的編碼算法、采樣頻率、承載通道等。例如,類(lèi)型2表明該RTP數(shù)據(jù)包中承載的是用ITU G.721算法編碼的語(yǔ)音數(shù)據(jù),采樣頻率為8000Hz,并且采用單聲道。

序列號(hào):用來(lái)為接收方提供探測(cè)數(shù)據(jù)丟失的方法,但如何處理丟失的數(shù)據(jù)則是應(yīng)用程序自己的事情,RTP協(xié)議本身并不負(fù)責(zé)數(shù)據(jù)的重傳。

時(shí)間戳:記錄了負(fù)載中第一個(gè)字節(jié)的采樣時(shí)間,接收方能夠時(shí)間戳能夠確定數(shù)據(jù)的到達(dá)是否受到了延遲抖動(dòng)的影響,但具體如何來(lái)補(bǔ)償延遲抖動(dòng)則是應(yīng)用程序自己的事情。

從RTP數(shù)據(jù)報(bào)的格式不難看出,它包含了傳輸媒體的類(lèi)型、格式、序列號(hào)、時(shí)間戳以及是否有附加數(shù)據(jù)等信息,這些都為實(shí)時(shí)的流媒體傳輸提供了相應(yīng)的基礎(chǔ)。RTP協(xié)議的目的是提供實(shí)時(shí)數(shù)據(jù)(如交互式的音頻和視頻)的端到端傳輸服務(wù),因此在RTP中沒(méi)有連接的概念,它可以建立在底層的面向連接或面向非連接的傳輸協(xié)議之上;RTP也不依賴于特別的網(wǎng)絡(luò)地址格式,而僅僅只需要底層傳輸協(xié)議支持組幀(Framing)和分段(Segmentation)就足夠了;另外RTP本身還不提供任何可靠性機(jī)制,這些都要由傳輸協(xié)議或者應(yīng)用程序自己來(lái)保證。在典型的應(yīng)用場(chǎng)合下,RTP一般是在傳輸協(xié)議之上作為應(yīng)用程序的一部分加以實(shí)現(xiàn)的。

二、RTCP控制協(xié)議

RTCP控制協(xié)議需要與RTP數(shù)據(jù)協(xié)議一起配合使用,當(dāng)應(yīng)用程序啟動(dòng)一個(gè)RTP會(huì)話時(shí)將同時(shí)占用兩個(gè)端口,分別供RTP和RTCP使用。RTP本身并不能為按序傳輸數(shù)據(jù)包提供可靠的保證,也不提供流量控制和擁塞控制,這些都由RTCP來(lái)負(fù)責(zé)完成。通常RTCP會(huì)采用與RTP相同的分發(fā)機(jī)制,向會(huì)話中的所有成員周期性地發(fā)送控制信息,應(yīng)用程序通過(guò)接收這些數(shù)據(jù),從中獲取會(huì)話參與者的相關(guān)資料,以及網(wǎng)絡(luò)狀況、分組丟失概率等反饋信息,從而能夠?qū)Ψ?wù)質(zhì)量進(jìn)行控制或者對(duì)網(wǎng)絡(luò)狀況進(jìn)行診斷。

RTCP協(xié)議的功能是通過(guò)不同的RTCP數(shù)據(jù)報(bào)來(lái)實(shí)現(xiàn)的,主要有如下幾種類(lèi)型:

SR:發(fā)送端報(bào)告,所謂發(fā)送端是指發(fā)出RTP數(shù)據(jù)報(bào)的應(yīng)用程序或者終端,發(fā)送端同時(shí)也可以是接收端。

RR:接收端報(bào)告,所謂接收端是指僅接收但不發(fā)送RTP數(shù)據(jù)報(bào)的應(yīng)用程序或者終端。

SDES:源描述,主要功能是作為會(huì)話成員有關(guān)標(biāo)識(shí)信息的載體,如用戶名、郵件地址、電話號(hào)碼等,此外還具有向會(huì)話成員傳達(dá)會(huì)話控制信息的功能。

BYE:通知離開(kāi),主要功能是指示某一個(gè)或者幾個(gè)源不再有效,即通知會(huì)話中的其他成員自己將退出會(huì)話。

APP:由應(yīng)用程序自己定義,解決了RTCP的擴(kuò)展性問(wèn)題,并且為協(xié)議的實(shí)現(xiàn)者提供了很大的靈活性。

RTCP數(shù)據(jù)報(bào)攜帶有服務(wù)質(zhì)量監(jiān)控的必要信息,能夠?qū)Ψ?wù)質(zhì)量進(jìn)行動(dòng)態(tài)的調(diào)整,并能夠?qū)W(wǎng)絡(luò)擁塞進(jìn)行有效的控制。由于RTCP數(shù)據(jù)報(bào)采用的是多播方式,因此會(huì)話中的所有成員都可以通過(guò)RTCP數(shù)據(jù)報(bào)返回的控制信息,來(lái)了解其他參與者的當(dāng)前情況。

在一個(gè)典型的應(yīng)用場(chǎng)合下,發(fā)送媒體流的應(yīng)用程序?qū)⒅芷谛缘禺a(chǎn)生發(fā)送端報(bào)告SR,該RTCP數(shù)據(jù)報(bào)含有不同媒體流間的同步信息,以及已經(jīng)發(fā)送的數(shù)據(jù)報(bào)和字節(jié)的計(jì)數(shù),接收端根據(jù)這些信息可以估計(jì)出實(shí)際的數(shù)據(jù)傳輸速率。另一方面,接收端會(huì)向所有已知的發(fā)送端發(fā)送接收端報(bào)告RR,該RTCP數(shù)據(jù)報(bào)含有已接收數(shù)據(jù)報(bào)的最大序列號(hào)、丟失的數(shù)據(jù)報(bào)數(shù)目、延時(shí)抖動(dòng)和時(shí)間戳等重要信息,發(fā)送端應(yīng)用根據(jù)這些信息可以估計(jì)出往返時(shí)延,并且可以根據(jù)數(shù)據(jù)報(bào)丟失概率和時(shí)延抖動(dòng)情況動(dòng)態(tài)調(diào)整發(fā)送速率,以改善網(wǎng)絡(luò)擁塞狀況,或者根據(jù)網(wǎng)絡(luò)狀況平滑地調(diào)整應(yīng)用程序的服務(wù)質(zhì)量。

三、RTSP實(shí)時(shí)流協(xié)議

作為一個(gè)應(yīng)用層協(xié)議,RTSP提供了一個(gè)可供擴(kuò)展的框架,它的意義在于使得實(shí)時(shí)流媒體數(shù)據(jù)的受控和點(diǎn)播變得可能??偟恼f(shuō)來(lái),RTSP是一個(gè)流媒體表示協(xié)議,主要用來(lái)控制具有實(shí)時(shí)特性的數(shù)據(jù)發(fā)送,但它本身并不傳輸數(shù)據(jù),而是必須依賴于下層傳輸協(xié)議所提供的某些服務(wù)。RTSP可以對(duì)流媒體提供諸如播放、暫停、快進(jìn)等操作,它負(fù)責(zé)定義具體的控制消息、操作方法、狀態(tài)碼等,此外還描述了與RTP間的交互操作(RFC2326)。

RTSP在制定時(shí)較多地參考了HTTP/1.1協(xié)議,甚至許多描述與HTTP/1.1完全相同。RTSP之所以特意使用與HTTP/1.1類(lèi)似的語(yǔ)法和操作,在很大程度上是為了兼容現(xiàn)有的Web基礎(chǔ)結(jié)構(gòu),正因如此,HTTP/1.1的擴(kuò)展機(jī)制大都可以直接引入到RTSP中。

由RTSP控制的媒體流集合可以用表示描述(Presentation Description)來(lái)定義,所謂表示是指流媒體服務(wù)器提供給客戶機(jī)的一個(gè)或者多個(gè)媒體流的集合,而表示描述則包含了一個(gè)表示中各個(gè)媒體流的相關(guān)信息,如數(shù)據(jù)編碼/解碼算法、網(wǎng)絡(luò)地址、媒體流的內(nèi)容等。

雖然RTSP服務(wù)器同樣也使用標(biāo)識(shí)符來(lái)區(qū)別每一流連接會(huì)話(Session),但RTSP連接并沒(méi)有被綁定到傳輸層連接(如TCP等),也就是說(shuō)在整個(gè)RTSP連接期間,RTSP用戶可打開(kāi)或者關(guān)閉多個(gè)對(duì)RTSP服務(wù)器的可靠傳輸連接以發(fā)出RTSP 請(qǐng)求。此外,RTSP連接也可以基于面向無(wú)連接的傳輸協(xié)議(如UDP等)。

檢索媒體:允許用戶通過(guò)HTTP或者其它方法向媒體服務(wù)器提交一個(gè)表示描述。如表示是組播的,則表示描述就包含用于該媒體流的組播地址和端口號(hào);如果表示是單播的,為了安全在表示描述中應(yīng)該只提供目的地址。

邀請(qǐng)加入:媒體服務(wù)器可以被邀請(qǐng)參加正在進(jìn)行的會(huì)議,或者在表示中回放媒體,或者在表示中錄制全部媒體或其子集,非常適合于分布式教學(xué)。

添加媒體:通知用戶新加入的可利用媒體流,這對(duì)現(xiàn)場(chǎng)講座來(lái)講顯得尤其有用。與HTTP/1.1類(lèi)似,RTSP請(qǐng)求也可以交由代理、通道或者緩存來(lái)進(jìn)行處理。

文章名稱:go語(yǔ)言rtp數(shù)據(jù)流 go語(yǔ)言 type
分享URL:http://muchs.cn/article40/doecoeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)云服務(wù)器、面包屑導(dǎo)航網(wǎng)站設(shè)計(jì)、手機(jī)網(wǎng)站建設(shè)商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)