AudioQueue获取了错误的数据包编号



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

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

当我直接播放AudioFileStreamExample演示的http流时,参数inNumberPackets大多数时候都大于1;当我播放mms流时,inNumberPackets总是1。audioQueue只播放第一个数据包,所有最后的数据包都会丢失。

使用AudioFileStreamExample演示的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函数似乎得到了错误的参数,但如何修复它?

非常感谢。

同样的问题也发生在我身上,当AudioQueue回调没有按时调用时,似乎会发生这种情况。

相关内容

  • 没有找到相关文章

最新更新