本文主要總結(jié)一些我在學(xué)習(xí)RTMP流媒體技術(shù)過程中積累的經(jīng)驗(yàn)。也為后來學(xué)習(xí)RTMP流媒體技術(shù)的人們一個(gè)參考。本文力圖從簡到難,循序漸進(jìn)的介紹RTMP流媒體技術(shù)的方方面面,先從應(yīng)用說起,逐步深化剖析相關(guān)工程的源代碼??赐瓯疚牡脑拺?yīng)該會對RTMP流媒體技術(shù)有比較完整的了解。
本章主要介紹一下RTMP流媒體技術(shù)都用在了哪里(在這里僅列幾個(gè)我所知的,其實(shí)遠(yuǎn)比這個(gè)多)。說白了就是為了說明:RTMP是非常重要的。
使用RTMP技術(shù)的流媒體系統(tǒng)有一個(gè)非常明顯的特點(diǎn):使用 Flash Player 作為播放器客戶端,而Flash Player 現(xiàn)在已經(jīng)安裝在了全世界將近99%的PC上,因此一般情況下收看RTMP流媒體系統(tǒng)的視音頻是不需要安裝插件的。用戶只需要打開網(wǎng)頁,就可以直接收看流媒體,十分方便。
目前使用RTMP技術(shù)的電視臺有如下幾個(gè):
CNTV部分點(diǎn)播內(nèi)容中國教育電視臺1直播(rtmp://pub1.guoshi.com/live/newcetv1)[失效]
中國教育電視臺3直播(rtmp://pub1.guoshi.com/live/newcetv3)[失效]
香港電視臺直播(rtmp://live.hkstv.hk.lxdns.com/live/hks)
北廣傳媒移動電視直播(rtmp://www.bj-mobiletv.com:8000/live/live1)
中石化網(wǎng)絡(luò)電視臺直播(rtmp://wowza.sinopectv.cn:1935/live/sinopec)[暫時(shí)無法訪問]
東莞電視臺(rtmp://ftv.sun0769.com/dgrtv1/mp4:b1)
紹興新聞綜合(rtmp://www.scbtv.cn/live/new)
使用RTMP技術(shù)社交直播平臺:
六間房
9158
新浪秀場
可以這樣概括一下:凡是想實(shí)現(xiàn)“無插件直播”的流媒體系統(tǒng),都會使用RTMP。
RTMP被Adobe開發(fā)出來,就是用于在其Flash平臺的流媒體系統(tǒng)之間傳遞數(shù)據(jù)的。因此想要了解RTMP,需要首先了解Flash流媒體系統(tǒng)。
最簡單的Flash流媒體系統(tǒng)由兩部分組成:
客戶端:Flash Player(一般只有這一種)
注:支持RTMP的基于Flash的播放器除了可以自己開發(fā)之外,還有現(xiàn)成的,比如說jwplayer,flowplayer等等。
服務(wù)器端:
1.Flash Media Server(FMS):Adobe官方的流媒體服務(wù)器。畢竟是商業(yè)服務(wù)器,其性能應(yīng)該是最強(qiáng)的,配置是最簡單的,但是價(jià)格不菲,推薦作為入門學(xué)習(xí)使用。個(gè)人下載使用是不用花錢的。服務(wù)器端編程使用ActionScript語言。
官網(wǎng):http://www.adobe.com/cn/products/adobe-media-server-family.html
可參考教程:
1.FMS開發(fā)者向?qū)?/a>。這個(gè)教程講的是FMS開發(fā)技術(shù),是網(wǎng)友翻譯的中文版,學(xué)習(xí)起來比較方便。這里有英文原版,內(nèi)容更全:Flash Media Server Delevoper's Guide
注:FMS開發(fā)技術(shù)方面使用到了ActionScript,可以先找相關(guān)教程做一個(gè)初步的了解。主要使用Flash CSx進(jìn)行開發(fā)。
2.FMS技術(shù)指南。這個(gè)教程主要是講述FMS配置的,第2部分涉及到集群,負(fù)載均衡等內(nèi)容,挺高端的。
2.Red5:開源流媒體服務(wù)器,基于Java的。曾經(jīng)使用過,感覺也還算比較方便,如果商業(yè)應(yīng)用,又買不起昂貴的FMS的話,使用也不錯(cuò)。服務(wù)器端編程使用Java語言。
官網(wǎng):http://www.red5.org/
3.還有其他服務(wù)器,但目前我還沒接觸過
這一章就要開始學(xué)習(xí)RTMP協(xié)議的處理了。
可以使用RTMPdump(libRTMP)進(jìn)行學(xué)習(xí)。這是一個(gè)C++的開源工程。主要作用是下載RTMP流媒體。首先可以了解一下其使用方法:RTMPdump 使用說明
官網(wǎng):http://rtmpdump.mplayerhq.hu/
這一章開始學(xué)習(xí)RTMPdump(libRTMP)的源代碼。學(xué)習(xí)它之前需要有Socket編程的基礎(chǔ)。
首先學(xué)習(xí)《RTMP協(xié)議規(guī)范》
中文翻譯版:http://download.csdn.net/detail/leixiaohua1020/6563059
英文原版:http://www.adobe.com/cn/devnet/rtmp.html
我對其部分內(nèi)容做的簡單分析:RTMP規(guī)范簡單分析
其次從協(xié)議規(guī)范中,總結(jié)出RTMP協(xié)議建立連接的流程:RTMP流媒體播放過程
然后,下載一個(gè)windows下可以編譯通過的RTMPdump工程(這個(gè)工程是很難得?。?a target="_blank" >rtmpdump vs2005版本
(當(dāng)然,linux下會方便很多,因?yàn)镽TMPdump就是在linux下開發(fā)完成的)
最后,通過調(diào)試工程,就可以基本掌握RTMP協(xié)議了,我寫了一些分析RTMPdump(libRTMP)源代碼的文章:
RTMPdump 源代碼分析 1: main()函數(shù)
RTMPDump(libRTMP)源代碼分析 2:解析RTMP地址——RTMP_ParseURL()
RTMPdump(libRTMP) 源代碼分析 3: AMF編碼
RTMPdump(libRTMP)源代碼分析 4: 連接第一步——握手(Hand Shake)
RTMPdump(libRTMP) 源代碼分析 5: 建立一個(gè)流媒體連接 (NetConnection部分)
RTMPdump(libRTMP) 源代碼分析 6: 建立一個(gè)流媒體連接 (NetStream部分 1)
RTMPdump(libRTMP) 源代碼分析 7: 建立一個(gè)流媒體連接 (NetStream部分 2)
RTMPdump(libRTMP) 源代碼分析 8: 發(fā)送消息(Message)
RTMPdump(libRTMP) 源代碼分析 9: 接收消息(Message)(接收視音頻數(shù)據(jù))
RTMPdump(libRTMP) 源代碼分析 10: 處理各種消息(Message)
libRTMP作用還是很大的,除了可以保存RTMP流媒體之外,還可以發(fā)送RTMP流媒體等等。它可以整合到FFMPEG中,下面幾篇文章簡述了它的應(yīng)用:
libRTMP使用說明(以后更新其他方面......)