2013-10-02 6 views
6

Come può un ricevitore personalizzato utilizzare lo spazio dei nomi "rampa" o come posso modificare le applicazioni di esempio per utilizzare un dominio personalizzato senza ri-scrittura di supporto (MediaProtocolMessageStream in Android o GCKMediaProtocolMessageStream in iOS) per il protocollo RAMP?Come può un ricevitore personalizzato utilizzare lo spazio dei nomi "rampa" o posso modificare le applicazioni di esempio per utilizzare un dominio personalizzato senza ri-scrittura il supporto per RAMP?

Non sono riuscito a comunicare le app di esempio Android o iOS Chromecast con un ricevitore personalizzato basato su dash.js (l'implementazione client di riferimento per la riproduzione di MPEG DASH tramite Javascript - https://github.com/Dash-Industry-Forum/dash.js). Sembra che lo spazio dei nomi di "rampa" sia hardcoded (const finale) sugli SDK Chromecast Android/iOS e il ricevitore dash.js non sia in grado di utilizzare lo spazio dei nomi di "rampa" per qualche motivo (per http://www.digitalprimates.net/author/tapper/2013/08/27/chromecast_dash/)

io sono in grado di lanciare MPEG-DASH bene da un mittente Javascript in Chrome quando si usano i namespace dash.js utilizza per impostazione predefinita. Quando si tenta di interagire con il mio ricevitore personalizzato tramite Android o iOS, il dispositivo Chromecast carica la pagina ricevente bene, ma non riceve il comando di carico contenente l'URL dei media. Ciò accade anche quando il ricevitore personalizzato è impostato per utilizzare uno spazio dei nomi di "ramp" (l'impostazione predefinita per la riproduzione multimediale). Inoltre, il mio ricevitore personalizzato smette di funzionare in Chrome quando lo spazio dei nomi è impostato su "rampa".

+0

Si potrebbe desiderare di modificare il codice MPEG-Dash per non utilizzare lo spazio dei nomi 'rampa'. –

risposta

4

È spiacevole che il ricevitore Dash.js non ti consenta di utilizzare lo spazio dei nomi RAMP, ma la loro implementazione corrente non è comunque RAMP abbastanza corretta (Dovrai cambiare alcune cose sul ricevitore) . La documentazione su RAMP è piuttosto scarsa ed è piuttosto frustrante che Google non abbia rilasciato la fonte per le loro librerie Chromecast per iOS e Android. Tuttavia, ho decompilato la libreria Android utilizzando Java Decompiler (http://jd.benow.ca/) per imparare alcuni dettagli. Puoi anche far comparire il tuo dispositivo Chromecast nella whitelist nel browser e guardare i Web Socket per vedere quali tipi di messaggi RAMP invii e ricevi.

Tuttavia, tutto ciò che si desidera modificare in MediaProtocolMessageStream è definitiva che significa un'implementazione RAMPA perfetta per il vostro mittente è appena fuori dalla portata. Si potrebbe scrivere il proprio MessageStream utilizzando il codice decompilato come guida, ma ho scelto di usare l'hacking riflessione per forzare modificare lo spazio dei nomi in MediaProtocolMessageStream.

public class CustomMediaProtocolMessageStream extends MediaProtocolMessageStream { 

    private static final String NAMESPACE = "org.dashif.dashjs"; 

    public CustomMediaProtocolMessageStream() { 
     super(); 
     // Hack Google's hardcoded namespace which doesn't work with the DASH receiver. 
     try { 
      // This is the field where MessageStream stores the namespace. If you decompile the jar you can see it's named 'b'. 
      Field field = MessageStream.class.getDeclaredField("b"); 
      field.setAccessible(true); 
      field.set(this, NAMESPACE); 
     } catch (Exception e) { 
      Log.e(TAG, "problem changing namespace:" + e.getMessage()); 
     } 
    } 
} 
+0

Grazie mille! Mi hai appena risparmiato ore di lavoro ... non posso credere che Google avrebbe hardcode lo spazio dei nomi – Darussian

Problemi correlati