2012-02-10 1 views
1

내 앱은 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 함수가 잘못된 매개 변수를 가져 오는 것 같지만이를 수정하는 방법은 무엇입니까?

대단히 감사합니다.

답변

0

동일한 문제가 발생해도 AudioQueue 콜백이 시간에 호출되지 않는 것처럼 보입니다.