Live555 簡介
概述
•Live555 是一個為流媒體提供解決方案的跨平台的C++開源項目
特點
•針對流媒體處理的C++庫的集合
•跨平台:Unix, linux, Mac OS X, Windows, QNX and other POSIX-compliant systems
•使用開源標准協議:RTP/RTCP, RTSP, SIP
•用於音視頻數據的流化、接收
•處理MPEG, H.265, H264, H263+, DV, JPEG視頻和多種音頻編解碼
•良好的音視頻編解碼擴展支持
•用於播放器的流媒體播放功能的實現,如VLC(VideoLan)、MPlayer。
Live555 框架
Live555 包含如下幾個庫
•UsageEnvironment
–該庫是對系統環境的抽象,包括抽象基類“UsageEnvironment”,“TaskScheduler”和“HashTable”
– “UsageEnvironment”和“TaskScheduler”類的功能
»調試延遲事件
»指定異步讀取事件處理程序
»輸出錯誤或警告信息
–“HashTable”類的功能
»定義了一個通用哈希表的接口,在整個代碼環境中都可以使用
–這些抽象基類必須在實現中被子類化應用,這些子類可以利用程序所運行環境的屬性(如:圖形用戶界面或腳本環境)
•groupsock
–該庫中的類封裝了網絡接口和套接字,用於實現數據包的發送和接收
–“Groupsock”類封裝了一個用於收發多播數據報的套接字
•livemedia
–該庫中定義了一個類層次結構,根源於抽象類“Medium”,它適用於各種流媒體類型和編解碼器
–其他所有類都是通過“Medium”類派生的,其中幾個派生類如下:
»RTSPClient: 該類實現RTSP請求的發送和響應的解析,同時根據解析的結果創建對就的RTP會話
»MediaSession: 用於表示一個RTP會話,一個MediaSession可能包含多個子會話(MediaSubSession)
»RTCPInstance: 該類實現RTCP協議的通信
»Source和Sink: Source抽象了數據源,比如通過RTP讀取數據。Sink是數據消費者的抽象,比如把接收到數據存儲到文件,該文件就是一個Sink. 數據的流動可能經過多個Source和Sink. MediaSink是各種類型的Sink的基類,MediaSource是各種類型Source的基類,各種類型的流媒體格式和編碼的支持即是通過對這兩個類的派生實現的。Source和Sink通過RTP子會話(MediaSubSession)聯系在一起。
•BasicUsageEnvironment
–該庫是“UsageEnvironment”類庫子類化的一個用於簡單控制台應用的具體實現
–讀取事件和延遲操作使用一個select()循環處理
•testProgs
–該目錄實現了用“BasicUsageEnvironment”展示如何利用這些庫開發應用的一些簡單程序
–測試程序介紹如下:
»RTSP client
•testRTSPClient是一個命令行程序,它展示了如何打開和接收指定RTSP URL的流媒體(e.g. rtsp://開頭的URL)。這個演示應用程序對接收到的音視頻數據什么處理都沒做,但是可以在自己的應用中使用和改編這個代碼來解碼和播放接收的數據。
•openRTSP類似testRTSPClient,但有更多的的功能。它不像testRTSPClient, 旨在作為一個完整的,全功能的應用程序,而不是在其它應用中使用的代碼。
»RTSP server
•testOnDemandRTSPServer創建了一個RTSP服務器,它可以流化媒體,通過RTP單播,從不同類型的媒體文件點播。(支持媒體類型包括:MPEG-1/MPEG-2音視頻(基本流),包括MP3音頻;MPEG-4視頻(基本流); H.264視頻(基本流);H.265視頻(基本流);MPEG節目或者傳輸流,包括VOB文件;DV視頻;AMR音頻; WAV(PCM)音頻)。
•這個服務器也可以從一個Matroska或者WebM文件(通過解復用和流化文件音軌)流化媒體。 MPEG傳輸流也可以通過原始UDP被流化,如果需要,例如通過一個機頂盒。
•這個RTSP服務器應用程序同時演示了如何通過RTSP傳遞一個(作為一個UDP原始UDP或者RTP/UDP)多播或者單播流到達服務器的) MPEG傳輸流。特別地,它被默認設置接受來自“testMPEG2TransportStreamer”演示應用程序的輸入。
»SIP client
•playSIP是一個類似openRTSP的命令行程序,它產生一個SIP會話調用(使用一個sip:URL),並且記錄收到的媒體流到一個文件中(可選項)。
»MP3 audio test programs
•testMP3Streamer反復讀取一個MP3音頻文件(test.mp3),並使用RTP流化它到多播組239.255.42.42,端口6666(使用RTCP的話端口號為6667)。該程序還有一個可選的內置RTSP服務器
•testMP3Receiver則相反:它從相同多播組/端口讀取MP3 / RTP流,並輸出復原的MP3流到“標准輸出”。它還會發送RTCP接收報告。
•此外,MP3 / RTP流可使用這些工具之一進行播放。
»MPEG video test programs
•testMPEG1or2VideoStreamer從MPEG-1或2的視頻文件(名為“test.mpg”)反復讀取和(使用端口8889與RTCP)流它,使用RTP,到組播組239.255.42.42,端口8888。此程序還具有一個(選配)內置的RTSP服務器。
默認情況下,輸入文件被假定為MPEG視頻基本流。但是,如果它是一個MPEG程序流,那么你也可以插入一個解復用濾波器提取的視頻基本流。 (詳情請參閱“testMPEG1or2VideoStreamer.cpp”。)
蘋果的“QuickTime播放器”可用於接收和查看該流式視頻(假設它是MPEG-1,而不是MPEG-2)。要使用此功能,必須QuickTime播放器打開文件“testMPEG1or2Video.sdp”。 (如果“testMPEG1or2VideoStreamer的”RTSP服務器已經啟用,則QuickTime播放器也可以使用“RTSP://” URL播放流。)
開源“VLC”和“MPlayer的”媒體播放器也可以使用。
RealNetworks公司的“RealPlayer的”也可以被用來播放流。(推薦使用最新版本。)
•testMPEG1or2VideoReceiver則相反:它讀取MPEG視頻/ RTP流(從相同多播組/端口),並輸出復原的MPEG視頻(基本)流到“標准輸出”。它還會發送RTCP接收報告。
•testMPEG4VideoStreamer從MPEG-4的基本碼流的視頻文件(名為“test.m4e”)反復讀取,並使用RTP多播流化。此程序還具有一個內置的RTSP服務器。
蘋果的“QuickTime播放器”可用於接收和播放該音頻流。要使用此功能,讓播放器打開會話“RTSP://”的URL(當它開始流化時該程序打印出來的)。
開源“VLC”和“MPlayer的”媒體播放器也可以使用。
•testH264VideoStreamer從H.264的基本流的視頻文件(名為“test.264”)反復讀取,並使用RTP組播流化。此程序還具有一個內置的RTSP服務器。
蘋果的“QuickTime播放器”可用於接收和播放該音頻流。要使用此功能,讓播放器打開會話“RTSP://”的URL(當它開始流化時該程序打印出來的)。
開源“VLC”和“MPlayer的”媒體播放器也可以使用。
•testH265VideoStreamer從H.265基本流的視頻文件(名為“test.265”)反復讀取,並使用RTP組播流化。此程序還具有一個內置的RTSP服務器。
»MPEG audio+video (Program Stream) test programs
•testMPEG1or2AudioVideoStreamer讀取MPEG-1或2程序流文件(名為“test.mpg”),從該音頻和視頻基本流中提取,並且使用RTP流化到組播組239.255.42.42,端口6666/6667(對於音頻流)和8888/8889(用於視頻流)。此程序還具有一個可選的內置RTSP服務器。
蘋果的“QuickTime 播放器”可用於接收和查看該流式視頻(假設它是MPEG-1,而不是MPEG-2)。要使用此功能,使用QuickTime播放器打開文件“testMPEG1or2AudioVideo.sdp”。 (如果“testMPEG1or2VideoStreamer的”RTSP服務器已經啟用,則QuickTime播放器也可以播放以“rtsp://”開頭的URL的流)
開源“VLC”和“MPlayer的”媒體播放器也可以使用。
•testMPEG1or2Splitter讀取MPEG-1或2程序流文件(名為“in.mpg”),並從中提取出一個音頻和一個視頻基本流。這兩個基本流分別寫入命名為“out_audio.mpg”和“out_video.mpg”的文件。
»MPEG audo+video (Transport Stream) test programs
•testMPEG2TransportStreamer讀取MPEG傳輸流文件(名為“test.ts”),並且使用RTP流化它到組播組239.255.42.42,端口1234(RTCP使用端口1235)。此程序還具有一個(可選的)內置的RTSP服務器。
開源“VLC”媒體播放器,可用於播放此流。
•testMPEG2TransportReceiver則相反:它讀取MPEG傳輸/ RTP流(從相同多播組/端口),並輸出復原MPEG傳輸流到“標准輸出”。它還會發送RTCP接收報告。 testMPEG1or2ProgramToTransportStream讀取MPEG-1或2程序流文件(名為“in.mpg”),並且將其轉換為等效的MPEG傳輸流文件,命名為“out.ts”。
•testH264VideoToTransportStream讀取H.264視頻基本流文件(名為“in.264”),並且將其轉換為等效的MPEG傳輸流文件,命名為“out.ts”。
•testH265VideoToTransportStream讀取H.265視頻基本流文件(名為“in.265”),並且將其轉換為等效的MPEG傳輸流文件,命名為“out.ts”。
»PCM audio test program
•testWAVAudioStreamer從WAV格式的音頻文件(名為“test.wav”)讀出,並使用內置的RTSP服務器通過IP多播流化封閉的PCM音頻流。
該程序支持8位或16位PCM數據流,單聲道或立體聲,在任何采樣頻率。
蘋果的“QuickTime播放器”可用於接收和播放該音頻流。要使用此功能,讓播放器打開會話“rtsp://”的URL(當它開始流時該程序打印出來的)。
可選地,16位PCM數據流可以被轉換為8位的u-law格式優先流化。 (有關如何執行此操作說明,請參閱“testWAVAudioStreamer.cpp”。)
開源“VLC”和“MPlayer的”媒體播放器也可以使用。
»AMR audio test program
•testAMRAudioStreamer讀取AMR-格式的音頻文件(名為“test.amr”)- 定義在RFC3267,第5章- 並且使用內置的RTSP服務器經由IP多播流化封閉的音頻流。
蘋果的“QuickTime播放器”可用於接收和播放該音頻流。要使用此功能,讓播放器打開會話“rtsp://”的URL(當它開始流化時該程序打印出來的)。
»DV video test program
•testDVVideoStreamer讀取DV視頻文件(名為“test.dv”),並使用的是內置的RTSP服務器通過IP組播流化。
目前,我們知道沒有廣泛使用的媒體播放器客戶端,可以播放該流。
»Matroska (or ‘Webm’) streaming test program
•testMKVStreamer讀取“Matroska”(或“WEBM”)文件(名為“test.mkv”),並使用的是內置的RTSP服務器通過IP組播流化它。
»VOB (DVD) streaming test program
•vobStreamer讀取一個或多個“.VOB”的文件(例如,從DVD),提取音頻和視頻流,並且使用RTP多播發送。
»Support for server ‘trick play’ operations on MPEG Transport Stream files
•應用程序MPEG2TransportStreamIndexer和testMPEG2TransportStreamTrickPlay
»Miscellaneous test programs
•testRelay反復讀取UDP多播套接字和轉發(“中繼”)每個數據包的有效載荷到一個新的(多播或單播)地址和端口。
•testReplicator類似於testRelay,不同之處在於它使用“FrameReplicator”類復制輸入流並轉發一個副本流至另一個(多播或單播)地址和端口,同時將其他副本流寫入一個文件。
•sapWatch讀取並打印默認SAP的目錄(224.2.127.254/9875)的SDP/ SAP公告
•registerRTSPStream發送自定義的RTSP“REGISTER”命令到指定的RTSP客戶端(或代理服務器),要求它流化一個給定的“rtsp://”URL
•WindowsAudioInputDevice
–該庫是基於“liveMedia”庫的抽象類“AudioInputDevice”的一個實現
–Windows 應用程序可以使用它從一個輸入設備讀取PCM音頻采樣
–該項目創建了兩個庫:
»libWindowsAudioInputDevice_mixer.lib :使用windows內置調音台
»libWindowsAudioInputDevice_noMixer.lib :不使用windows內置調音台