8

sto usando questo tutorial Multipeer Connectivity Audio Stream To Multiple Peers e questo progetto Github Repository, per lo streaming audio da NSInputStream, che si ottiene:Fail Parsing M4A, AAC di file con File di Apple Audio Servizi Ruscello, iOS 7

-(void)session:didReceiveStream:withName:fromPeer: 

Metodo delegato MCSession.

Dopo, questo open un nuovo flusso di file audio (TDAudioFileStreamer/Corsi/AudioFileStream.m: 39):

OSStatus err = AudioFileStreamOpen((__bridge void *)self, TDAudioFileStreamPropertyListener, TDAudioFileStreamPacketsListener, 0, &_audioFileStreamID); 

quindi leggere byte dal NSInputStream e cercare di analizzare in questo modo (TDAudioFileStreamer/Corsi/AudioFileStream .m: 98):

err = AudioFileStreamParseBytes(self.audioFileStreamID, length, data, kAudioFileStreamParseFlag_Discontinuity); 

Oppure:

err = AudioFileStreamParseBytes(self.audioFileStreamID, length, data, 0); 

a seconda del flusso di dati.

Infine, riempire AudioQueue Buffer con i dati analizzati per riprodurre (credo - TDAudioFileStreamer/Classes/TDAudioQueueFiller.m).

Questo funziona davvero bene per i file in formato MP3, ma con altri formati quando si tenta di analizzare i byte ottenere l'errore "formato file non supportato".

La documentazione Apple, afferma che i servizi di Streaming file audio supportano molti formati e sono elencati in questo collegamento: Apple Stream Services supported formats, ma per me funziona solo con MP3.

stavo cercando troppo, quando è aperto il flusso di file audio passare un suggerimento su formato di file come questo e inviare un M4A o AAC File:

OSStatus err = AudioFileStreamOpen((__bridge void *)self, TDAudioFileStreamPropertyListener, TDAudioFileStreamPacketsListener, kAudioFileAAC_ADTSType, &_audioFileStreamID); 

Dove kAudioFileAAC_ADTSType è il tipo di file inviato che sarà in streaming , in questo modo, il "errore di formato di file non supportato" scompare, ma l'applicazione si blocca e ottenere un nuovo errore enter image description here

questo dice: io: LPC e cliente: aac.

  • Qualcuno sa cosa significa?
  • La coda si aspetta file in formato AAC?
  • Perché LPCM (Linear Pulse Code Modulation), sto inviando M4A o AAC non LPCM?

Grazie in anticipo.

+0

Ciao sto affrontando con lo stesso problema. Hai trovato qualche soluzione per questo problema. –

+1

Non ancora, solo io trovo molto dolore. Sry. –

+0

Probabilmente lo hai già provato, ma sai che esistono tipi di audio protetti. Quello che intendevo dire è provare diversi tipi di .m4a. Alcuni sono protetti e non possono essere riprodotti. Molti di loro provengono dal negozio itunes e non possono essere riprodotti. – user3892683

risposta

2

In ordine stream/parse M4A con AudioFileStream, il file m4a deve essere ottimizzato per lo streaming.

Ciò significa che l'intestazione deve essere nella parte anteriore del file e contiene le informazioni corrette che consentiranno al parser di eseguire il proprio lavoro.

Alcuni encoder ottimizzano l'm4a per te, ma alcuni codificatori non lo fanno. Ad esempio, se si crea un file m4a con itunes player, semplicemente facendo clic con il pulsante destro del mouse e scegliendo "Crea versione AAC", verrà creato un file m4a ottimizzato per lo streaming.

Si può controllare usando http://ridiculousfish.com/hexfiend/

enter image description here

ma se si utilizza diciamo encoding.com per codificare i file m4a, si otterrà un diverso tipo di codifica.

entrambi funzioneranno durante la riproduzione dell'intero file dal disco ma la versione ottimizzata verrà analizzata/trasmessa correttamente.

Ora l'errore hai trovato ti dice che parser riusciti a trovare il giusto AudioStreamBasicDescription dal file che si sta l'analisi, il file probabilmente si rifiutano di dare informazioni bitrate ...

Provate a dare un'occhiata a questo codice per migliore comprensione della gestione dei tipi di m4a http://www.cocoawithlove.com/2010/03/streaming-mp3aac-audio-again.html

Problemi correlati