Jump to content

RemoteChannelStreamConverter


robert_cz

Recommended Posts

Guest herpoi

To co piszesz nie jest błedem. To jest jedynie informacja, że nie ma tłumaczenia wtyczki dla języka jakiego używasz w systemie, więc używany jest taki jak we wtyczce.

Link to comment
Share on other sites

Podmień lokale z załącznika

A do jakiego folderu wrzucić?

 

Wiem, że wyjdę na lamera, ale nie bardzo rozumiem po co jest plik setup.py? Przyznam się, że działam troszkę jak małpka, raz się udało, to staram się wszędzie tak samo robić, a te pliki setup.py chyba jednak po coś są, tylko ja nie wiem co z nimi zrobić ;-(

Link to comment
Share on other sites

Podmień lokale z załącznika

A do jakiego folderu wrzucić?

 

Extensions/RemoteChannelStreamConverter/locale

 

Przeanalizuj to co było w lokalach (jakie pliki) i co jest w tym co podesłałem ...wyciągnij wnioski

Zapytałem, bo wydawało mi się przez chwilę, że powinno być w /usr/lib/locale

 

Wtyczka okazuje się, że działa, tylko pojawia się nie we wtyczkach, tylko w system -> wyszukiwanie kanałów :-)

 

Mogę prosić o dodanie do repozytorium? Powinno rozwiązać mój problem z tunerem bez głowicy.

 

Z góry dziękuję

Link to comment
Share on other sites

Napisz proszę co robi jakie jest jej zadanie?

Znalazłem małe wideo z pokazem jak działa, niestety po niemiecku:

 

A zasada działania jest prosta, dodaje do listy kanałów tunera zdalnego, bez głowicy np., listę streamów na podstawie listy kanałów innego tunera w sieci, żeby potem z tego streamu oglądać, oczywiście dobrze by było jak by zdalny tuner miał podwójną głowicę.

 

[Aktualizacja]

Powstrzymuję mój hura optymizm :-(

Listę kanałów czyta poprawnie ze zdalnego tunera, ale coś jednak jest nie tak, szukam.

 

[Aktualizacja2]

Już wiem dlaczego nie chcą działać kanały z automatycznie wygenerowanej listy przez tą wtyczkę. Nasze tunery dziwnie się zachowują jak w pierwszej pozycji za services mają 1, a tak się domyślnie robi ta lista, chcą demuxa i obsługę Video robić za pomocą głowicy, ten sam "dziwny problem występuje przy próbie odtwarzania plików .ts nagranych wcześniej z wyłączoną głowicą.

Tunery natywnie wspierane przez openPLI tego nie mają, niektórzy sugerują, że to problem sterowników.

 

Nie za bardzo znam strukturę plików listy, ale znalazłem w jednym z postów dotyczącym IPTV na liście kanałów, że zamiast jedynki na pierwszym miejscu jest 4097, poprawiłem manualnie i działa.

 

#SERVICE 4097:0:1:423b:3db8:13e:820000:0:0:0:http%3A//192.168.1.5%3A8001/1%3A0%3A1%3A423b%3A3db8%3A13e%3A820000%3A0%3A0%3A0:TELE 5

 

Wie ktoś gdzie znaleźć dokumentację struktury tych plików list? jedyne co znalazłem, to, to: http://radiovibrations.com/dreambox/services.htm

 

[Aktualizacja3]

tu znalazłem coś więcej:

http://forums.openpli.org/topic/30071-channel-id/?view=findpost&p=370031

 

przestawiając na 4097 niestety tracimy EPG :-(

A Problem z działaniem jeśli jest jedynka,  jeśli w SERVICE jest 1 to oznacza strumień DVB TS i wraca problem, że sterownik naszych sprzętów, upiera się, że do strumienia TS chce głowicę z podłączoną anteną :-(

 

Moim zdaniem są 3 wyjścia, które niestety mnie przerastają:

1) znaleźć błąd w sterowniku - rozwiązuje najwięcej,

2) zmodyfikować w kodzie OpenPLI tam gdzie jest obsługa "zapasowego zdalnego odbiornika", żeby podmieniało tą nieszczęsną jedynkę na 4097, może jakiś dodatkowy parametr? Może OpenPLI zaakceptowało by Forka, czy Merge (chyba tak to się nazywa :-)) od tego miejsca https://sourceforge.net/p/openpli/enigma2/ci/3609ff62e1051451fd990f7ef3124eeda8d28e1d/

