1

私のアプリは、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関数が間違ったパラメータを取得しているようですが、どうすれば修正できますか?

どうもありがとう。

4

1 に答える 1

0

私にも同じ問題が発生します。 AudioQueue コールバックが時間通りに呼び出されない場合に発生するようです。

于 2012-09-05T09:34:36.693 に答える