Willkommen bei DeBUG - Die Topadresse rund um BeOS
Search
Topics
 
  Welcome betimes! Home Topics Downloads Your Account Submit News Top 10  
 
Hauptmen
Startseite
Themen
Links
Downloads
Empfehle uns weiter
Dein Benutzerkonto
News vorschlagen

 
Who's Online
Zur Zeit sind 6 Gäste und 1 Mitglied(er) online.

Du bist eingeloggt als betimes.
Du hast 0 persönliche Nachricht(en).

 
BeBochs - The PC Emulator
Forum
Wchentliches Update
Tipps rund um BeBochs
Treiber / Tools
Vorkonfigurierte Startsysteme
Screenshots

 
BeBits
·Pineapple News 0.9.7
·USB MIDI driver 0.1
·SampleStudio 1.0 Beta 2.1
·Pocket Calculator 0.77 BETA
·Linksys Log Viewer 2.0 Preview 1
·Datawing Version 3.5.02
·VideoLAN client 0.4.4
·BShisen Tilesets 2 1.0
·ICH AC97 Driver 1.4
·BeZilla Beta

mehr...

Entwicklung: Neuer Worksop mit VCD support
Geschrieben am Dienstag, 04.Juni. @ 11:19:28 CEST von bernd

In unserer Reihe Scripting hat lichtgestalt einen sehr guten Artikel fr uns geschrieben.

Er beschftigt sich damit, VideoCDs unter BeOS sehr einfach zu starten und verwendet neben Scriptsprache einige Tools die man sich bei Beits runterladen kann (links sind jeweils beigefgt)

Bei Bedarf stelle ich den Artikel auch zum Download bereit.

Webmaster
Bernd Korz

Workshop - (S)VCDs automatisch abspielen

(S)VCDs automatisch abspielen

Schon seit geraumer Zeit lassen sich VCDs und SVCD unter BeOS abspielen. Doch ist es relativ umstndlich, da man die (S)VCD nicht einfach einlegen und vlc starten kann. Man mu den Systempfad zum Laufwerk herausfinden, dann die (S)VCD in der Shell "von Hand" mounten und an vlc den richtigen Pfad zur Videodatei bergeben. Was fr den gebten User umstndlich ist, wird fr den Neuling zur abschreckenden Barriere. Deshalb hat BePage mit Be(S)VCD_Player ein Paket auf BeBits gestellt, das mithilfe eines Scripts dieses Manko aus Welt schaffen sollte.
Leider funktionierte es nicht auf Anhieb richtig und weil ich gerade den Drang dazu versprte, schickte ich ihm nicht nur ein gefixtes Script, sondern bastelte gleich noch daran weiter um die Konfiguration mglichst zu automatisieren. Einige dieser nderungen hat BePage bernommen, aber ich denke mein Originalscript knnte als ntzliches Beispiel dienen, um andere, die bisher noch nicht in die Scriptprogrammierung eingestiegen sind, ein paar Anregungen zu geben.

Damit alles funktioniert, mssen folgende Programme installiert sein:

Wenn alles installiert ist, kann's losgehen (ich empfehle das runtergeladene fertige Script zur bersicht nebenher in einem Editor geffnet zu halten):

  1  #!/bin/sh

Wie Zeile 1 beginnt jedes Script, da es die Datei als Scriptdatei kennzeichnet und auf den Pfad zur ausfhrenden Shell verweist. Dann folgen einige Zeilen Kommentar, durch ein '#' gekennzeichnet, in denen der Ablauf des Scripts kurz skizziert wird.

 16  if [ -e $HOME/config/settings/vcd_player/vcd_drive ] ; then         # Check if there's a config file

 17

 18          CDROM_path=$(cat $HOME/config/settings/vcd_player/vcd_drive)    # Get path from config file

 19  else

Zeile 16 prft, ob die Datei $HOME/config/settings/vcd_player/vcd_drive existiert und fhrt falls dem so ist den darauffolgenden Code aus.
Hier wird eine Variable "CDROM_path" eingefhrt, die mit Ergebnis der Operationen in der Klammer (daher das "$") befllt wird (18). In dieser Klammer sehen wir den Befehl "cat", der hier den Inhalt dieser Datei ausgibt. Falls also eine Datei $HOME/config/settings/vcd_player/vcd_drive existiert, wird die Variable "CDROM_path" mit deren Inhalt gefllt.

