Re: [問題] 聲音傳輸
※ 引述《CSLabor (電腦工人)》之銘言:
: 請問一下
: 如果我把A端的音樂檔切成一小塊一小塊傳給B
: 再由B將其音樂一小塊一小塊播出來
: 並保證B端音樂播放的流暢性
:
: 這樣的串流傳輸過程
: 請問有相關的資料嗎?
: 網路上似乎找不太到資料說
:
: 在這邊先謝謝有經驗的前輩幫我解答
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 125.225.135.211
: ※ CSLabor:轉錄至看板 C_and_CPP 12/18 08:56
: 推 stool100:FIFO 當 buffer 220.132.235.209 12/18 12:53
: → CSLabor:感謝樓上 但是是Client-Server傳送 125.225.135.12 12/18 13:22
: → CSLabor:不是Process間傳送 125.225.135.12 12/18 13:22
: 推 uziel:切割和播放的部分我沒做過,但是這種即時 111.82.106.126 12/18 13:47
: → uziel:播放多媒體資料的網路封包應該是以 UDP 協定 111.82.106.126 12/18 13:48
: → uziel:來傳送,也就是 server 丟出封包之後就 111.82.106.126 12/18 13:50
: → uziel:不檢查封包的下落,如果封包有丟失, client 111.82.106.126 12/18 13:51
: → uziel:端看/聽起來就是 lag 。 111.82.106.126 12/18 13:52
經過的路人乙來回答一下
一樓的推文就是正解,FIFO是一個非常廣泛的概念
即使你坐公車排隊也是FIFO,並不單指process之間傳輸
(原po作業系統和程式語言這兩門課可能有點不太認真喔 :p)
至於u同學的疑慮也頗有道理,如果要使用UDP要仔細考慮網路的可用度
不過,UDP掉音訊封包的結果多半不是lag (因為他沒有retransmission)
而是掉少量封包造成爆音、雜音
我的建議是
第一步:先去找一份錄音程式的sample code來研讀
瞭解錄音、放音所需API,並嘗試改code在錄音未終止時就取用buffer
將整段錄音存成數個至數十個size差不多的零碎檔案
第二步:寫另一個程式將這些零碎的檔案循序讀取並播放
第三步:找一份兩點間網路傳輸的sample code來研讀
瞭解listen port、開thread處理incoming connection等等網路基本技巧
第四步:把前三步整合起來
(A)錄音thread邊錄邊丟進buffer
(A)傳送thread在buffer有資料時就往外丟封包
(B)接收thread收到封包就丟進buffer
(B)播放thread在buffer有資料時就往音效裝置送
這樣就可以了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.240.214.84
→
12/19 16:52, , 1F
12/19 16:52, 1F
→
12/19 16:52, , 2F
12/19 16:52, 2F
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章