AudioQueue得到错误的数据包?

时间:2012-02-10 05:01:44

标签: ios core-audio audioqueue

我的应用使用 ffmpeg将mms流解析为缓冲区,并使用音频队列播放缓冲数据。现在我可以确认缓冲数据是好的,但我无法播放它。播放结构基于AudioFileStreamExample演示的客户端,它可以播放 http流(AudioFileStreamExample演示服务器) 。我在回调函数中注意到:

void MyPacketsProc(void *inClientData, UInt32 inNumberBytes, 
    UInt32 inNumberPackets, const void *inInputData, 
    AudioStreamPacketDescription *inPacketDescriptions),

当我直接播放AudioFileStreamExample demo的http流时,param inNumberPackets大多数时间大于1;当我播放mms流时,inNumberPackets始终为1. audioQueue仅播放第一个数据包,所有最后一个数据包都丢失。

使用AudioFileStreamExample demo的http流的日志:

*AudioStreamBasicDescription info ----*

SampleRate        :44100.000000
FormatID          :778924083
FormatFlags       :0
BytesPerPacket    :0
FramesPerPacket   :1152
BytesPerFrame     :0
ChannelsPerFrame  :2
BitsPerChannel    :0

got data.  bytes: 1253  packets: 2
packetSize:626   
kAQBufSize:24576

bytesFilled:0
packetSize:627   


kAQBufSize:24576
bytesFilled:626

got data.  bytes: 627  packets: 1
packetSize:627   

kAQBufSize:24576

bytesFilled:1253

使用解析的mms流的日志:

*AudioStreamBasicDescription info ----*

SampleRate        :48000.000000
FormatID          :1819304813
FormatFlags       :12
BytesPerPacket    :4
FramesPerPacket   :1
BytesPerFrame     :4
ChannelsPerFrame  :2
BitsPerChannel    :16

got data.  bytes: 4498  packets: 1


packetSize:216      
kAQBufSize:24576    
bytesFilled:0    

got data.  bytes: 1090  packets: 1


packetSize:576       
kAQBufSize:24576    
bytesFilled:216

got data.  bytes: 3064  packets: 1


packetSize:576     
kAQBufSize:24576    
bytesFilled:792

got data.  bytes: 3978  packets: 1


packetSize:252       
kAQBufSize:24576    
bytesFilled:1368

我不知道如何解决这个问题。似乎MyPacketsProc函数得到了错误的参数,但是如何修复呢?

非常感谢。

1 个答案:

答案 0 :(得分:0)

同样的问题也发生在我身上, 它似乎发生在当时没有调用AudioQueue回调时。