2010-11-17 16 views
13

SDK di livello 8 (Froyo) ha introdotto la funzionalità nativa per MediaPlayer per connettersi a una fonte di streaming, come Shoutcast. Le versioni precedenti dell'SDK erano in grado di eseguire soluzioni alternative, come l'esecuzione di un proxy locale sul dispositivo (vedere NPR).Streaming con Android MediaPlayer in SDK 8

Ho seguito lo stesso approccio di NPR e sto utilizzando un StreamProxy. Tuttavia, NPR verifica innanzitutto se l'SDK attualmente in esecuzione è inferiore a 8. In tal caso, utilizza il proxy. Altrimenti, si connette direttamente.

My StreamProxy richiede i metadati dal server Shoutcast, quindi non instrada semplicemente i dati da Shoutcast al mio client. Invece, analizza i metadati e li usa di conseguenza, e instrada solo i dati musicali.

Quando si tenta di utilizzare StreamProxy al livello SDK 8 o successivo, MediaPlayer non riesce a prepararsi. My StreamProxy riceve la connessione e la accetta, ma dopo aver scritto con successo la riga di stato e le intestazioni sul client, la scrittura successiva produce java.net.SocketException: Connection reset by peer. Ciò si traduce in mediaplayer del cliente lanciando un Error(1,-1007).

Sto cercando di capire perché MediaPlayer non è in grado di connettersi al mio proxy locale. Dovrebbe essere lo stesso della connessione alla fonte originale senza i metadati, che funziona con . Sto inoltrando tutte le intestazioni dalla fonte esterna, tramite il mio proxy, che include il tipo di contenuto.

Continuerò a esaminarlo, ma mi sento come se fossi in un vicolo cieco. Fammi sapere se sono necessari ulteriori dettagli.

+0

Come si gioca a SHOUTcast? Http: //stackoverflow.com/a/8833346/265167 –

risposta

12

EDIT: Ok ora credo di avere la risposta!

Stagefright è rigido quando si tratta di terminazioni di riga nell'intestazione HTTP; Devono essere CR, LF e non solo LF che ha funzionato in precedenza.

Quindi, se si costruisce il proprio intestazioni, sostituire qualsiasi "\ n" con "\ r \ n" e si dovrebbe andare bene.

(Se si desidera controllare questo per te, guarda receive_line() in media/libstagefright/HTTPStream.cpp)

Ora posso streaming SHOUTcast con metadati sul 2,2/telefoni Stagefright .. .

...

sono stato in esecuzione nello stesso problema;

Per prima cosa ho provato a scrivere i dati in streaming su un file di lunghezza fissa e il wrapping - e a riprodurlo con setLooping (true). Questo causa problemi tecnici durante il loop MP3, anche se estraggo intere cornici MP3 e provo a riempire i byte non uniformi alla fine con 0xff e 0x00. Questa potrebbe essere una soluzione accettabile se hai un file abbastanza grande.

Quindi ho eseguito il proxy che funziona sul mio Samsung Galaxy S (v2.2) ma non nell'emulatore e apparentemente non sul desiderio (Non funziona = Errore-1007 come menzionato sopra). Un suggerimento potrebbe essere che il Mediaplayer di Galaxy S richiede HTTP1.0, mentre è 1.1 nell'emulatore.

Il metodo forza bruta potrebbe essere quella di aprire 2 flussi in parallelo, la lettura di meta-dati da uno e lo streaming dall'altro;)

Comunque, anche io voglio sentire se qualcun altro ha avuto più fortuna. ..

+0

Il -1007 avviene con Stagefright e non con Opencore. Sembra Galaxy S v2.2 utilizza ancora OpenCore. – Sasq

1

Lo streaming è disponibile dal livello API 1. Ho fatto un video player RTSP demo circa un anno e mezzo fa. Nagare Il client shoutcast ha già due anni.

Mi manca qualcosa qui?

+0

Il collegamento diretto a una fonte di Shoutcast non ha mai funzionato prima del 2.2. L'SDK 8 ha introdotto StageFright (http://developer.android.com/sdk/android-2.2-highlights.html#PlatformTechnologies), un nuovo framework per i media player. Vedrò come l'hanno implementato in Nagare, e sarei interessato a vedere se fa la stessa cosa per 2.2 e 2.2. – Dharwin

+0

Thx per spiegazione. –

+0

Nessun problema! Non capisco perfettamente le capacità di cambiamento da solo. Tuttavia, mi ha fatto chiedermi se posso in qualche modo impostare il mio mediaplayer per utilizzare il vecchio framework. Guardando in questo ora. – Dharwin

Problemi correlati