RTSP協(xié)議轉換RTMP直播協(xié)議_第1頁
RTSP協(xié)議轉換RTMP直播協(xié)議_第2頁
RTSP協(xié)議轉換RTMP直播協(xié)議_第3頁
RTSP協(xié)議轉換RTMP直播協(xié)議_第4頁
RTSP協(xié)議轉換RTMP直播協(xié)議_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、RTSPW議車換RTMP直播協(xié)議RTSP議也是廣泛使用的直播/點播流媒體協(xié)議,最近實現(xiàn)了一個RTSP議 轉換RTMP直播協(xié)議的程序,為的是可以接收遠端設備或服務器的多路RTSPft播數(shù)據(jù),實時轉換為RTMP直播協(xié)議,推送到FMS Red5 wowza server等RTMP 服務器,以實現(xiàn)flash觀看RTSPft播源的需求。程序同時也具備從 FLV文件獲取 輸入數(shù)據(jù)并轉換RTMP直播。實現(xiàn)的思路分享如下。要點分析首先,程序的主要目的,是從多路RTSP俞入源中提取AAC編碼的音頻和H.264 編碼視頻數(shù)據(jù),并生成 RTMP數(shù)據(jù)包,然后組裝RTMP推送協(xié)議,并發(fā)往RTMP 服務器。在發(fā)送的過程中

2、,要求可以從RTS嚶?lián)辞袚Q到具有相同h.264和aac 編碼的FLV文件中,并不影響RTMP直播。因此,本程序的關鍵點有以下部分:1 .RTSPA播流的讀取2 .H.264和AAC編碼數(shù)據(jù)的分析、處理3 .FLV文件數(shù)據(jù)的提取及與RTSPft接的切換和銜接4 .RTMP數(shù)據(jù)包封裝5 .RTMP推送協(xié)議有了關鍵點,就可以一項一項的去分析。設計思路根據(jù)上面分析的要點,首先要選擇 RTSP直播協(xié)議的讀取。我們不需要從零 做起,網(wǎng)絡上有很多和RTSFffi關的開源項目可以使用或借鑒,我選擇了 Live555oLive555是一個跨平臺的流媒體解決方案,主要支持 RTSPft、議,好像也支持 SIP

3、(這個也是我馬上研究的重點,之后會寫文章研究SIP相關的技術實現(xiàn))。Live555實現(xiàn)了 RTSFfe括服務器-客戶端的整套結構,是很知名的一個開源項目。 網(wǎng)上有很多關于Live555學習和使用的文章,我就不具體介紹了。H.264和AAC數(shù)據(jù)的分析處理,這個對于從沒做過相關項目開發(fā)的人來說, 應該是一個難點,主要是相關概念的理解。好在我一直在做這塊,也比較好弄。第4和第5點,可以參照文章“ RTMP協(xié)議發(fā)送H.264編碼及AAC編碼的音 視頻(),實現(xiàn)攝像頭直播”的技術方法,來加以實現(xiàn)。因此,主要需要處理的 就是RTSPft播流數(shù)據(jù)的獲取,以及對其中 H.264和AAC編碼數(shù)據(jù)的處理。于是可以

