Re: [問題] iOS播放streaming的audio
※ 引述《chris1000 (矜持)》之銘言:
: 想法是
: 1. 將收到的g.726 raw data解碼成raw PCM後
: 2. 再使用audio queue servie去將PCM data enqueue並播放
: 但是後半段播放出來的聲音一直是播一小段頓一下的狀況
: ConnectionRequest.m
: -(void) connection:(NSURLConnection *)connection
: didRecieveData:(NSData *)data
: {
: int outDataSize = 0;
: void *outDatabuf = malloc(data.length*8);
: //將G.726編碼的data 解碼成raw PCM至outDatabuf
: [G726Decoder decodeFrame:data.bytes
: withDatasize:data.length
: withOutData:outDatabuf
: withOutDataSize:&outDataSize];
: dispatch_queue_t playQueue = dispatch_queue_create("play", NULL);
: dispatch_async(playQueue, ^(void){
: playBuffer(outDatabuf, outDataSize);
: free(outDatabuf);
: });
: dispatch_release(playQueue);
: }
: player.c
: void AQCallback(void *in, AudioQueueRef inQ, AudioQueueBufferRef outQB)
: {
: //將pcm data目前播到的位置開始複製資料到outQB->mAudioData
: //使用AudioQueueEnqueueBuffer(inQ, outQB, 0, NULL)來Enqueue
: }
: int playBuffer(void *pcm, int len)
: {
: //使用AudioQueueService播放pcm data
: //1. 將AudioStreamBasicDescription初始化
: //2. 使用AudioQueueNewOutput建立一個outputQueue,
: // callback為AQCallback()
: //3. 使用AudioQueueAllocateBuffer來建立3個buffer
: //4. call 1次AQCallback()來Enqueue
: //5. 使用AudioQueueStart開始播放
: //6. 用一個while loop卡住直到pcm被播放完畢
: }
: 後面player的部分我有試過直接播一個已經存檔的PCM raw data
: 可以很順利的播完
: 但是拿來播stream就變成播一下頓一下播一下頓一下
: 目前didRecieveData收到的data size大約是1000~2000不等
: 解完碼後的PCM大小是四倍,大約是4000~8000不等
: 請問
: 1. 是否需要將PCM raw data先丟到一個buffer,
: 等待累積到一定程度以後再丟去player播放?
是
: 2. 如果需要一個buffer來處理read/write,那麼這個buffer大小應該要多大比較好?
: 這種buffer management有沒有iOS版本的範例可以參考?
https://github.com/michaeltyson/TPCircularBuffer
: 3. didRecieveData是否能設定每次收下來都固定大小而不是浮動的?
不行
: 4. 是否改用NSThread會比dispatch queue好?
不會
: 5. 這種情況改用OpenAL會不會比較快....但是OpenAL好像都拿來作同時播放多個音效?
不會
: 感謝各位看到最後<(_ _)>
你的問題應該是在產生太多AudioQueue了,變成下面這種狀況
receive data-> decode -> create AudioQueue -> play
↑ ↓
L_______________________________________↲
應該是要這樣才合理 (buffer big enough)
create AudioQueue -> receive data -> decode -> add to buffer --> play
^ |
L________________________↲
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.24.155
推
05/08 10:51, , 1F
05/08 10:51, 1F
→
05/08 15:29, , 2F
05/08 15:29, 2F
討論串 (同標題文章)