3) modyfikacja wtyczki żeby generowała pliki z 4097 zamiast 1.

Link to comment
Share on other sites

może dlatego ze mam (y) epg z EPGImport

Może być, może w tym co pisali było, że jak nie jest jako strumień DVB TS, to nie pobiera EPG, ale jak już jest skądś pobrane, to działa.

Bo jak miałem tylko z 1 zamiast tego 40cośtam, to strasznie się zdziwiłem, że na nowo zainstalowanym tunerze bez EPGImport, bez głowicy zaczęło się pojawiać EPG na kanałach, oznacza to, że przynajmniej samo EPG wtedy działa ze strumienia ts :-).

 

A jak idą testy?

Link to comment
Share on other sites

Wszystko co mogłem sprawdzić działa:

- EPG jest - ale z EPGImport, bo po zmianie z 1 na 40cośtam tracimy EPG ze strumienia,

- zmiana wersji językowej audio też działa,

 

Straty:

- brak EPG ze strumienia DVB - da się przeżyć :-)

- brak picon kanałów.

 

Więcej nie widzę, najważniejsze, że działa, moim zdaniem możemy wrzucić do repozytorium.

 

PS. A może na oficjalnej stronie projektu warto by jakoś poinformować o Twojej poprawce i dlaczego była potrzebna, może zrobiliby na to jakiś parametr we wtyczce?

Możesz wkleić jakich zmian dokonałeś?

Wielkie dzięki.

Link to comment
Share on other sites

...

Możesz wkleić jakich zmian dokonałeś?

Wielkie dzięki.

co do zmian to tylko w pliku plugin.py

def convertBouquets(self):
	self.readIndex = 0
	while True:
		if 'lamedb' not in self.workList[self.readIndex]:
			filename = DIR_TMP + self.workList[self.readIndex]
			fp = open(DIR_ENIGMA2 + self.workList[self.readIndex], 'w')
			try:
				fp2 = open(filename)
				lines = fp2.readlines()
				fp2.close()
				was_html = False
				for line in lines:
					if was_html and '#DESCRIPTION' in line:
						was_html = False
						continue
					if '#NAME' in line:
						txt = _("remote of")
						line = "%s (%s %s) \n" % (line.rstrip('\n'), txt, self.getRemoteAdress())
					was_html = False
					if 'http' in line:
						was_html = True
						continue
					elif '#SERVICE' in line:
						line = line.strip('\r\n')
						line = line.strip('\n')
						tmp = line.split('#SERVICE')
						if '::' in tmp[1]:
							desc = tmp[1].split("::")
							if (len(desc)) == 2:
								tmp2 = tmp[1].split('::')
								service_ref = ServiceReference(tmp2[0] + ':')
								tag = tmp2[0][1:]
						else:
							tag = tmp[1][1:-1]
							service_ref = ServiceReference(tag)
						out = '#SERVICE ' + tag + ':' + quote('http://' + self.getRemoteAdress() + ':8001/' + tag) + ':' + service_ref.getServiceName() + '\n'
					else:
						out = line
					fp.write(out)
			except:
				pass
			fp.close()
		self.readIndex += 1
		if self.readIndex == len(self.workList):
			break
	self.removeFilesByPattern(DIR_TMP, "[.](tv|radio)$")

na:

