Jump to content

FreePlayer


areq

Recommended Posts

Na początek szcun dla autora - kawał kodu.

 

Odnoszę się do najnowszej wersji dostępnej w test czyli FreePlayer v1.63

Jest bug w obsłudze wczytywania napisów srt - nie jest sprawdzane kodowanie pliku i w przypadku gdy jest już utf - kupa  - napisy się nie wczytują bo na sztywno jest konwersja z 'windows-1250'

Brzydko wczytywanie napisów z BOM można naprawić tak:

@@ -521,11 +522,13 @@
                        if not self.opensubtitle == "":
                                o = open(self.opensubtitle,'r')
                                # pomijamy BOM jezeli jest
+                               utf8 = 0
                                while True:
                                        d = o.read(1)
                                        if d == "1":
                                                o.seek(-1,1)
                                                break
+                                       utf8 = 1
                                while True:
                                        #print ">"
                                        nr = o.readline()
@@ -572,7 +575,7 @@
                                                                if len(n) == 0:break
                                        else:
                                                l = l1
-                                       l = l.decode('windows-1250').encode('utf-8')
+                                       if not utf8: l = l.decode('windows-1250').encode('utf-8')
                                        l = self.usun(l)
                                        l = self.usun(l)
                                        tim1=tim[0:12]

 

porządnie należało by to zrobić inaczej - dokładnie sprawdzić kodowanie pliku i w razie potrzeby skonwertować do utf.

Jeśli będzie zainteresowanie - mogę to skrobnąć.

 

Druga sprawa do optymalizacji - detekcja fps. Można to bardzo uprościć, wczytująć napisy dopiero po odpaleniu filmy - fps wtedy możemy zczytać z  iServiceInformation.sFrameRate ( jest kod przykładowy w moim dmnapi)

 

