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...