Falls dem nicht so ist, werden wir, wie man gleich sieht, einen groen Aufwand treiben um auf andere Weise an den richtigen Pfad zum CD Laufwerk zu kommen. Warum dann berhaupt eine Konfigurationsdatei? Einerseits ist man durch die Erkennung des CD-ROMs sehr flexibel: Wer nur eines hat, merkt davon gar nichts. Wer zwei oder drei hat, kann von unterschiedlichen Laufwerken aus (S)VCDs abspielen und muss keine Konfigurationsdateien ndern, sondern klickt auf den entsprechenden Button. Wenn jemand jedoch mehrere CD-ROMs hat, aber immer vom gleichen liest, knnte der regelmig auftauchende Alert nerven.
Also gibt es die Mglichkeit ein Verzeichnis vcd_player in ~/config/settings/ anzulegen und dort in eine Textdatei vcd_drive den richtigen Pfad zum CD-ROM von Hand festzulegen.
Dieser Umstand sollte in einer beiliegenden Hilfedatei erwhnt werden und steht auch im Kopf dieses Scripts.

Wenn also keine Konfigurationsdatei vorhanden ist, geht es weiter mit:

 22  # 1. Detect CD_ROM(s)

 23  # ===================

 24

 25  play | grep "/dev" | sed s@ @@g > /tmp/cddev.txt

Hier passiert einiges...:)
Es wird ein Konzept verwendet, dass in der Bash Shell seit jeher so beliebt wie leistungsvoll ist: die "Pipe", dargestellt durch den senkrechten Strich "|". Sie verbindet den Output eines Befehls mit dem Eingang des folgenden. Daher ja auch Pipe == Rohr.
Beginnen wir von links: "play" ist ein Programm mit dem man vom Terminal aus eine AudioCD abspielen kann. Da ein Script sich so verhlt als ob man es direkt im Terminal eingibt, lt sich schnell herausfinden welchen Output "play" produziert. ffne also ein Terminal und tippe "play" ein. Du erhltst etwa folgendes:

Welcome to the BeOS shell.





$ play

Usage:  play device [command [param]]



 Valid devices:

   /dev/disk/ide/atapi/0/slave/0/raw



 Valid commands:

   0 [n] - play from track n [1]

   1     - pause

   2     - resume

   3     - stop

   4     - eject

   5 n   - set volume to n (0 <= n <= 255)

   6     - current position

   7 n s - save track n to file s

   8 [c] - scan in direction c (f = forward, b = backward)           



$

Wie man sieht versteckt sich im Output des Programms unter "Valid devices" der Pfad zu dem (oder auch mehreren) CD-ROM Laufwerken. Diese Pfade befinden sich alle unter /dev im System.
Dieser gesamte Output wird jetzt durch eine Pipe an den nchsten Befehl weitergeleitet: "grep". "grep" sucht im bergebenen Text nach der Zeichenfolge "/dev" und gibt die Zeilen, die diese Zeichen enthalten wiederum durch eine Pipe weiter an den dritten Befehl, "sed".
"sed" ist ein extrem leistungsvolles Programm und dementsprechend komplex. Es kann dazu verwendet werden Zeichenfolgen im bergebenden Text zu suchen und zu ndern oder gegen andere auszutauschen. Genau dies geschieht auch hier: Die Zeilen, die von "grep" gefiltert wurden enthalten nicht nur den Pfad zum CD-ROM, sondern auch noch Leerzeichen am Anfang. Genauso wie sie im Output von "play" standen, da "grep" ja nur die entsprechenden Zeilen gefiltert, diese aber nicht gendert hat. Dies bernimmt "sed" indem es alle Leerzeichen, die am Anfang einer Zeile stehen lscht. Genau auf die Syntax einzugehen wrde hier zuweit fhren. Wen's interessiert, das Netz ist voll von Erklrungen und ntzlichen sed-Einzeiler. Just Google it!
Am Ende der Zeile 25 wird der Output von sed schluendlich in eine Datei /tmp/cddev.txt umgeleitet.

 27  CDROM=$(cat /tmp/cddev.txt | wc -l)             # Number of found CDROMS