Trzeci temat to borderWidth, jest w skinie to użyte do obwódki napisów, fajne, ale nie wszystkie enigmy to wspierają ;( np VTI 7.0 na vu+ nie ma. Można by sprawdzić czy jest to dostępne np. tak

 

@@ -87,11 +87,12 @@
                print "OpenSubtitle : ",self.opensubtitle
                self.skin = """
                                <screen name="FreePlayer" position="0,0" size="1280,720" flags="wfNoBorder" backgroundColor="transparent">
-                                       <widget name="i1" position="0,540" size="1280,300" valign="bottom" halign="center" font="%s;%d" backgroundColor="transparent" borderWidth="%d"/>
-                                       <widget name="info2" position="1020,15" size="280,50" valign="left" halign="center" font="Regular;40" backgroundColor="transparent" borderWidth="2"/>
-                               </screen>""" % (self.fonttype_list[self.fonttype_nr],self.fontsize,self.borderWidth)
+                                       <widget name="i1" position="0,540" size="1280,300" valign="bottom" halign="center" font="%s;%d" backgroundColor="transparent"/>
+                                       <widget name="info2" position="1020,15" size="280,50" valign="left" halign="center" font="Regular;40" backgroundColor="transparent"/>
+                               </screen>""" % (self.fonttype_list[self.fonttype_nr],self.fontsize)
                Screen.__init__(self, session)
                self["i1"] = Label()
+               self.__eLabelHasBorderParams = hasattr(self["i1"].instance, 'setBorderWidth') and hasattr(self["i1"].instance, 'setBorderColor')
                self["info2"] = Label()
                self["actions"] = ActionMap(["FreePlayerActions"],
                        {
@@ -787,7 +790,8 @@
                        self.borderWidth = 0
                print "borderWidth = ",self.borderWidth
                self["i1"].setText("borderWidth:"+str(self.borderWidth))
-               self["i1"].instance.setBorderWidth(self.borderWidth)
+               if self.__eLabelHasBorderParams:
+                   self["i1"].instance.setBorderWidth(self.borderWidth)
                self.tout.start(2000)

        def color(self):

 

Jeśli autor tu zagląda i przyjmie do mainsteam powyższe propozycje - mogę je dopracować i dać gotowe patche

 

 

Link to comment
Share on other sites

Freeplayer jest robiony przez freebox'a a on wydaje softy tylko pod SH4 (nboxy, sagemcomy) także nie ma sensu zmieniać części odpowiedzialnej za obwódki napisów.

 

Odnośnie kodowania napisów to również bez sensu. Instalując freeplayer'a z OPKG jest stworzona zależność, że ściąga on również dmnapi (bo jest to powiązane ze sobą) więc idąc dalej tym tokiem myślenia można z niego korzystać :) Masz napisy w innym formacie to przepuszczasz je przez dmnapi i już działają pod freeplayerem.

 

Dla mnie ten odtwarzacz jest najlepszy (głównie ze względu na możliwość wyboru biblioteki). Można fajnie ustawić napisy i wyświetlają się na całym ekranie a nie tak jak na wbudowanym odtwarzaczu mają określoną szerokość i nie można tego "z pilota" zmienić. Na ten moment dla mnie nie ma tam co poprawiać.

Link to comment
Share on other sites

Co do napisow fakt jest problem, nie odtwarza napisow ktore byly zassane z poziomu freeplayera, wczesniej dzialaly w sumie tylko takowe bo zassana np na pc nie mialy pl znakow, teraz takie zassane z poziomu kompa dzialaja ok, sa pl znaki a te z pozuomu freeplayera w ogole sie nie laduja :)

 

Zabronione jest publikowanie wpisów naruszających zasady pisowni języka polskiego, niedbałych i niezrozumiałych. Proszę poprawić.

 

 

wysłane z telefonu z tapatalka, nie wiem dlaczego nie dołączyła się sygnatura, SKOŃCZ SIĘ CZEPIAĆ !!

1. Proszę nie krzyczeć.

2. Z poziomu taptalka nie da się polskich liter wpisywać? A nawet jeżeli się nie da, to na pewno można używać kropek, dużych liter i przejrzeć post przed wysłaniem, czy nie ma literówek.

EDIT tux:

[*]Zasady obowiązują wszystkich, nawet mnie. Każdy kto czyta forum nie raz widział moje posty poprawiane przez kogoś.

Jeżeli nie ma możliwości użyć polskich znaków należy to zaznaczyć ikoną urządzenia mobilnego (w przypadku telefonyu jest to automatyczne) lib napisać na koniec posta, że pisaliśmy z urządzenia mobilnego;

[*]Punkt pierwszy nie zwalnia od stosowania zasad  interpunkcji i ortografii. Owszem, nie zawsze się da ale nikt nie będzie zły na sytuację raz na jakiś czas. gorzej jak to jest przeważnie;

[*]To, że ktoś kupuje sprzęt mobilny (np. tablet) i nie ma nim polskich znaków świadczy tylko o tym, iż urządzenie nie jest przewidziane na polski rynek;

[*]Zasady forum ułożone były już dość dawno temu i tylko dzięki temu, że one są i ktoś dba o to by były przestrzegane na forum jest porządek.

[*]Administratorzy, moderatorzy, devele, itp. grupy tez podlegają tym zasadom i są równi wobec regulaminu!

Link to comment
Share on other sites

Co do poprawki wczytywania napisów ... w części odpowiedzialnej za wczytywanie SRT trochę grzebałem i to wymuszenie zmiany kodowania to moja robota :( Jeżeli robić sprawdzanie czy jest BOM, to może lepiej tą samą metodą co przy wczytywaniu TXT, czyli faktycznie sprawdzać czy jest BOM, a nie czy cokolwiek jest przed "1". A co z plikami bez BOM? Faktycznie sprawdzanie kodowanie by się przydało...

 



 

Poprawka FreePlayera w opkg. Poprawione wczytywanie napisów SRT - jak jest BOM to czyta jako UTF8 a jak nie ma to robi konwersję z CP1250 na UTF8.

Link to comment
Share on other sites

@Shouces znam takich co używają na VU+ i działa dobrze po korekcie skina o której pisałem, skoro można zrobić coś co jest uniwersalne to dlaczego z tego rezygnować ? Co do bezsensu kodowania to najpierw radzę sprawdzić jak coś działa a raczej nie działa, a później można krytykować, bo inaczej to później głupio się może zrobić...

DMnapi zawsze ściąga i konwertuje do utf-8-sig i wczorajszy FreePlayer sobie z tym nie radzi.

 

@mickey do rozpoznawanie kodowania napisów ulepiłem kiedyś w dmnapi taką sztuczną inteligencje ;)

 

def convert_to_unicode( sub ):
    if sub.startswith('\xef\xbb\xbf'):
        return sub.decode("utf-8-sig",'ignore'), "utf-8-sig"
    iso = 0
    for i in (161, 166, 172, 177, 182, 188):
        iso += sub.count(chr(i))
    win = 0
    for i in (140, 143, 156, 159, 165, 185):
        win += sub.count(chr(i))
    utf = 0
    for i in (195, 196, 197):
        utf += sub.count(chr(i))
    if win > utf and win > iso:
        return sub.decode("CP1250",'ignore'), "CP1250"
    if utf > iso and utf > win:
        return sub.decode("utf-8",'ignore'), "utf-8"
    return sub.decode("iso-8859-2",'ignore'), "iso-8859-2"

 

myślę, że można reużyć ;)

 

Moim zdaniem cały kod parsujący napisy jest do wyczyszczenia ja wzorowałem się na:

http://git.pld-linux.org/gitweb.cgi?p=packages/subconv.git;a=blob_plain;f=subconv.py;h=8cfd8e51dc83d66ea16752a35bc728fecedf6dd3;hb=HEAD

 

 

 

 

Link to comment
Share on other sites

@Shouces znam takich co używają na VU+ i działa dobrze po korekcie skina o której pisałem, skoro można zrobić coś co jest uniwersalne to dlaczego z tego rezygnować ? Co do bezsensu kodowania to najpierw radzę sprawdzić jak coś działa a raczej nie działa, a później można krytykować, bo inaczej to później głupio się może zrobić...

DMnapi zawsze ściąga i konwertuje do utf-8-sig i wczorajszy FreePlayer sobie z tym nie radzi.

Jesteśmy na forum dekoderów SH4, autor wtyczki tworzy pod SH4 więc nie ma sensu robić z tego ogółu. W działach VU+ czy dreambox'a można sobie modyfikować do woli ale tutaj to nie ma najmniejszego sensu bo to tylko dodatkowa robota.

 

Po aktualizacji wtyczki do wersji z wyborem bibliotek dość mocno go testowałem i nie pamiętam żebym miał jakiekolwiek problemy z napisami (a obejrzałem kilka materiałów z nimi) ale od tego jest forum żeby zgłaszać problemy więc dobrze, że zostało to już poprawione chociaż jak już pisałem ja takiego problemu nie zauważyłem.

Link to comment
Share on other sites

Python jest wieloplatformowy, openpli jest wieloplatformowe, wtyczka też powinna być wieloplatformowa. To że na razie nie widać problemu na sh4 nie oznacza, że go nie ma i że go nie zauważysz w przyszłości. Jak wiadomo, gdzie jest potencjalny problem to należy go poprawić i tyle.

Link to comment
Share on other sites

@shouces

Z całym szacunkiem :)

Gdybyśmy podchodzili do softu z kategoryzowaniem na platformy itd. to raczej każdy z nas byłby daleko w lesie.

Tylko dzięki temu, że każdy publikuje coś i poprawia jak może oraz republikuje poprawki całość idzie tak do przodu. jeżeli jest coś multiplatformowe (jak python) to dlaczego mamy to sztucznie ograniczać. @areq może mić @VU+ ale może też np. u znajomych mieć nboxy.

Także - nie popadajmy w skrajności. Poprawki @areq są jak najbardziej na miejscu.

Link to comment
Share on other sites

Wy zajmujecie się poprawianiem od strony technicznej także to do was należy decyzja czy jest to potrzebne czy nie :) Ja wyraziłem moje zdanie odnośnie tego.

Graterlia jest póki co tylko na SH4 więc uważam, że ewentualne poprawki należy zgłaszać u źródła (freebox) bo wy tutaj możecie poprawiać pod inne architektury a freebox wyda następną wersję i znowu będzie trzeba poprawiać od nowa :)

 

Ja nie uważam, że poprawianie jest zbędne tylko wg. mnie powinno się to robić u źródła chyba, że nie zamierzacie w przyszłości bazować na nowszych wersjach tego pluginu tylko będziecie bazować na obecnej i wprowadzać wyłącznie swoje poprawki.

Link to comment
Share on other sites

Poniżej moja propozycja kodu rozpoznawania i konwersji do utf8 oraz nowa implementacja parsowania srt

 

def convert_to_utf8( sub ):
    if sub.startswith('\xef\xbb\xbf'):
        codec = "utf-8-sig"
    else:
        licz = 0
        for uniq, scodec in [((161, 166, 172, 177, 182), "iso-8859-2"),((140, 143, 156, 159, 165, 185),"CP1250"),((195, 196, 197),"utf-8")]:
            ile = sum([sub.count(chr(i)) for i in uniq])
            if ile > licz:
                licz = ile
                codec = scodec
    return sub.decode(codec, 'ignore').encode('utf-8')

def loadsrt(opensubtitle):
        subtitle = []
        try:
                subs = convert_to_utf8(open(opensubtitle).read().replace('\r',''))
                for sub in subs.split('\n\n'):
                        nr, t, s = sub.split('\n', 2)
                        t1 = ((((int(t[0:2]) * 3600) + (int(t[3:5]) * 60) + int(t[6:8]))*1000)+int(t[9:12]))*90
                        t2 = ((((int(t[17:19]) * 3600) + (int(t[20:22]) * 60) + int(t[23:25]))*1000)+int(t[26:29]))*90
                        subtitle.append([int(nr),t1,t2,s])
        except:
                pass
        return subtitle

Link to comment
Share on other sites

Do gałęzi test niedługo trafi pewnie nowa wersja.

 

Wykorzystałem w niej funkcję do konwersji na utf-8, ale tylko do rozpoznawania sposobu kodowania znaków. Funkcji wczytywania napisów nie ruszałem wcale. Obecna działa a ja nie czuję się na siłach, żeby w niej grzebać.

 

Trzeci temat to borderWidth, jest w skinie to użyte do obwódki napisów, fajne, ale nie wszystkie enigmy to wspierają ;( np VTI 7.0 na vu+ nie ma. Można by sprawdzić czy jest to dostępne np. tak

 

Sposób myślenia słuszny. Kod wygląda ładnie i się kompiluje. Ale self.__eLabelHasBorderParams na moim ESI jest zawsze False a na pewno działają na nim ramki dookoła napisów. Czyli w praktyce po zmianach w kodzie ramki nie ma :(

 

Ja nie uważam, że poprawianie jest zbędne tylko wg. mnie powinno się to robić u źródła chyba, że nie zamierzacie w przyszłości bazować na nowszych wersjach tego pluginu tylko będziecie bazować na obecnej i wprowadzać wyłącznie swoje poprawki.

 

Wprowadzenie poprawek do kodu aż tak trudne nie jest. Możliwości są dwie: 1) Jak będzie nowa wersja Freeboxa, to znowu nałożymy na nią nasze poprawki. 2) Może Freebox uzna, że te poprawki są coś warte i wprowadzi je do siebie.

 

A tak swoją drogą, wersja 1.63, która trafiła do GOS od początku była wersją zmodyfikowaną. Wyrzucono na zewnątrz czcionki - teraz FP korzysta z tego co zainstalowano w systemie. Zmieniono mapę klawiszy. A teraz wprowadzono kilka innych poprawek.

Link to comment
Share on other sites

 

@mickey soory za zmarnowany czas na borderWidth - nie przetestowałem tego dokładanie na GOS ;(

Idea jednak była słuszna tylko wykonanie byle jakie, za wcześnie to sprawdzałem - obiekt jeszcze nie był utworzony do końca

Po przeniesieniu testu do __LayoutFinish wydaje się zachowywać poprawnie - na uhd88 z GOS test obwódka jest

 

--- FreePlayer.py.org
+++ FreePlayer.py
@@ -87,9 +87,9 @@
                print "OpenSubtitle : ",self.opensubtitle
                self.skin = """
                                <screen name="FreePlayer" position="0,0" size="1280,720" flags="wfNoBorder" backgroundColor="transparent">
-                                       <widget name="i1" position="0,540" size="1280,300" valign="bottom" halign="center" font="%s;%d" backgroundColor="transparent" borderWidth="%d"/>
-                                       <widget name="info2" position="1020,15" size="280,50" valign="left" halign="center" font="Regular;40" backgroundColor="transparent" borderWidth="2"/>
-                               </screen>""" % (self.fonttype_list[self.fonttype_nr],self.fontsize,self.borderWidth)
+                                       <widget name="i1" position="0,540" size="1280,300" valign="bottom" halign="center" font="%s;%d" backgroundColor="transparent"/>
+                                       <widget name="info2" position="1020,15" size="280,50" valign="left" halign="center" font="Regular;40" backgroundColor="transparent"/>
+                               </screen>""" % (self.fonttype_list[self.fonttype_nr],self.fontsize)
                Screen.__init__(self, session)
                self["i1"] = Label()
                self["info2"] = Label()
@@ -149,6 +149,10 @@

        def __LayoutFinish(self):
                self.onShown.remove(self.__LayoutFinish)
+               self.__eLabelHasBorderParams = hasattr(self["i1"].instance, 'setBorderWidth') and hasattr(self["i1"].instance, 'setBorderColor')
+               if self.__eLabelHasBorderParams:
+                   self["i1"].instance.setBorderWidth(self.borderWidth)
+                   self["info2"].instance.setBorderWidth(2)
                self.loadsubtitle()

        def go(self):
@@ -787,7 +791,8 @@
                        self.borderWidth = 0
                print "borderWidth = ",self.borderWidth
                self["i1"].setText("borderWidth:"+str(self.borderWidth))
-               self["i1"].instance.setBorderWidth(self.borderWidth)
+               if self.__eLabelHasBorderParams:
+                   self["i1"].instance.setBorderWidth(self.borderWidth)
                self.tout.start(2000)

        def color(self):

Link to comment
Share on other sites

Panowie, a jest możliwość dodania obslugi kolorów czcionki i/lub pogrubienia/pochylenia itp ? Czasem w napisach jest cos kolorem a widzimy tylko kod koloru :)

 

