1. 程式人生 > >[總結]RTMP流媒體技術零基礎學習方法

[總結]RTMP流媒體技術零基礎學習方法

               

本文主要總結一些我在學習RTMP流媒體技術過程中積累的經驗。也為後來學習RTMP流媒體技術的人們一個參考。本文力圖從簡到難,循序漸進的介紹RTMP流媒體技術的方方面面,先從應用說起,逐步深化剖析相關工程的原始碼。看完本文的話應該會對RTMP流媒體技術有比較完整的瞭解。

0.背景知識

本章主要介紹一下RTMP流媒體技術都用在了哪裡(在這裡僅列幾個我所知的,其實遠比這個多)。說白了就是為了說明:RTMP是非常重要的。

使用RTMP技術的流媒體系統有一個非常明顯的特點:使用 Flash Player 作為播放器客戶端,而Flash Player 現在已經安裝在了全世界將近99%的PC上,因此一般情況下收看RTMP流媒體系統的視音訊是不需要安裝外掛的。使用者只需要開啟網頁,就可以直接收看流媒體,十分方便。

目前使用RTMP技術的電視臺有如下幾個:

CNTV部分點播內容

中國教育電視臺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)

中石化網路電視臺直播(rtmp://wowza.sinopectv.cn:1935/live/sinopec)[暫時無法訪問]

東莞電視臺(rtmp://ftv.sun0769.com/dgrtv1/mp4:b1)

紹興新聞綜合(rtmp://www.scbtv.cn/live/new)

使用RTMP技術社交直播平臺:

六間房9158新浪秀場

可以這樣概括一下:凡是想實現“無外掛直播”的流媒體系統,都會使用RTMP。

1.RTMP在Flash流媒體系統中的使用

RTMP被Adobe開發出來,就是用於在其Flash平臺的流媒體系統之間傳遞資料的。因此想要了解RTMP,需要首先了解Flash流媒體系統。

最簡單的Flash流媒體系統由兩部分組成:

客戶端:Flash Player(一般只有這一種)

注:支援RTMP的基於Flash的播放器除了可以自己開發之外,還有現成的,比如說jwplayerflowplayer等等。

伺服器端:

1.Flash Media Server(FMS):

Adobe官方的流媒體伺服器。畢竟是商業伺服器,其效能應該是最強的,配置是最簡單的,但是價格不菲,推薦作為入門學習使用。個人下載使用是不用花錢的。伺服器端程式設計使用ActionScript語言。

可參考教程:

注:FMS開發技術方面使用到了ActionScript,可以先找相關教程做一個初步的瞭解。主要使用Flash CSx進行開發。

2.FMS技術指南。這個教程主要是講述FMS配置的,第2部分涉及到叢集,負載均衡等內容,挺高階的。

2.Red5:開源流媒體伺服器,基於Java的。曾經使用過,感覺也還算比較方便,如果商業應用,又買不起昂貴的FMS的話,使用也不錯。伺服器端程式設計使用Java語言。

3.還有其他伺服器,但目前我還沒接觸過

2.RTMPdump(libRTMP)的使用

這一章就要開始學習RTMP協議的處理了。

可以使用RTMPdump(libRTMP)進行學習。這是一個C++的開源工程。主要作用是下載RTMP流媒體。首先可以瞭解一下其使用方法:RTMPdump 使用說明

3.RTMPdump(libRTMP)原始碼分析

這一章開始學習RTMPdump(libRTMP)的原始碼。學習它之前需要有Socket程式設計的基礎。

其次從協議規範中,總結出RTMP協議建立連線的流程:RTMP流媒體播放過程

然後,下載一個windows下可以編譯通過的RTMPdump工程(這個工程是很難得!):rtmpdump vs2005版本

(當然,linux下會方便很多,因為RTMPdump就是在linux下開發完成的)

最後,通過除錯工程,就可以基本掌握RTMP協議了,我寫了一些分析RTMPdump(libRTMP)原始碼的文章:

4.相關示例程式碼

下面的工程包含了和RTMP相關的示例程式碼。

(1)libRTMP單獨進行流媒體處理的例子

(2)FFmpeg和libRTMP結合進行流媒體處理的例子

(3)使用Adobe Flash中的ActionScript(而非C/C++)處理的例子

Simplest flashmedia example 最簡單的基於Flash的流媒體示例簡介本程式是一個Flash流媒體示例的合集。其中包含了使用Actionscript編寫的推流器和播放器,以及網頁播放器。本工程包含如下基於Flash技術的流媒體的例子:

simplest_as3_rtmp_player:  最簡單的RTMP播放器(基於ActionScript)

simplest_as3_rtmp_streamer:最簡單的RTMP推流器(基於ActionScript)

rtmp_sample_player_adobe: 從Adobe Flash Media Sever提取出來的測試播放器

rtmp_sample_player_wowza: 從Wowza伺服器中提取出來的測試播放器

rtmp_sample_player_flowplayer: 基於FlowPlayer的RTMP/HTTP播放器(新增RTMP plugin)

rtmp_sample_player_videojs: 基於VideoJS的RTMP/HTTP播放器

rtmp_sample_player_jwplayer: 基於JWplayer的RTMP/HTTP播放器

hls_sample_player_flowplayer: 基於FlowPlayer的HLS播放器(新增HLS plugin)

hls_video_player_html5: 基於HTML5的HLS/HTTP播放器

activex_vlc_player:  基於VLC的ActiveX控制元件的播放器

文章《最簡單的基於Flash的流媒體示例:RTMP推送和接收(ActionScript)》《最簡單的基於Flash的流媒體示例:網頁播放器(HTTP,RTMP,HLS)》專案主頁SourceForge:https://sourceforge.net/projects/simplestflashmediaexample/Github:https://github.com/leixiaohua1020/simplest_flashmedia_example

5.相關應用

libRTMP作用還是很大的,除了可以儲存RTMP流媒體之外,還可以傳送RTMP流媒體等等。它可以整合到FFMPEG中,下面幾篇文章簡述了它的應用:

(以後更新其他方面......)