LIVE555 利用FIFO實現直播

2021-08-02 09:44:14 字數 1718 閱讀 8502

1.live555 直播

直播方案採取的是  直播流  -> fifo -> 輸出  的技術路線。

2.搭建:

a. 在live555 編譯之後,在bin檔案下,有很多可執行程式生成,這些程式有些是live555伺服器(live555mediaserver),有些是客戶端(testrtspclient),還有大量的流推送服務(testmpeg2transportstreamer)

b.我們選取testondemandrtspserver(客戶響應服務) 和  testmpeg2transportstreamer(推流) 就可以搭建乙個live555直播。

3.服務端**修改:

在 testondemandrtspserver.cpp 中我們可以看到以下**內容:

// a mpeg-2 transport stream, coming from a live udp (raw-udp or rtp/udp) source:

else

*env << " port " << inputportnum << ")\n";

*env << "play this stream using the url \"" << url << "\"\n";

delete url;

}

我們需要修改的地方有以下幾處:

a. 把輸入流的位址,從 "239.255.42.42" 改為回環位址 「127.0.0.1」(因為推流程式和服務程式都在本機)

b. 把輸出的流名streamname  從 "mpeg2transportstreamfromudpsourcetest" 改為自己設定的 「live」

4.推流端服務**修改:

推流** testmpeg2transportstreamer.cpp 有以下幾個地方需要修改:

a. 對應服務端,把傳送位址改為 「127.0.0.1"

char const* destinationaddressstr = "127.0.0.1";

char const* inputfilename = "test.ts"; 改為 char const* inputfilename = "/var/ibuf_fifo";

fifo檔案的特殊性: 前端的編碼器修改引數,必然會中斷編碼器流輸出,此時fifo會被testmpeg2transportstreamer這個傳送端讀空。

因此需要處理fifo的上溢和下溢。

具體的修改: 在類的filereadablehandler

函式中新增以下內容(此處的修改以fifo的大小為2m為例):

void newbytestreamfilesource::filereadablehandler(newbytestreamfilesource* source, int /*mask*/) 

; dropnum = fread(buffer, 1, 1000 * 188 , source->ffid);

printf("[%s]%d drop data (%d) ...\n", __func__, __line__, dropnum);

} source->handleclosure();

} // 新增**結束

if (!source->iscurrentlyawaitingdata())

source->doreadfromfile();

}

live555原始碼分析 live555大致流程

今天大致分析了下live555的流程,以h264為例子進行的分析.從連線到傳送rtp rtcp資料報。首先分析呢,不能太關注細節,先整體再區域性。在分析的過程中,設計到live555自己封裝的乙個高階類 比如迭代器,雜湊表,而且這2個類在live555中運用的範圍還非常的廣,但是無不例外都是用鍊錶進...

Live555學習筆記

live555原始碼 官網 關於live555編譯 linux編譯 1.進入live555目錄 cd live 2.執行genmakefiles檔案 genmakefiles linux 3.makefile windows編譯 無關於入口函式 標頭檔案位置 無 原始檔位置 mediaserver ...

Live555學習筆記

前一陣子,因為專案需要,研究了一下live555開源框架,研究的不是很深入,基本上把live555當做api用了一下,但是畢竟也是本人看的第乙個開源框架,在此記錄總結一下。主要使用其中的四個目錄,分別對應live555的四個庫 usageenvironment目錄,生成的靜態庫為libusageen...