Wysłane z mojego LG-D802

 

 

Link to comment
Share on other sites

Łatwo nie, jednym labelem to jest wyświetlane który może mieć  w danej chwili tylko jeden format - czyli wszystkie 3 linijki wyglądają tak samo. Można rozbić na 3 labele i formatować każda linijke osobno. Dużo zabawy.

Przydało by sie usuwanie tych tagów by nie były wyświetlane chociaż i nie śmieciły na ekranie.

 

 

a.

Link to comment
Share on other sites

(...)

Przydało by sie usuwanie tych tagów by nie były wyświetlane chociaż i nie śmieciły na ekranie.

 

 

a.(...)

w sumie racja, lepiej usunąć niż ma to być wyświetlane, w zasadzie nie ma tego dużo w tekście zazwyczaj :-) ale dobrze jakby było czyściutko :D

Link to comment
Share on other sites

  • 5 months later...

Proponuję zaktualizować cały system do najnowszej wersji. Wcześniej dokładnie przeczytać listę zmian na WWW (nawet tą z archiwum) bo było kilka zmian gdzie ważna jest interwencja ręczna.

Możesz też wgrać nowszą wersję z WWW i zaktualizować do najnowszej.

 

Paczki z OPKG są przygotowywane do obecnej wersji GOS.