4、畫出大體結構如下:RtmpStrvtrRtmpThread的主要工作就是發(fā)送音頻數(shù)據(jù)流的解碼信息頭和視頻數(shù)據(jù)流的解碼信息頭,并不斷從 DataBufferQueue中取出數(shù)據(jù),封裝為 RTMP Packet,發(fā) 送出去。流程如下列代碼所示:(process_buf_queue_,即是上圖中的 DataBufferQueue)邏輯與實現(xiàn)1.程序框架和模塊說明RtmpJoin Encoder告座二個魁海以及比員費捷(激將,望建RTW用皎以及生成FL/:件FlwRsadsrQnC aptureAudiDla:OiiCa plli reRlApAlidji 11841 (TytOnCap: ur工工

5、IOn Cdp: urvRi vpV'L4tvB ulft fFIvAudioTh redFI vVideo Thread調(diào)尋LivH*如貝川R TSP三洋喝中設典并 分身K64和2;制世族嚶也p燒邛怔數(shù)據(jù)并處理后發(fā)fl JoinE nc odwFiwntter讀期卜W交忤時裝類,一次讀取一個tag指崎普:并接理瑣洋間將音頻地施照tmpJDnEncodET帶構沌瞰狼,并技需頊時間將祀拼轉推叵調(diào)給 RbnpJoinEncoder外三成交FL原人述,管理FIVRade八 Flwudioihnead*DFlvVideoTfireadFIvUetaDaUAdderIFLVttqlWetaDal

6、前慚,神楸立59 oe616763 6X656667EE6S 776/ / 7E ,A /y ac si32 8.3 H485 8687 9S 09 gc91S2 93 942.主要接口j2t-'ldbS RlipToRLinpE iLudti1 public bdstj; :S±npleThr ead,public CdptureListsnfifpublit:Rt« pToRTinpEncocl#r(ccn( t std: 5 tringi rtruptirl, bool isNdLog, bool LEHa&Audio bool ifHac7ideo)

7、;RtspiToRtupEncodert);vcjd SetE-entrlandler(FuncLvsntaidler w匕ntHandl*. void* berdlerData;/ ;設崗墳女件中界?三一工TtJT.t-5et5ourceFiIeFlvl<on&T $td; :strinQfi fUFiieua帕* bool. isRepeTl;X;母置對叩吉哥致蝴人源void SPTA.jriiaourrpf-tp t ran-; t td: :(;mnc4 rf spUrl);汽 璟mRT中期閨鴻/人源oid SetVid?oiourceP.t£fj I cons

8、t itd: :stnnc rtspUrL);關謠azsvoid Reno;e-kllStMjrte (;% uj.d Remo / eSourLeFxlE Fl (1 ;void RetiiiojsAudioScur ceRtbp : :void RemojWideoStxjrceRtspO :/ j 裝!UIvoid StartRecordfcorsl ttd:stringi filename);void StopRocordt J;/短運行的士函我 virtual void Run();N叵調(diào)國期,從立2蔚職利官天數(shù)押 virtual void oneaptlreAjdioTas(cna

9、r* but, int bufLenH Lmsigred int timestarp);RtspCapture是我的程序里管理 RTSP直播數(shù)據(jù)流和分析處理的類,接口很重要, 基本上這個設計就可以。/&7773790091B2S3S43536379A899091m七935495 1 30| 97;899130132133134 13% I1OG137 1JH I1391G 147 143 143 153 產(chǎn) 152 153 154 155 155 157 150 159 163 161 16?74 Lclasa RtspCapture : pudic baa«: : Simp

10、le Th re ad75 Ipublic:RtspCdpturft(coriit二:stj.ng6 rtspU rr bool isNiedAudio , bool isNeedYiceo);virtual. -RtspcaptureO:virtuji void Run();/設置RFP取據(jù)可用深察Svoid totListenoriCaptijreListflr«r* listener);,始承受Fp數(shù)揖void StfirtRtspO ;結更void StcpRtsp();/當L"冒t空視置數(shù)更時百運姐里Jk .2b誦據(jù)void OnRfirfRtspVideaBuf

11、 f er (const thar* videoDuf, irtt bufLer.);void OriH tsp ./ide oBuf;er (const char- ideoBuf, int bufLenl :/當從rtfp翻費t解柝出$"和即占信息時void OnSpsAndPpsBuftconst char* spsppsbufJF int bufLen);/當收到rtmp音題戲BIyoid OriRtspludioeuff at(con5t char- audiDeuf, int bufL&n);/當從ts由據(jù)中解洪出采憚曲廬道數(shù)時void OnSamplRat&am

12、p;AndChannel t irt s3mpi齦at白/ int chsm&LCount);的收。閉滿患時void DriRtspStreafflClo5e(int #c);buul IsTirtRJout () ;/ 是百超時他所使用的live555變量,這里ourRTSPClient實際就是RTSPClient的簡單繼承ojrTPClient* rtsp_clent ;U5ageE nvi rcnrrent* &nv_ ;cnar eventLccpInrat;biVariablc_ ;Authentic star* ourAuthenticator ;/ 設定接Ifc堪

13、存大小,VLCKU2e0e<B, Li»e555U50KB unsigned ir.t sink iax bufsaze_ ;/受言嘍收住型迎的詢房值;一上野認函LlveSE默認1制 uniigr&d int threeh_;/ConsoleHolder console_holder_:bu口I is_gtit_ first keyf;bool is_strconi_c-LDjed_ ;1tgtdatal:ne_;3.RtspCapture調(diào)用live555的主要流程A.首先,在RtspCapture構造函數(shù)初始化ifaFEiTasksthedule- schedule

14、r - B<±s±TdkScheJultT : it r e=ltMew();env_ = BasicUsageEnvironment:cresteNe(*scheduler);B.在StartRtsp函數(shù)中,創(chuàng)建 RtspClient,并發(fā)送"describe”命令,開始獲取 sdp。 回調(diào)函數(shù)就是 continueAfterDESCRBE在這里創(chuàng)建 MediaSession,之后再發(fā)送"setup"命令,等,這些都可以在live555的例子以及網(wǎng)上的說明中看到186101 1921 lHj| 1S41D51S61R71S81D9141

15、192193134pdr 5e?URl( i tip ur 1. .c 5 tr () f url-etjLserndmejpdSbWjrdJ t if tusernam* != NULLJ1*需夏軍三包蜜嗎VA明ur Authenticator_ = riew Authtrticdtor (usei rume, pebbrji d);rtsp_clitrit_ - ojrRTSPClitnt:url ret,RTSP_CLl£Mr_VERBDSITY_LEVEL, *RtnpJcinEncodfir*I;d?l urnaffls;delfjLe 的s心rd;delete urlrt

16、t;) "frt&p client = ourRTSPClienl;icreateNevi , ftsp_url .c &tr(), RTSP_CLKNT_VEFCOSITY_LEVEL, "RtmpJcinEncodcr*)C.還有一個關鍵點,就是要在自己的線程循環(huán)中,調(diào)用 live555 environment的事件循環(huán),就像這樣1U410510619710B109110111-oid Rispcaptue:ThresdRuri)env_ >ta=k&checijlfi( ; .ccEvontLocp&e7*ntLcopwatchv

17、ariib'.fi_);if 7! t rsani c d_)J""-I'lUtdownStrednif rt3p_cliBnt_ );4.對rtsp回調(diào)h264數(shù)據(jù)的分析處理這里演示了,如何從rtsp回調(diào)的h264數(shù)據(jù)中,提取sps和pps信息。里面的parse 函數(shù),是live555自帶的。const char* tnpstr - fSubsessionfatp-SproppAraiKterseta(1 ; if (tmpstrl/小哽是第一次1r班到訶牘底S .更要冗解千由來3 P $和ppm信息if i false - is_get video_cf

18、g_) (if (trrpstrj (ctiar* spsppsbuf = new ch«rl&241 ;ch3r* pbuf - qF&PpGhu"unsignec nUfUSPrgpR&corfl5 r5P ropRecord+ 5PropRecprd = FfirieSPrgpParamE'te 5et= (tm35tr, nurrtSP ropRscords ); f c r : jnsjgned i - 0; i t nuiiSP ropRecg rd5 ; +11mencpy pt)uf , h2S4headertjuf , 4);pbj-f + 4;m

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論