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

作者: DaVinciAnn (麥香紅茶)   2014-07-08 22:37:33
大家好
小弟 正在寫一個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 去做播放呢
謝謝各位
作者: GreenPikachu (皮卡皮卡^_^)   2014-07-08 23:31:00
試試看雙緩衝(double buffer)的設計方式
作者: jerrysky (jerry~sky)   2014-07-09 01:34:00
這種做法是將檔案下載下來進行撥放,所以你開mediaplayerbuffer抓了多少就只能撥多少~雖然你的thread還是一直在抓除非你要模擬成progressive HTTP streaming的方式才有辦法做到,也因為mediaplayer呼叫底層mediaplayerservice是看source 來源 所以你也需要將檔名變成網址開頭

Links booklink

Contact Us: admin [ a t ] ucptt.com