Link to comment
Share on other sites

  • 7 months later...
Guest artur_n

Widzę, że plugin trafił do obsolete. Proszę o rade z jakiego playera korzystać zamiast tego.

Fajnie by było jak by współpracował z dmnapi.

Link to comment
Share on other sites

  • 1 year later...
Guest prwerti

Witam. Posiadam tuner ADB2850ST z GOS na pokładzie i niewiem jak odtworzyć filmy z pena. W OpenPLi 8.6 wystarczyło wpiąć pena i był już widoczny w freeplayerze, a jak to zrobić w GOS? Jaki do tego odtwarzacz lepszy i jak załadować moduły do obsługi pena? Mógłby ktoś naprowadzić krok po kroku? Z góry dziękuję i pozdrawiam.

Link to comment
Share on other sites

Do obsługi pendrajwa przyda się pewnie kernel-modules-extrafs-gos, bo zakładam, że jest on w FAT32 lub NTFS.

 

W repo nie widzę freeplayer, więc może enigma2-plugin-mediaplayer2 się nada.

 

tux[/member]: A może freeplayer mógłby wrócić do repo??

Link to comment
Share on other sites

Guest prwerti

Do obsługi pendrajwa przyda się pewnie kernel-modules-extrafs-gos, bo zakładam, że jest on w FAT32 lub NTFS.

 

