rtmp和聲學回聲消除調研

2021-08-02 20:01:21 字數 2631 閱讀 6523

** 

一、應用場景

二、rtmp和延時

1. rtmp

的特點如下:

1) adobe

採用udp自己開發一套私有協議,可以大幅度減少延遲,缺點會有丟包,而且傳送端包的順序,到接收端會有亂碼,需要自己實現一套排序機制,進行正確排序。

2. rtmp

延遲的測量

如何測量延時,是個很難的問題,

不過有個行之有效的方法,就是用手機的秒錶,可以比較精確的對比延時。

經過測量發現,在網路狀況良好時:

. rtmp延時可以做到0.8秒左右。

. 多級邊緣節點不會影響延遲(和srs同源的某cdn的邊緣伺服器可以做到)

. nginx-rtmp延遲有點大,估計是快取的處理,多程序通訊導致?

. gop是個硬指標,不過srs可以關閉gop的cache來避免這個影響.

. 伺服器效能太低,也會導致延遲變大,伺服器來不及傳送資料。

. 客戶端的緩衝區長度也影響延遲。

譬如flash客戶端的netstream.buffertime設定為10秒,那麼延遲至少10秒以上。

3. gop-cache

4. 

累積延遲

除了gop-cache,還有乙個有關係,就是累積延遲。

伺服器可以配置直播佇列的長度,伺服器會將資料放在直播佇列中,

如果超過這個長度就清空到最後乙個i幀:

當然這個不能配置太小,

譬如gop是1秒,queue_length是1秒,這樣會導致有1秒資料就清空,會導致跳躍。

有更好的方法?有的。

延遲基本上就等於客戶端的緩衝區長度,因為延遲大多由於網路頻寬低,

伺服器快取後一起發給客戶端,現象就是客戶端的緩衝區變大了,

譬如netstream.bufferlength=5秒,那麼說明緩衝區中至少有5秒資料。

處理累積延遲的最好方法,是客戶端檢測到緩衝區有很多資料了,如果可以的話,就重連伺服器。

積累延時這個需要測試後調整。

本人實際測量,先將red5.property修改send_buffer,receive_buffer

資料頭加上時間碼,測量後傳輸層延時幾乎為0.

三、聲學回聲消除

speex 簡介

speex 

語音是乙個開源、免費軟體專利的自由音訊壓縮格式的語音設計。該專案旨在降低speex語音處理的免費性,來替代昂貴的專有語音編碼及應用進入壁壘。此外,speex 可適應網際網路的應用,並提供有用的功能。

speex 

是gnu工程的一部分,是根據經修訂的bsd許可證發布的。

技術實現:

speex 

是基於celp(

碼激勵線性**編碼

)的,旨在將語音壓縮位元率降到從2到44kbps。

功能:窄帶(8khz),寬頻(16khz)和超寬頻(32khz)在同乙個碼流壓縮。

強度立體聲編碼

資料報丟失隱藏

可變位元率(vbr)

語音活動檢測(vad)

間斷變速器(dtx)

定點模式

聲學回聲消除(aec)

噪音抑制(noise)

speex

本身自帶了一些回聲消除演算法介面。大概實現思路, 1.

是先取得當前揚聲器的聲音player。 2.

是從mic採集聲音recorder。 3.

是進行回音消除,得到outbuffer。消除回聲的buffer發給接收端。

speex 1.2

speex

的窄帶編碼演算法是基於

8k 16bit 

單聲道,

每幀資料

160個取樣

speex

內部將160

個取樣點

,分成了

4個子幀

,每個子幀40個

(…)

計算8000 frequency 

下的framesize 160

個取樣點,

filter_length = 160*8;

framesize 

取樣的幀長一般是

80,160

,320

filter 

回音消除的尾長

一般是80*10,160*10,320*10

這些需要實際驗證。

speexechostate*echo_state = speex_echo_state_init(frame_size, filter_length);

frame_size 

的取值最好是乙個編碼的

frame

大小,在低頻寬條件下,一般延遲

20ms

,而大小為

160filter_length,

最好是房間內反射時間的

1/3如

: 乙個房間的反射時延為

300ms

那麼這個

filter_length

就最好是

100ms(

這個長度又被稱為

tail length).

RTMP協議分析 一 RTMP包頭

rtmp協議 封包 參考red5 rtmp協議封包 由乙個包頭和乙個包體組成,包頭可以是4種長度的任意一種 12,8,4,1 byte s 完整的rtmp包頭應該是12bytes,包含了時間戳,head type,amfsize,amftype,streamid資訊,8位元組的包頭只紀錄了時間戳,h...

RTMP學習(一)RTMP協議介紹

rtmp協議中的資料被稱為message 訊息 乙個message包含message head和message body。在網上傳輸的時候,如果乙個message太大,那麼它將會被分段傳輸。乙個分段被稱為chunk,chunk包含chunk head 和chunk body。chunk的長度初始長度...

RTMP協議分析 一 RTMP包頭

rtmp協議 封包 參考red5 rtmp協議封包 由乙個包頭和乙個包體組成,包頭可以是4種長度的任意一種 12,8,4,1 byte s 完整的rtmp包頭應該是12bytes,包含了時間戳,head type,amfsize,amftype,streamid資訊,8位元組的包頭只紀錄了時間戳,h...