Hier sehen wir einen neuen Befehl. "cat" liefert hnlich wie in Zeile 18 den Inhalt der angegebenen Datei. Statt diesen jedoch direkt in die Variable "CDROM" zu schreiben, wird er durch eine Pipe an das Kommando "wc" weitergeleitet. "wc" bedeutet "wordcount", kann aber durch den Parameter "-l" dazu gebracht werden die Anzahl der bergebenen Zeilen auszuspucken. Dieser Wert wird nun in der Variablen "CDROM" abgelegt.
Wir zhlen also die Zeilen der Datei und kennen nun die Anzahl der erkannten CD-ROM Laufwerke.

 29  if [ $CDROM -eq 0 ] ; then

 30          alert --stop "Couldn't find a CDROM!"

 31          exit

 32

 33  elif [ $CDROM -eq 1 ] ; then

 34          CDROM_path=$(cat /tmp/cddev.txt)

Jetzt checken wir die Variable CDROM und reagieren entsprechend.
In Zeile 29 sehen wir nach ob sie gleich Null ist (englisch "equal" daher -eq). Zu beachten sind alle Leerzeichen! Die Bash Shell verzeiht hier keine Fehler! Falls also kein Laufwerk gefunden wurde, wird mittels "alert" (30) ein Fenster ausgegeben, in dem wir das dem User mitteilen.
Standardmig zeigt der Alert nur einen OK Button an und unser Script legt solange eine Pause ein, bis der User ihn drckt. Wie wir spter sehen werden, kann man aber bis zu drei selberbeschriftete Buttons anzeigen lassen und anschlieend auswerten welcher gedrckt wurde.
Hier reicht uns der einfache Alert. Wird die Abarbeitung nach einem OK-Klick fortgesetzt folgt der Befehl "exit" (31) und das Script wird ohne weitere Umschweife verlassen.

In Zeile 33 prfen wir ob die Anzahl 1 ist. Ist dies der Fall befindet sich nur eine Zeile in unserer zu Anfang erzeugten Datei /tmp/cddev.txt und ist zugleich der gesuchte Pfad zu unserem Laufwerk!
So wie vorher in Zeile 18 bergeben wir den Inhalt der Datei an eine weitere Variable: CDROM_path.

Jetzt beginnt die Arbeit aber erst richtig. Was geschieht wenn mehr als ein CD-ROM Laufwerk vorhanden ist? Nun, wir lassen den User entscheiden.

 36  else

 37          {

 38           # Create list of CD-ROM drives to choose from

 39           i=1

 40           while read ThisDevice; do

 41                 echo $i) $ThisDevice

 42                 i=$(expr $i + 1)

 43           done

 44          } < /tmp/cddev.txt > /tmp/cdlist.txt

Dazu erzeugen wir aus den erkannten Pfaden der CD-ROMs eine numerierte Liste. Hierzu stellen wir jeder Zeile der zu Beginn erkannten CD-Laufwerke die Zeilennummer und eine Klammer voran.
Zur Erklrung fangen wir diesmal von hinten an. Anders als in Zeile 25 schicken wir den Output diesmal direkt aus der Datei /tmp/cddev.txt in die vorangestellte Funktion die sich zwischen den {} befindet.
Die Funktion beginnt nach geschwungener Klammer und Kommentar in Zeile 39 mit der Initialisierung einer Zhlervariablen "i" mit dem Wert 1. Dann folgt eine "while" Schleife in der bei jedem Durchlauf eine Zeile mittels "read" aus der angegebenen Datei gelesen wird, solange, bis das Ende der Datei erreicht ist. Die einzelne Zeile wird jeweils in der Variablen "ThisDevice" abgelegt.
In Zeile 41 wird mittels "echo" ein String ausgegeben. Und zwar als erstes die Zhlvariable "i" (zu Anfang ja mit "1" initialisiert, was ja trefflich pat, da wir gerade die erste Zeile der Datei behandeln...) und dann eine Klammer ")". Damit diese Klammer jedoch nicht als zur Syntax gehrend fehlinterpretiert wird, muss man sie mit einem "" "escapen". Andere Zeichen die escaped werden mssen sind: "'!#$%*?/{}<>~() und Leerzeichen (kann durchaus sein, da ich welche vergessen habe...). Nach Zeilennummer, Klammer und Leerzeichen folgt die eigentliche Textzeile aus der Datei, die wir ja mittels "read" zuvor in die Variable "ThisDevice" gelesen haben.
In Zeile 42 wird die Zhlvariable um 1 erhht. "expr" ist ein kleiner Kommandozeilen-Rechner der dafr bentigt wird, weil die Bash Shell selbst keine Mglichkeit bietet Rechnungen durchzufhren und sich daher auf ein Hilfsprogramm verlassen mu.
Bei jedem Durchlauf wird so eine Zeile aus /tmp/cddev.txt gelesen, die Zeilennummer vorangestellt und anschlieend (siehe hinterer Teil der Zeile 44) in eine neue Datei /tmp/cdlist.txt geschrieben.