def convertBouquets(self):
	self.readIndex = 0
	while True:
		if 'lamedb' not in self.workList[self.readIndex]:
			filename = DIR_TMP + self.workList[self.readIndex]
			fp = open(DIR_ENIGMA2 + self.workList[self.readIndex], 'w')
			try:
				fp2 = open(filename)
				lines = fp2.readlines()
				fp2.close()
				was_html = False
				for line in lines:
					if was_html and '#DESCRIPTION' in line:
						was_html = False
						continue
					if '#NAME' in line:
						txt = _("remote of")
						line = "%s (%s %s) \n" % (line.rstrip('\n'), txt, self.getRemoteAdress())
					was_html = False
					if 'http' in line:
						was_html = True
						continue
					elif '#SERVICE' in line:
						line = line.strip('\r\n')
						line = line.strip('\n')
						tmp = line.split('#SERVICE')
						if '::' in tmp[1]:
							desc = tmp[1].split("::")
							if (len(desc)) == 2:
								tmp2 = tmp[1].split('::')
								service_ref = ServiceReference(tmp2[0] + ':')
								tag = tmp2[0][1:]
						else:
							tag = tmp[1][1:-1]
							tag2 = tmp[1][2:-1]
							service_ref = ServiceReference(tag)
						out = '#SERVICE ' + '4097' + tag2 + ':' + quote('http://' + self.getRemoteAdress() + ':8001/' + tag) + ':' + service_ref.getServiceName() + '\n'
					else:
						out = line
					fp.write(out)
			except:
				pass
			fp.close()
		self.readIndex += 1
		if self.readIndex == len(self.workList):
			break
	self.removeFilesByPattern(DIR_TMP, "[.](tv|radio)$")

Link to comment
Share on other sites

- brak picon kanałów.

 

Picony standardowo identyfikowane są po id kanału. Trzeba by zrobić linki symboliczne zmieniając "1" na "4097".

 

z palca to zajmie wieki... nie dało by się zrobić jakiegoś skryptu który na podstawie tego co jest w /usr/local/share/enigma2/picon robił by symlinki z zmienioną nazwą z np. 1_0_19_15_3200_13E_820000_0_0_0.png na 4097_0_19_15_3200_13E_820000_0_0_0.png

Link to comment
Share on other sites

A może skoro wiemy na czym polegał problem, zajmiemy się, moim zdaniem fajniejszą funkcją, która robi to samo, a wymaga tylko wpisania w opcjach enigmy IP zdalnego odbiornika i aktywowania funkcji: Włącz zapasowy zdalny odbiornik" (EN: "Enable Fallback remote receiver")

Wystarczy w tej modyfikacji:

https://sourceforge.net/p/openpli/enigma2/ci/3609ff62e1051451fd990f7ef3124eeda8d28e1d/

 

W opcjach tego strumienia który enigma chce otwierać podmienić tą nieszczęsną jedynke na 4097, ale tu niestety moje zdolności programistyczne są za słabe, jedyne co znalazłem, że ta zmiana powinna być gdzieś tu w pliku lib/service/servicedvb.cpp:

 

ePtr<eDVBResourceManager> res_mgr;

std::string remote_fallback_url = eConfigManager::getConfigValue("config.usage.remote_fallback");

if(!m_is_stream && !m_is_pvr &&
		(remote_fallback_url.length() > 0) &&
		!eDVBResourceManager::getInstance(res_mgr))
{
	eDVBChannelID chid, chid_ignore;
	int system;

	service.getChannelID(chid);
	eServiceReferenceDVB().getChannelID(chid_ignore);

	if(!res_mgr->canAllocateChannel(chid, chid_ignore, system))
	{
		size_t index;

		while((index = remote_fallback_url.find(':')) != std::string::npos)
		{
			remote_fallback_url.erase(index, 1);
			remote_fallback_url.insert(index, "%3a");
		}

		std::ostringstream remote_service_ref;
		remote_service_ref << std::hex << service.type << ":" << service.flags << ":" << 
				service.getData(0) << ":" << service.getData(1) << ":" << service.getData(2) << ":0:0:0:0:0:" <<
				remote_fallback_url << "/" <<
				service.type << "%3a" << service.flags;
		for(index = 0; index < 8; index++)
				remote_service_ref << "%3a" << service.getData(index);

		service = eServiceReferenceDVB(remote_service_ref.str());

		m_is_stream = true;
		m_is_pvr = false;
	}
}

 

