2013-03-05 4 views
13

Di recente ho riscontrato alcuni problemi di streaming streaming AAC + con Android MediaPlayer. Regarding to the documentation, ci dovrebbe essere il supporto per lo streaming AAC + in Android 4.1. (Dispositivo di prova è un Nexus 2 con Android 4.2.2)Android: lo streaming radio AAC + non funziona con MediaPlayer (collegamenti Android 4.2.2/Shoucast)

ho trovato alcune domande correlate (controllare here, here o here), ma essi sono principalmente correlati alle versioni più vecchie di Android o datato prima del rilascio della 4.1. Ho trovato il AACPlayerAndroid libary, ma non è necessario acquistare una licenza ..

se provo lo streaming di un flusso di aacPlus, il MediaPlayer getta MediaPlayerError (1,-2147483648), che viene definita come "formato di carta non supportata". Tuttavia, se avvio lo stesso streaming AAC + in emulatore, funziona correttamente!

quello che ho provato finora:

  • cercando stesso codice in opere emulatore?!? (Whyever .. magari codec supportato alla macchina locale?)

  • testare altri due dispositivi con 4.1 o 4.2 non riesce così

  • set AAC + ruscello con intestazione manuale e con setDataSource(String path), che non funziona (cambia intestazione http fallisce anche)

  • istituito un nuovo progetto SimpleMediaPlayer -> fallisce troppo

  • cercando di controllare il traffico di rete, se il dispositivo Android viene reindirizzato a un URL sbagliato. In realtà ho ottenuto il dispositivo collegato a Charles utilizzando un Proxy, ma era solo in grado di monitorare il browser Android. Comunque penso che il reindirizzamento sia corretto!

Qui è la mia realizzazione del setDataSource del mio Streaming.class

public AmplifyMediaPlayer(PlayerStationObject playerStationObject, Context context) { 
    super(); 
    this.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    this.mCurrentStationObject = playerStationObject; 
    try { 
     //AAC+ TestStream #1: NOT WORKING 
     //Uri uri = Uri.parse("http://up-gc2.webnow.com.br/alpha.aac"); 

     //AAC+ TestStream #2: NOT WORKING 
     //Audio codec: 64 kbit/s 44.1 kHz AAC+, 128 kbit/s 44.1 kHz MP3 
     //Uri uri = Uri.parse("http://relay.publicdomainproject.org:80/jazz_swing.aac "); 

     //Setting HTTP header for fixing some issues with normal setDataSource Header from Android 
     //User-Agent "iTunes" was set to force re-direct to shoutcast streaming url  
     Map<String, String> headers = new HashMap<String, String>(); 
     headers.put("User-Agent", "iTunes"); 

     setDataSource(context, uri, headers); 

     //AAC Codec works fine... 
     //setDataSource("http://fri.net.pl:8000/fri"); 

     prepareAsync(); 

     //... 

Quindi, in realtà sto avendo seguenti domande:

Perché non sono in grado di svolgere un ACC + Stream Android 4.1 e versioni successive, anche se dovrebbero essere supportati?

Qualcuno ha un flusso ACC +, che riesce a trasmettere correttamente con la classe MediaPlayer di Android? (solo per verificare, se c'è qualcosa con l'integrazione del mio lettore)

Se ACC + non è supportato, conosci una buona libreria o un progetto di esempio da guardare, come hanno risolto il problema?

Grazie o eventuali suggerimenti o consigli!

Altri AAC + Streams ho provato: http://jam-aacp.rautemusik.fm

EDIT Finora, ho finito con: non è possibile. La libreria decodificatore AACP è una buona soluzione, ma non è ancora stabile. Spero che Android lo supporti presto. Se non sei d'accordo, PER FAVORE COMMENTI!

+0

aacPlus ** decodifica ** è stato in Android molto prima di 4.1. Alcuni dei codec di Android sono (o possono essere) dipendenti dall'hardware. Se il tuo codice funziona nell'emulatore ma non su un dispositivo reale, potresti aver trovato un caso in cui il tuo dispositivo supporta il codec hardware per AAC, ma probabilmente non per il tuo stream a causa di alcune caratteristiche specifiche che potrebbe avere. Suggerirei di provare su alcuni dispositivi diversi. – Brad

risposta

3

Ho avuto lo stesso problema per la mia app.

Ho giocato molto con MediaPlayer senza successo. Ho anche provato con un proxy all'interno della app che viene utilizzato per lo streaming di flussi MP3 su versioni di Android più vecchie

e ho anche testato il aacplayer-android/aacdecoder-android, ma non era molto stabile nel mio test ...

Noi finito con BASS for Android come non siamo riusciti a trovare.

Ma richiede anche un AAC Patent License * se si desidera rendere pubblica l'app (per uso privato penso che non importi ...) richiede anche un BASS License a meno che non si tratti di un'entità non commerciale.

*) contano applicazioni Android come prodotti di consumo non come Consumer PC Software ... solo per evitare l'errore che abbiamo fatto per la nostra applicazione ...

[UPDATE]
Perché le tasse sui brevetti sono richieste?
Uno deve pagare le tasse non appena il Prodotto (in questo caso l'App) porta il proprio decodificatore (o codificatore) in quanto entrambi, BASS e aacdecoder-android portano il proprio codice decodificatore, hanno bisogno di avere una licenza AAC. Solo se sarebbe possibile utilizzare il decoder disponibile sul sistema host (che è concesso in licenza/pagato dallo sviluppatore del sistema host - in questo caso Google) è "libero". Ma come seems v'è attualmente alcun modo per accesso/utilizzare il dispositivo codec ...

+0

Quindi, hai pagato la licenza di brevetto AAC alla fine? Qual è il prezzo? – Ante

+0

ci siamo trasferiti in stream OGG. I prezzi AAC sono disponibili qui: http://www.vialicensing.com/licensing/aac-fees.aspx Per i primi da 1 a 500.000 unità costano $ 0,98 per unità e per unità da 500,001 a 1.000.000 il prezzo è $ 0,78. Questo prezzo è ANNUALE. Quindi devi pagare questo ogni anno. – Dodge

0

Se è possibile collegare il Nexus 2 con USB ed eseguire adb shell e ottenere un terminale, è possibile utilizzare stagefright per verificare i codec ei profili disponibili supportati.

Ad esempio stagefright -l e stagefright -p sarebbero i due comandi utili.

+0

Digito "adb shell" in Terminal e poi "stagefright -l" ma ottengo "stagefright: not found". Come dovrei procedere? –

0

Ho anche guardato in questo, e ho scoperto che è necessario pagare costi di licenza, se si includere il proprio decoder:

Vialicensing (AAC) replied:

“Se sarà sfruttando il supporto AAC nativo di Android in modo che le applicazioni non includono un encoder AAC o decoder, allora non si avrebbe un bisogno/obbligo per un licenza - i tuoi prodotti non lo farebbero violano “.

Ciò significa che l'unico modo si potrebbe giocare AAC senza diritti d'autore è se il giocatore nativo Android supporta AAC con il suo decoder incorporato. A giudicare dalle cose, non c'è supporto per questo su 4. Ho provato ad alimentare il player con un flusso AAC e si limita a bufferizzare per sempre.