2013-10-02 3 views
6

W jaki sposób niestandardowy odbiornik może korzystać z przestrzeni nazw "rampy" lub w jaki sposób mogę zmodyfikować przykładowe aplikacje, aby używały niestandardowego obszaru nazw bez ponownego pisania pomocy technicznej (MediaProtocolMessageStream w systemie Android lub GCKMediaProtocolMessageStream w systemie iOS) dla protokołu RAMP?W jaki sposób niestandardowy odbiornik może używać przestrzeni nazw "rampy" lub czy mogę zmodyfikować przykładowe aplikacje, aby używać niestandardowej przestrzeni nazw bez ponownego zapisywania obsługi RAMP?

Nie udało mi się komunikować aplikacji przykładowych Chromecasta na Androida lub iOS z niestandardowym odbiornikiem opartym na dash.js (implementacja klienta referencyjnego do odtwarzania MPEG DASH przez Javascript - https://github.com/Dash-Industry-Forum/dash.js). Wygląda na to, że przestrzeń nazw "rampy" jest zakodowana na stałe (wersja ostateczna) w pakietach Chromecast Androida i iOS, a odbiornik dash.js nie może korzystać z przestrzeni nazw "rampy" z jakiegoś powodu (na http://www.digitalprimates.net/author/tapper/2013/08/27/chromecast_dash/)

Jestem w stanie odrzucić MPEG-DASH dobrze od nadawcy JavaScript w przeglądarce Chrome, gdy domyślnie korzysta z przestrzeni nazw dash.js. Podczas próby interakcji z niestandardowym odbiornikiem przez Androida lub iOS urządzenie Chromecast ładuje stronę odbiornika dobrze, ale nigdy nie otrzymuje polecenia ładowania zawierającego adres URL multimediów. Dzieje się tak nawet wtedy, gdy niestandardowy odbiornik jest ustawiony na użycie przestrzeni nazw "rampy" (domyślnej dla odtwarzania multimediów). Ponadto mój niestandardowy odbiornik przestaje działać w przeglądarce Chrome, gdy przestrzeń nazw jest ustawiona na "rampę".

+0

Możesz chcieć zmodyfikować kod MPEG-Dash, aby nie używać przestrzeni nazw "rampy". –

Odpowiedz

4

To niefortunne, że odbiornik Dash.js nie pozwoli ci użyć przestrzeni nazw RAMP, ale ich obecna implementacja nie jest w pełni poprawna RAMP (Musisz zmienić kilka rzeczy na końcu odbiornika) . Dokumentacja RAMP jest dość skąpa i raczej frustrujące jest to, że Google nie wydało źródła swoich bibliotek Chromecasta dla systemów iOS i Android. Jednak dekompilowałem bibliotekę Androida przy użyciu Java Decompiler (http://jd.benow.ca/), aby poznać niektóre szczegóły. Możesz też wyświetlić na urządzeniu Chromecast białą listę w przeglądarce i oglądać gniazda internetowe, aby sprawdzić, jakie rodzaje wiadomości RAMP wysyła i odbiera.

Jednak wszystko, co chcesz zmodyfikować w MediaProtocolMessageStream, jest ostateczne, co oznacza, że ​​idealna implementacja RAMP dla twojego nadawcy jest poza zasięgiem twojej ręki. Możesz napisać własny MessageStream przy użyciu dekompilowanego kodu jako wskazówki, ale zdecydowałem się użyć hackowania przez odbicie, aby wymusić zmianę przestrzeni nazw w 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

Dziękuję bardzo! Właśnie uratowałeś mi godziny pracy ... Nie mogę uwierzyć, że Google zakasowałoby przestrzeń nazw – Darussian

Powiązane problemy