Video, Audio Pids ermitteln in Enigma

Alles rund um das grafische Benutzerinterface Enigma
mrvica
Einsteiger
Einsteiger
Beiträge: 342
Registriert: Freitag 24. September 2004, 11:48

Video, Audio Pids ermitteln in Enigma

Beitrag von mrvica »

geht einfach mit Enigma Webinterface, folgendes im Telnet eingegeben

Code: Alles auswählen

wget -q -O - http://localhost/control/zapto?getpids
echo
wget -q -O - http://localhost/control/zapto?getallpids
echo
pids=`wget -q -O - http://localhost/control/zapto?getallpids | cut -c 1-5`
echo "$pids"
ergibt

Code: Alles auswählen

101
102

00101
00102 stereo
00103 mit Audiodeskription
00106 Dolby Digital 2.0 (AC3)
00104 vtxt
00100 pmt
00101 pcr

00101
00102
00103
00106
00104
00100
00101
will man die Pids z.B. als Parameter an ein Tool übergeben stören die vorangestellten Nullen, kriege das nicht mit cut gelöst da Pids manchmal 2,3,4 oder 5 stellig (dezimal) sind, es sind Änderungen im Code erforderlich, hier diff zu src/enigma_dyn_misc.cpp

Code: Alles auswählen

--- enigma_dyn_misc_cvs.cpp	Fri Sep 07 14:17:04 2007
+++ enigma_dyn_misc.cpp	Wed Jan 25 20:59:15 2012
@@ -541,7 +541,7 @@
 		if (opt == "getallpids")
 		{
 			std::stringstream str;
-			str << std::setfill('0');
+			// str << std::setfill('0');
 			if ( Decoder::current.vpid != -1 )
 				str << std::setw(5) << Decoder::current.vpid << std::endl;
 			eDVBServiceController *sapi=eDVB::getInstance()->getServiceAPI();
@@ -554,10 +554,12 @@
 					str << std::setw(5) << it->pmtentry->elementary_PID << ' ' << it->text << std::endl;
 				if ( Decoder::current.tpid != -1 )
 					str << std::setw(5) << Decoder::current.tpid << " vtxt\n";
-				if ( Decoder::current.pmtpid != -1 )
-					str << std::setw(5) << Decoder::current.pmtpid << " pmt\n";
-				if ( Decoder::current.pcrpid != -1 )
-					str << std::setw(5) << Decoder::current.pcrpid << " pcr\n";
+				if ( Decoder::current.tpid != -1 )
+					str << std::setw(5) << Decoder::current.tpid + 1 << " subt\n";
+				// if ( Decoder::current.pmtpid != -1 )
+				//	str << std::setw(5) << Decoder::current.pmtpid << " pmt\n";
+				// if ( Decoder::current.pcrpid != -1 )
+				//	str << std::setw(5) << Decoder::current.pcrpid << " pcr\n";
 				result = str.str();
 			}
 		}
die Ausgabe danach

Code: Alles auswählen

101
102

  101
  102 stereo
  103 mit Audiodeskription
  106 Dolby Digital 2.0 (AC3)
  104 vtxt
  105 subt

  101
  102
  103
  106
  104
  105
pmt und pcr pid habe ich auskomentiert da man es nicht unbedingt braucht, Subtitle Pid ist errechnet, Videotext Pid + 1, es wird ein Subtitle Pid angezeigt auch wenn keiner vorhanden, habe leider keine andere Lösung, getestet mit dem Tool http://cvs.tuxbox-cvs.sourceforge.net/c ... iew=markup , funktioniert

mrvica
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 13:05

Re: Video, Audio Pids ermitteln in Enigma

Beitrag von rhabarber1848 »

mrvica hat geschrieben:stören die vorangestellten Nullen, kriege das nicht mit cut gelöst
dann nimm sed ;)

Code: Alles auswählen

echo "00104" | sed "s/^0*//"
104
echo "0104" | sed "s/^0*//"
104
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: Video, Audio Pids ermitteln in Enigma

Beitrag von seife »

Ich würde auch an der webapi nicht einfach was ändern, da sich da evtl. externe Tools drauf verlassen dass die Nullen drin stehen.
mrvica
Einsteiger
Einsteiger
Beiträge: 342
Registriert: Freitag 24. September 2004, 11:48

Re: Video, Audio Pids ermitteln in Enigma

Beitrag von mrvica »

ok, es wird nichts geändert, nur erweitert (dumpallpids)

Code: Alles auswählen

--- enigma_dyn_misc_cvs.cpp	Fri Sep 07 14:17:04 2007
+++ enigma_dyn_misc.cpp	Fri Jan 27 15:59:50 2012
@@ -561,6 +561,26 @@
 				result = str.str();
 			}
 		}
+		else if (opt == "dumpallpids")
+		{
+			std::stringstream str;
+			if ( Decoder::current.vpid != -1 )
+				str << std::setw(5) << Decoder::current.vpid << std::endl;
+			eDVBServiceController *sapi=eDVB::getInstance()->getServiceAPI();
+			if (!sapi || !sapi->service)
+				result = "error\n";
+			else
+			{
+				std::list<eDVBServiceController::audioStream> &audioStreams = sapi->audioStreams;
+				for (std::list<eDVBServiceController::audioStream>::iterator it=audioStreams.begin(); it != audioStreams.end(); ++it)
+					str << std::setw(5) << it->pmtentry->elementary_PID << std::endl;
+				if ( Decoder::current.tpid != -1 )
+					str << std::setw(5) << Decoder::current.tpid << "\n";
+				if ( Decoder::current.tpid != -1 )
+					str << std::setw(5) << Decoder::current.tpid + 1 << "\n";
+				result = str.str();
+			}
+		}
 		else
 			result = "ok\n";
 	}
im Telnet eingegeben auf "das Erste"

Code: Alles auswählen

wget -q -O - http://localhost/control/zapto?getpids
echo
wget -q -O - http://localhost/control/zapto?getallpids
echo
pids=`wget -q -O - http://localhost/control/zapto?getallpids | cut -c 1-5 | sed "s/^0*//"`
echo "$pids"
echo
pids=`wget -q -O - http://localhost/control/zapto?dumpallpids`
echo "$pids"
echo
pids=`wget -q -O - http://localhost/control/zapto?dumpallpids | sed "s/^ *//"`
echo "$pids"
ergibt

Code: Alles auswählen

101
102

00101
00102 stereo
00103 ohne Audiodeskription
00106 Dolby Digital 2.0 (AC3)
00104 vtxt
00100 pmt
00101 pcr

101
102
103
106
104
100
101

  101
  102
  103
  106
  104
  105

101
102
103
106
104
105
alles ok

mrvica