W repo nie widzę freeplayer, więc może enigma2-plugin-mediaplayer2 się nada.

 

tux[/member]: A może freeplayer mógłby wrócić do repo??

 

Ok dzięki. Tylko po zainstalowaniu kernel-modules-extrafs-gos nie ładuje modułów fat32

Link to comment
Share on other sites

Guest prwerti

Przy próbie instalacji dostaję komunikat:

 

GraterliaOS:~# opkg install enigma2-plugin-freeplayer

Installing enigma2-plugin-freeplayer (1.63.9) on root.

Downloading http://addons.graterlia.xunil.pl/release/sh4/enigma2-plugin-freeplayer_1.63.9_sh4.ipk.

Collected errors:

* satisfy_dependencies_for: Cannot satisfy the following dependencies for enigma2-plugin-freeplayer:

*      gstreamer-gos-tools *

* opkg_install_cmd: Cannot install package enigma2-plugin-freeplayer.

 

 

Link to comment
Share on other sites

  • 3 years later...

Witam, czy wtyczka ma prawo zadziałać na aktualnym systemie pod mips? albo czy jest łatwiejszy sposób na odtwarzanie plików mkv inny niz przez mediaplayer? który jest dość mało intuicyjny dla starszych osób, chyba że da się wyłączyć obsługę playlist? 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...