Jetzt werden dem User die so erzeugte Liste prsentieren, damit er entscheiden kann welches Laufwerk das richtige ist.
Dabei werden wir wieder einen Alert benutzen. Ein Alertaufruf ist generell folgendermaen aufgebaut:

           alert --mode "Text" [Button 1] [Button 2] [Button 3]

Optional bezeichnet --mode hier das im Alert angezeigte Icon. Zur Verfgung stehen: --empty | --info | --idea | --warning | --stop. Danach folgt der darzustellende Text in Anfhrungszeichen und dann bis zu drei Buttons. Hierbei ist der Beschriftungstext der Buttons gleichzeitig der String, der ausgegeben wird falls dieser Button gedrckt wurde.

 46          if [ $CDROM -eq 2 ] ; then

 47                  DevNum=$(alert "There is more than one CD-ROM drives available. Choose the right one:

 48

 49  `cat /tmp/cdlist.txt`" "1" "2")

 50                  CDROM_path=$(grep ^$DevNum /tmp/cdlist.txt | sed s/^$DevNum) //) # Find this number in cdlist.txt and remove number etc.

In der Variablen CDROM steht ja immernoch die Anzahl der erkannten Laufwerke, also checken wir erstmal, ob wir es mit 2 CD-ROMs zu tun haben (46).
Falls ja, erzeugen wir einen Alert mit zwei Buttons, "1" und "2" (47 bis 49).
Neben einem normalen Text mssen wir allerdings noch unsere numerierte Liste der mglichen CD-ROM Pfade darstellen. Dies erreichen wir einfach durch die Ausgabe der vorher erzeugten Datei /tmp/cdlist.txt (49). Zu beachten sind hier die "Backticks", zu erreichen per Shift+ (das ist die Taste neben ""...). Sie zeigen an, da hier nicht die Zeichen "cat cdlist.txt" ausgegeben werden sollen, sondern sie direkt als Befehl zu interpretieren sind.
Wichtig ist ebenfalls, da alles was sich als Text zwischen den " " befindet, 100%ig so dargestellt wird, wie es im Editor erscheint. Das heit, alle Tabs, Returns und Leerzeilen werden so bernommen wie sie eingegeben worden sind.
Das Ergebnis des Alerts (daher wieder die Klammern und das $), welcher Button gedrckt wurde, wird einer neuen Variablen "DevNum" zugeteilt.

Der zurckgegebene Wert ist entweder 1 oder 2, entsprechend der Zeile 1 oder 2 unserer Datei /tmp/cdlist.txt. Nehmen wir an, es wurde Option 2 gewhlt, DevNum enthlt also den Wert 2. Dann she Zeile 50 so aus:

           CDROM_path=$(grep ^2 /tmp/cdlist.txt | sed s/^2) //) 

"grep" sucht aus der Datei /tmp/cdlist.txt die Zeile die eine 2 am Anfang hat. Das bedeutet nmlich das "^" vor der 2. Diese Zeile wird nun mittels Pipe an sed gefttert. Der wiederum lscht "^2) " (wieder muss die 2 am Anfang stehen), also "2) " (2, Klammer, Leerzeichen). Eben genau unsere in den Zeilen 37 bis 44 mhsam generierten Zeilennummern.
Der so erhaltene "reine" Pfad zum CD-Laufwerk wird an die Variable "CDROM_path" vergeben.

Das gleiche machen wir nun fr den Fall dass 3 Laufwerke vorliegen:

 52          elif [ $CDROM -eq 3 ] ; then

 53                  DevNum=$(alert "There is more than one CD-ROM drives available. Choose the right one:

 54

 55  `cat /tmp/cdlist.txt`" "1" "2" "3")

 56                  CDROM_path=$(grep ^$DevNum /tmp/cdlist.txt | sed s/^$DevNum) //) # Find this number in cdlist.txt and remove number etc.

Und jetzt erreichen wir das Limit von Alert, weil wir damit nur drei Buttons darstellen knnen. Allerdings drften die wenigsten mehr als drei CD-ROMs haben...

 58          elif [ $CDROM -gt 3 ] ; then

 59                  alert --stop "Looks like you got more than 3 CD-ROM drives!

 60  Sorry, I cannot deal with that..."

 61                  exit

 62          fi

 63

 64  fi

 65

 66  fi

In Zeile 58 berprfen wir, ob es mehr als 3 (englisch "greater than", daher -gt) sind und geben ggf. eine kleine Fehlermeldung aus und verlassen das Script mittels "exit". Eigentlich htte man sich den "if"-Test sparen knnen, weil wir ja bereits geprft haben, ob 0, 1 ,2 oder 3 Laufwerke vorliegen...
Zu guter letzt schlieen wie die geschachtelten "if"-Blcke durch korrespondierende "fi" (62 bis 66).

 69  # 2. Detect vlc binary

 70  # ====================

 71

 72  if [ -e $HOME/config/settings/vcd_player/vlc ] ; then    # Check if there's a config file

 73          VLC_path=$(cat /tmp/vlcpath.txt)

 74

 75  else

Selbes Spiel mit dem Pfad zum VLC Player. Hier testen wir auf Konfigurationsdatei ~/config/settings/vcd_player/vlc, die Pfad/Dateinamen zum VLC Viewer enthlt. Gibt es keine solche Datei, machen wir weiter mit dem was nach "else" (75) folgt:

 77  query "((name=="[vV][lL][cC]*")&&(BEOS:TYPE=="application/x-vnd.Be-elfexecutable"))" | sed "/Trash//d" > /tmp/vlcpath.txt

Hier benutzen wir BeOS' Querysystem um alle Dateien zu finden die mit "vlc" beginnen und gleichzeitig vom Typ "application/x-vnd.Be-elfexecutable" sind. Da jedes ausfhrbare Programm diese Kennung trgt, stellen wir so sicher dass keine Verknpfungen oder Text- und Grafikdateien etc. mitgelistet werden.

TIP: Wertvolle Hilfe beim Erstellen des Querystrings liefert BeOS' Find-Panel. Anstatt "All files and folders" whlt man den entsprechenden Dateityp (hier: "Be Application") und gibt weitere Suchkriterien "by Attribute" ein. Hier kann man sich die Query so zusammenbauen, wie man's braucht und schaltet dann zum Schlu auf "by Formula" um. Dort erscheint der Suchstring, den man dann in sein Script oder ins Terminal in seine Query pasten kann. Nachtrglich kann diese dann auch noch weiter bearbeitet werden (z.B. durch "!" aus "UND" ein "NICHT" machen), so dass man noch feiner getunte Queries bauen kann als dies im Find-Panel mglich ist.

Die durch die Query erzeugte Liste wird nun zu "sed" gepiped, welches alle Zeilen die "Trash/" enthalten herausfiltert, da wir den Mlleimer nicht bercksichtigen wollen. Was von der Liste brigbleibt wird in die Datei /tmp/vlcpath.txt geleitet.

Nun folgt das selbe Spielchen wie zuvor bei der Erkennung des CD-ROMs. Sind mehrere VLC Programme vorhanden werden entsprechende Alerts erzeugt, etc. etc.

 79  VLC=$(cat /tmp/vlcpath.txt | wc -l)             # Are there more than one vlc binary?

 80

 81  if [ $VLC -eq 0 ] ; then

 82          alert --idea "Couldn't find the vlc binary!" "Get vlc on BeBits" "Cancel" | read button

 83          if [ $button -eq 0 ] ; then

 84              /boot/beos/apps/NetPositive http://www.bebits.com/app/2119 &

 85          fi

 86          exit

In Zeile 82 sehen wir eine andere Variante den Rckgabewert an eine Variable zu vergeben (vgl. z.B. Zeile 47). Beim Bash Scripting gibt es immer zwei Dutzend verschiedene Mglichkeiten um ans selbe Ziel zu kommen...
Verwendet man diese Methode, kann man auch den Test vereinfachen. Man erhlt "0" fr Button 1, "1" fr Button 2 und "2" fr Button 3. Wird Button 0 gedrckt, ffnen wir Net+ mit der URL zum Download und verlassen das Script. Man bemerke das "&" in Zeile 84. Dieses veranlat das aufgerufene Programm im Hintergrund zu starten, d.h. unser Script wird nicht angehalten bis Net+ beendet wird.

 88  elif [ $VLC -gt 1 ] ; then                       # Yes!

 89          {

 90           # Create list of found vlc binaries to choose from

 91           i=1

 92           while read ThisDevice; do

 93                 echo $i) $ThisDevice

 94                 i=$(expr $i + 1)

 95           done

 96          } < /tmp/vlcpath.txt > /tmp/vlclist.txt

 97

 98          if [ $VLC -eq 2 ] ; then

 99                  VLCNum=$(alert "There are two vlc binaries on your system. Choose the right one:

100

101  `cat /tmp/vlclist.txt`" "1" "2")

102              VLC_path=$(grep ^$VLCNum /tmp/vlclist.txt | sed s/^$VLCNum) //) # Find this number in vlclist.txt and remove number etc.

103

104          elif [ $VLC -eq 3 ] ; then

105              VLCNum=$(alert "There are three vlc binaries on your system. Choose the right one:

106

107  `cat /tmp/vlclist.txt`" "1" "2" "3")

108              VLC_path=$(grep ^$VLCNum /tmp/vlclist.txt | sed s/^$VLCNum) //) # Find this number in vlclist.txt and remove number etc.

109

110          elif [ $VLC -gt 3 ] ; then

111              alert --stop "Looks like you got more than 3 vlc binaries on your system!

112  Please rename a few to start with something other than "vlc"."

113                          exit

114                  fi

115

116  fi

117

118  fi

Wie gesagt, es luft alles so ab wie bei der Ermittlung des CD-ROM Pfads...

121  # 3. Detect VCD vs. SVCD and start vlc

122  # ====================================

123

124  if [ ! -e /boot/home/config/add-ons/kernel/file_systems ] || [ ! -e /boot/beos/system/add-ons/kernel/file_systems ] ; then

125

126      alert --idea "Couldn't find the vcdfs filesystem!" "Get it on BeBits" "Cancel" | read button

127      if [ $button -eq 0 ] ; then

128          /boot/beos/apps/NetPositive http://www.bebits.com/app/1490 &

129      fi

130      exit

131  fi

Jetzt berprfen wir, ob das bentigte VCD Dateisystem auf dem System installiert ist (124). Bzw., eigentlich prfen wir, ob es nicht vorhanden ist (daher das "!"). Da es zwei mgliche Installtionsorte gibt (der zweite dort oben ist eigentlich falsch, da alles unter /boot/beos/ dem System gehrt und der User Zusatztreiber etc. in $HOME/config/ sollte...), verknpfen wir die beiden Tests mit einem ODER, ||.
Ggf. geben wir dann einen Alert wie in den Zeilen 80ff aus, der direkt mit BeBits verbindet.

133  mkdir /videocd

134

135  mount -t vcdfs $CDROM_path /videocd

Jetzt "mounten" wir die (S)VCD. Dazu legen wir ein Verzeichnis an (124), das als sog. "mountpoint" dient und bergeben dann dem "mount" Befehl die Variable mit dem CDROM Pfad, unseren mountpoint und geben als Option "-t vcdfs" an, welches das Dateisystem der zu mountenden CD als bestimmt.

137  if [ -d /videocd/MPEGAV ] ; then                # It's a VCD!

138

139      if [ ! -e /boot/home/config/bin/VCDGear ] ; then

140

141          alert --idea "Couldn't find the VCDGear binary!" "Get it on BeBits" "Cancel" | read button

142          if [ $button -eq 0 ] ; then

143              /boot/beos/apps/NetPositive http://www.bebits.com/app/1490 &

144          fi

145          exit

146      fi

VCDs zeichnen sich dadurch aus, dass sich eine Videodatei AVSEQ01.DAT im Verzeichnis MPEGAV befindet. In Zeile 137 testen wir das und fahren fort, falls dem so ist.
Wie vorher mit dem VCD Filesystem prfen wir dann ob VCDGear installiert ist.

148          VCDGear -raw2mpg -fix /videocd/MPEGAV/AVSEQ01.DAT $HOME/vcd_mpg_out.mpg &

149          sleep 3

150

151          $VLC_path $HOME/vcd_mpg_out.mpg         # Start viewing the VCD

152

153          kill VCDGear

154          rm $HOME/vcd_mpg_out.mpg

155  fi

Zeile 148 ist der Aufruf von VCDGear, welches im Homeverzeichnis des Users eine entsprechend konvertierte Datei erzeugt, die dann nach 3 Sekunden Warten (149) an den VLC Viewer dessen Pfad sich in der Variablen "VLC_path" befindet, bergeben wird. Im Gegensatz zum evtl. Aufruf des Browsers fr einen Download weiter oben, verzichten wir hier auf ein "&" am Ende des Kommandos wodurch unser Script solange angehalten wird, bis der VLC Player geschlossen wird.
Dann geht's weiter und wir beenden VCDGear (153) und lschen dessen temporr angelegte Datei (154).

158  if [ -d /videocd/MPEG2 ] ; then                 # It's a SVCD!

159

160          $VLC_path /videocd/MPEG2/AVSEQ01.MPG    # Start viewing the SVCD

161  fi

War es im vorigen Test keine VCD, testen wir nun auf SVCD, dessen charakteristisches Verzeichnis MPEG2 lautet. Hier brauchen wir kein VCDGear und bergeben einfach die immer AVSEQ01.MPG benannte Datei an VLC.

164  # 4. Cleanup

165  # ==========

166

167  unmount /videocd

168  rmdir /videocd

169  rm /tmp/cddev.txt

170  rm /tmp/cdlist.txt

171  rm /tmp/vlclist.txt

172  rm /tmp/vlcpath.txt

173

174  # End of script

Kehren wir aus dem VLC Player zurck, "unmounten" wir die (S)VCD, und lschen das mountpoint Verzeichnis und evtl. angelegte Dateien. Fertig!


Boah...! Ein ganz schner Haufen Arbeit! Einiges htte man bestimmt krzer oder eleganter lsen knnen (ich denke da z.B. an Listennumerierungen, die man auch schn mit "sed" htte machen knnen), aber so ist es ausfhrlicher und bleibt fr Anfnger (zu denen ich mich auch zhle) verstndlich.

Mittlerweile soll VLC auch mit VCDs zurechtkommen, so dass VCDGear eigentlich gar nicht mehr gebraucht wird. Auch ist mir whrend ich mein Script hier beschrieben habe eine Idee gekommen, wie man auf die ganze CD-ROM Erkennung verzichten kann...
Aber nach Stunden des Schreibens wollte ich nicht wieder alles ber den Haufen werfen. Und seinen Zweck erfllt es ja immer noch; und sei es als abschreckendes Beispiel :)

Mitverantwortlich fr dieses Script waren zum einen BePage, dessen Originalscript fr Be(SVCD_Player v0.05 ich ja verwurstet habe und Scot Hacker's BeOS Bible dessen Scripting Kapitel eine hervorragende Einfhrung ist.

lichtgestalt



 
 
_RELATED
· _MOREABOUT
· _NEWSBY bernd
· Linux Kernel Archives
· HotScripts
· Google Search Engine
· W3 Consortium
· HTML Standard
· BeOS


_MOSTREAD :
BeUnited ist auf verlorenem Posten


_PRINTER  _FRIEND

_THRESHOLD
  
_COMMENTSWARNING
Ausfhrlich und gut, jedoch... (_SCORE 0)
von Unbekannter Fremder am Dienstag, 04.Juni. @ 13:26:01 CEST
wie Du schon gesagt hast: als abschreckendes Beispiel gut geeignet. Dies erinnert mich stark an meine Lunix-Nchte;).
Das ist schon seltsam, das das MediaOS eine (S)VCD nicht einfach abspielen kann...
Dabei ist die Vorgabe klar:
CD rein, (mounten), Draufklicken & Film gucken.
Wenn ein 08/15 - M$-User sich diese Krepelei anguckt, dann wird er sich schon seinen Teil denken...
Unabhngig von der abgefahrenen Tatsache eines 'VCD-Abspiel-Workshops' (unglaublich-man denke das nur weiter und stelle sich ein Skript zum mounten/abspielen einer Diskette vor - pah) ist die Erluterung super, Lichtgetalt.
Respekt.
Strtebeker


[ _REPLY ]

 


All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest 2001 by me

You can syndicate our news using the file backend.php or ultramode.txt