Re: [問題] 聲音傳輸

看板Programming作者 (每次下中華隊都輸...orz)時間14年前 (2010/12/19 16:44), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
建議原po還是先不要想那麼遠,基本的先做
12/19 16:52, 2F
文章代碼(AID): #1D3SNWZM (Programming)
討論串 (同標題文章)
本文引述了以下文章的的內容:
2
8
完整討論串 (本文為第 2 之 2 篇):
2
8
文章代碼(AID): #1D3SNWZM (Programming)