내 앱은 ffmpeg를 사용하여 mms를 버퍼에 스트리밍으로 파싱하고 오디오 큐을 사용하여 버퍼링 된 데이터를 재생합니다. 이제는 버퍼링 된 데이터가 양호하다는 것을 확인할 수 있지만 재생할 수는 없습니다. 재생 구조는 AudioFileStreamExample 데모의 클라이언트를 기반으로하며 http 스트림 (AudioFileStreamExample 데모의 서버)을 재생할 수 있습니다. 나는 콜백 함수에서주의 사항 : 내가 직접 AudioFileStreamExample 데모의 HTTP 스트림을 재생할 때AudioQueue가 잘못된 패킷 수를 얻습니까?
void MyPacketsProc(void *inClientData, UInt32 inNumberBytes,
UInt32 inNumberPackets, const void *inInputData,
AudioStreamPacketDescription *inPacketDescriptions),
의 PARAM 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
함수가 잘못된 매개 변수를 가져 오는 것 같지만이를 수정하는 방법은 무엇입니까?
대단히 감사합니다.