[問題] bufferstream 與 即時串流影音

看板AndroidDev作者 (麥香紅茶)時間10年前 (2014/07/08 22:37), 10年前編輯推噓2(204)
留言6則, 2人參與, 最新討論串1/1
大家好 小弟 正在寫一個APP 遇到了一點問題 我使用 android smart phone 的 usb port 外接一個 MCU 微控制晶片 (RX TX 的傳收方式) 獲取 data 目前可以做到 filetransfer 沒有問題 現在 想做成 如果收發 聲音或影片檔 可以做到即時串流播放 我的做法是 先令這兩個 stream public FileOutputStream fos_save; public BufferedOutputStream buf_save; 兩個stream 的關係 fos_save = new FileOutputStream(ACCESS_FILE); buf_save = new BufferedOutputStream(fos_save); 之後 用一個 Thread 去 寫入檔案 save_file_thread(Handler h, BufferedOutputStream stream) outstream = stream; 中間經過 MCU 獲得 data outstream.write 寫到file 裡 以上的步驟 可以精準的做 filetransfer 但我之後 同時 用一個Runnable 去 用 android mediaplayer 去撥放同一個正在寫入 的檔案 撥出來的聲音 會失真 且 幾秒後 就會撥不下去 請問這個問題 是因為 同時寫入和讀出同一個檔案的緣故嗎? 我也想請問 有沒有 mediaplayer 可以直接 讀取bufferstream 去做播放呢 謝謝各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.217.29 ※ 文章網址: http://www.ptt.cc/bbs/AndroidDev/M.1404830258.A.D3F.html ※ 編輯: DaVinciAnn (140.112.217.29), 07/08/2014 22:38:51

07/08 23:31, , 1F
試試看雙緩衝(double buffer)的設計方式
07/08 23:31, 1F

07/09 01:34, , 2F
這種做法是將檔案下載下來進行撥放,所以你開mediaplayer
07/09 01:34, 2F

07/09 01:34, , 3F
buffer抓了多少就只能撥多少~雖然你的thread還是一直在抓
07/09 01:34, 3F

07/09 01:36, , 4F
除非你要模擬成progressive HTTP streaming的方式才有辦
07/09 01:36, 4F

07/09 01:37, , 5F
法做到,也因為mediaplayer呼叫底層mediaplayerservice是
07/09 01:37, 5F

07/09 01:38, , 6F
看source 來源 所以你也需要將檔名變成網址開頭
07/09 01:38, 6F
文章代碼(AID): #1Jl08oq_ (AndroidDev)