Dokładniej to pewnie gdzieś w tym kawałku:

remote_service_ref << std::hex << service.type << ":" << service.flags << ":" << 
				service.getData(0) << ":" << service.getData(1) << ":" << service.getData(2) << ":0:0:0:0:0:" <<
				remote_fallback_url << "/" <<
				service.type << "%3a" << service.flags;
		for(index = 0; index < 8; index++)
				remote_service_ref << "%3a" << service.getData(index);

		service = eServiceReferenceDVB(remote_service_ref.str());

 

Ale niestety nie do końca jestem pewien co oznacza co. :-(

 

Rozwiązuje to zaróeno problem EPG, Picon i w ogóle wtyczka stanie się niepotrzebna.

Link to comment
Share on other sites

- brak picon kanałów.

 

Picony standardowo identyfikowane są po id kanału. Trzeba by zrobić linki symboliczne zmieniając "1" na "4097".

 

z palca to zajmie wieki... nie dało by się zrobić jakiegoś skryptu który na podstawie tego co jest w /usr/local/share/enigma2/picon robił by symlinki z zmienioną nazwą z np. 1_0_19_15_3200_13E_820000_0_0_0.png na 4097_0_19_15_3200_13E_820000_0_0_0.png

 

Coś takiego?:

 

#!/bin/bash

picons=/usr/local/share/enigma2/picon/*.png

for file in $picons
do
    link=`echo "$file" | sed 's/\/1_/\/4097_/g'`
    ln -s $file $link
done

Link to comment
Share on other sites

- brak picon kanałów.

 

Picony standardowo identyfikowane są po id kanału. Trzeba by zrobić linki symboliczne zmieniając "1" na "4097".

 

z palca to zajmie wieki... nie dało by się zrobić jakiegoś skryptu który na podstawie tego co jest w /usr/local/share/enigma2/picon robił by symlinki z zmienioną nazwą z np. 1_0_19_15_3200_13E_820000_0_0_0.png na 4097_0_19_15_3200_13E_820000_0_0_0.png

 

Coś takiego?:

 

#!/bin/bash

picons=/usr/local/share/enigma2/picon/*.png

for file in $picons
do
    link=`echo "$file" | sed 's/\/1_/\/4097_/g'`
    ln -s $file $link
done

 

To może by go dodać do paczki tak żeby trafiał do user_scripts?

Link to comment
Share on other sites

Guest herpoi

Można powiedzieć, że ja jestem tym "opiekunem".

Co do zmian w kodzie to raczej sceptyczny jestem, ale można pomyśleć, tylko nie wiem czy to załatwi sprawę, bo wtedy EPG też diabli wezmą.

Co do pikon, to sprawa jest prosta. Ostatnia wersja OpenPLi potrafi rozpoznawać je po nazwach, nie są potrzebne nazwy reference.

 

Jeszcze pytanie: Z jakiego frameworka korzystasz? Multiframework czy Gstreamer? Jeśli multiframework to zrób test:

- odinstaluj enigma2-multiframework

- zrestartuj odbiornik

- sprawdź czy działają streamy z 4097 na początku

Link to comment
Share on other sites

Guest herpoi

NNo albo i tak jak @j00zek mówi, tylko po zmianie ustawień nie zapomnij zrestartować odbiornika (restart całego systemu, a nie tylko GUI).

Link to comment
Share on other sites

Można powiedzieć, że ja jestem tym "opiekunem".

Co do zmian w kodzie to raczej sceptyczny jestem, ale można pomyśleć, tylko nie wiem czy to załatwi sprawę, bo wtedy EPG też diabli wezmą.

Co do pikon, to sprawa jest prosta. Ostatnia wersja OpenPLi potrafi rozpoznawać je po nazwach, nie są potrzebne nazwy reference.

 

Jeszcze pytanie: Z jakiego frameworka korzystasz? Multiframework czy Gstreamer? Jeśli multiframework to zrób test:

- odinstaluj enigma2-multiframework

- zrestartuj odbiornik

- sprawdź czy działają streamy z 4097 na początku

 

to te z jedynką nie chcą działać :-(

 

EPG będzie działać, bo ten kawałek kodu dotyczy już samego "wywołania" strumienia.

A może na OpenPLI ich poproszę, chociaż trochę są zablokowani jak się pisze, że to chodzi o odbiornik, który nie wspierają natywnie.

 

kolego @robert_cz , coś mi się wydaje, że niepotrzebnie kombinujesz. Przecież w innym wątku jasno było napisane, że  opcja "włącz zapasowy tuner" działa.

 

Właśnie, że działa pozornie, do restartu tunera :-( Potem trzeba włączać głowicę. Ogólnie działa, jak jest głowica z podłączoną anteną, problemy są na tunerach z wyłączoną, lub nieobecną głowicą.

Link to comment
Share on other sites

Guest herpoi

OpenPLi nie masz co prosić, bo nie zmienią na bank, to jest dysfunkcja naszych odbiorników. Zrób test jak ci pisałem, bo wydaje mi się, że kłopot tkwi w obsłudze z strumieni z gstremera. Gdy na multiframework odpalasz coś z 4097 na początku to leci przez eplayer, a on nie ma problemów przy wyłączonych głowicach.

 

@j00zek

Może umknął ci ten temat: http://forum.xunil.pl/index.php/topic,1969.0.html

Byłbym wdzięczny jakbyś testną na sparku :)

Link to comment
Share on other sites

OpenPLi nie masz co prosić, bo nie zmienią na bank, to jest dysfunkcja naszych odbiorników. Zrób test jak ci pisałem, bo wydaje mi się, że kłopot tkwi w obsłudze z strumieni z gstremera. Gdy na multiframework odpalasz coś z 4097 na początku to leci przez eplayer, a on nie ma problemów przy wyłączonych głowicach.

 

@j00zek

Może umknął ci ten temat: http://forum.xunil.pl/index.php/topic,1969.0.html

Byłbym wdzięczny jakbyś testną na sparku :)

 

Link który zamieściłeś, coś nie działa.

Chwilowo nie mam drugiego BOX-a, jak tylko "dopadnę" to sprawdzę ;-)

A wiesz może czy są jakieś wydajnościowe różnice między gstream i multiframework?

Link to comment
Share on other sites

Guest herpoi

Link jest dla @j00zek i mu zadziała ;)

 

Wydajnościowo chyba żadne. Gstreamer do odtwarzania wszystkiego używa gstreamer, multiframework do strumieni z 1 na początku używa gstreamera do 4097 używa eplayera, który bazuje na ffmpeg (lepiej radzi sobie z różnym multimediami avi, mp4, mkv itp).

Link to comment
Share on other sites

Link jest dla @j00zek i mu zadziała ;)

 

Wydajnościowo chyba żadne. Gstreamer do odtwarzania wszystkiego używa gstreamer, multiframework do strumieni z 1 na początku używa gstreamera do 4097 używa eplayera, który bazuje na ffmpeg (lepiej radzi sobie z różnym multimediami avi, mp4, mkv itp).

 

A gdzie to przestawić, bo nie mogę znaleźć?

Link to comment
Share on other sites

Gdy na multiframework odpalasz coś z 4097 na początku to leci przez eplayer, a on nie ma problemów przy wyłączonych głowicach.

 

Jeżeli mi coś nie umknęło, to 4097 zawsze leci przez gstreamer. Wymuszenie obsługi eplayer3 w multi to 4099. Przynajmniej tak to wygląda w kodzie FreePlayera.

Link to comment
Share on other sites

Gdy na multiframework odpalasz coś z 4097 na początku to leci przez eplayer, a on nie ma problemów przy wyłączonych głowicach.

 

Jeżeli mi coś nie umknęło, to 4097 zawsze leci przez gSreamer. Wymuszenie obsługi eplayer3 w multi to 4099. Przynajmniej tak to wygląda w kodzie FreePlayera.

 

Ja już się gubię, a te z 1 też da się wymusić, czy zawsze będą tak samo?

Do wyboru w menu po zainstalowaniu multiframework mam:

- gStreamer

- GST&FFM

- automatycznie

 

Czyli domyślnie, jak rozumiem, bez zainstalowanego multiframeworka działa gStreamer?

Link to comment
Share on other sites

Kiedy pojawił się FreePlayer z możliwością zmiany "LibMedia" to trochę pogrzebałem w kodzie z ciekawości. Ogólnie jest tak, że TS ma 1 (co pewnie coś oznacza ... nie tylko użycie gstreamera) a pozostałe formaty (AVI, MKV) 4097. Chyba, że masz enigmę multi, to wtedy wybrane formaty mają 4099, co wymusza użycie eplayer3. Tak działa automat, czyli np. zwykły odtwarzacz nagrań, czy MediaPlayer. I pewnie w ogólnym przypadku tak jest dobrze, ale zawsze jest możliwość zmiany tego przypisania, z czego korzystają wtyczki, jak już wspomniany FreePlayer i obecnie wtyczka opisywana tutaj.

 


 

Tak domyślnie działa wszystko z GST, natomiast jak widać z praktyki serwisy z "1" są traktowane jakoś inaczej.

Link to comment
Share on other sites

@matzg wiesz, że jak uda się rozwiązać problem ze strumieniami .ts o którym pisałem w tym wątku:

http://forum.xunil.pl/index.php?topic=1882.msg25431#msg25431

i na który @j00zek i @herpoi mają rozwiązanie, to będzie można wrócić do oryginalnej wersji wtyczki i nie będzie problemu ani z brakiem strumienia, który rozwiązałeś przez zmianę 1 na 4095, jak problem picon też się sam rozwiąże.

@ j00zek jest trochę tajemniczy, ale wygląda jak by plik /dev/dvb/adapter0/demux3 był nadmiarowy.

 

Wytłumaczyłby ktoś mi o co chodzi z tymi plikami demux o jak to działa i dlaczego pojawił się ten z 3 na końcu?

 

Link to comment
Share on other sites

Guest herpoi

Funkcja "zapasowy odbiornik" też działa bezproblemowo i TSy też działają. Plugin w zasadzie dubluje tą wbudowaną funkcję i według mnie jest zbędny, no ale to jak kto woli.

Link to comment
Share on other sites

Funkcja "zapasowy odbiornik" też działa bezproblemowo i TSy też działają. Plugin w zasadzie dubluje tą wbudowaną funkcję i według mnie jest zbędny, no ale to jak kto woli.

Pluginem zająłem się jako awaryjnym wyjściem dla opcji, jest jedna sytuacja w której się może przydać plugin, jak na tunerze serwerze mamy np. DVB-T, choć to też można załatwić przez opcję.

@herpoi, podaj mi proszę jak "ręcznie" naprawić problem TS-ów, skasować /dev/.../demux3?

Link to comment
Share on other sites

Guest herpoi

Zapasowy odbiornik obsługuje bez problemu wszystkie rodzaje głowic. Najlepiej skopiować sobie listę kanałów z serwera i wszystko chodzi. Dla odbiornika sieciowego wystarczy taki /dev/dvb/adapter0/

crw-r-----    1 root     root      212,   1 Oct  1 12:48 audio0
crw-r-----    1 root     root      212,   6 Oct  1 12:48 ca0
crw-r-----    1 root     root      212,  22 Oct  1 12:48 ca1
crw-r-----    1 root     root      212,   4 Oct  1 12:48 demux0
crw-r-----    1 root     root      212,   5 Oct  1 12:48 dvr0
crw-r-----    1 root     root      212,   3 Oct  1 12:48 frontend0
crw-r-----    1 root     root      212,   7 Oct  1 12:48 net0
crw-r-----    1 root     root      212,   8 Oct  1 12:48 osd0
crw-r-----    1 root     root      212,   0 Oct  1 12:48 video0

 

Podziękuj @j00zkowi :)

 

PS. Streamów oczywiście nie da się nagrywać, ale to także na większości mipsów tak jest.

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...