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