DirectShow Filter fuer die DBOXII

Digital Recording
BSE
Einsteiger
Einsteiger
Beiträge: 253
Registriert: Sonntag 28. April 2002, 10:49

DirectShow Filter fuer die DBOXII

Beitrag von BSE »

Nicht zuletzt auch angeregt durch dieses Forum, habe ich angefangen
einen DirectShow Capture und Render Filter fuer die DBOXII zu
entwickeln. Ich denke damit ergeben sich vielfaeltige Anwendungsmoeglichkeiten.
(On the fly recompress, preview/capture, ...)

Status Capture:
Alle elementaren Funktionen sind implementiert. Erzeugt wird ein
PS Output (Pins fuer PES Video und Audio sind auch implementiert) der
entweder direkt gespeichert oder anderweitig weiterverarbeitet werden kann. (Fuer eine Echtzeitkonvertierung
in andere Formate waere ein schneller Scaler fuer YUY2 oder I420
hilfreich). Was auch noch fehlt sind einige (private)Interfaces zur parametrisierung (IPAdresse, ...) sowie IAMTVTuner.
Das Filter verwendet nicht nur die Standard HTTP interfaces sondern
kann via integriertem TelnetClient auch Kommandos auf der Box ausfuehren (z.B. das allseits geleibte "killall -HUP controld",
es scheint man braucht controld nicht mit -9 abzuschiessen. Solange
man nicht herumzappt ist ein HangUp wohl ausreichend).
Auch bei Programmen mit hoechster Datenrate (Bei mir im Kabel sind das
ca. 5.0 MBit bei Premiere Sport) muss das Playback beim Capturen nicht
gestoppt werden. (Dabei ist die Box dann auch fast komplett am Anschlag)

Status Renderer:
Erstes Leben ist zu erkennen. Das Filter wird an zwei Eingangspins jeweils
PES Video/Audio oder ES Video/Audio akzeptieren.
Hierbei ist es interessant zu erwaehnen das der MPEGDecoder in der
DBOX auch mit 352x288 formatigem MPEG1/2 problemlos umgehen kann.
Ein (zugegebermassen schraeger) Versuch die DBOX aus einer
TVCapture Karte mit MPEG RealTimeCompress (in Software natuerlich) zu
fuettern war sehr erfolgreich. Egal ob SIF oder voll D1, bei 4.0 MBit
ist bei mir die Box jedoch schon reichlich ausgelastet.
(Vielleicht kann man da noch etwas an den Buffergroesen drehen ...)
Unhandlich ist natuerlich auch das dafuer die box im Main
mode gebootet werden muss, aber ich denke das wird sich (hoffentlich)
noch von anderer Stelle verbessern lassen ...

Falls Interesse besteht werde ich die Quelltexte mal als zusammenpacken
und auf meinen Server legen.
So nun zum eigentlichen Kern des Pudels:
Findet sich ein (oder mehrere) Entwickler die Interesse haben eine
Player/Recorder/Preview App zu schreiben (Visual C/C++) ?
Ich werde die Filter zwar in eine einbauen (aus rein privatem Interesse),
habe jedoch keine Moeglichkeit diese in irgendeiner Form zur Verfuegung zu stellen. Sorry.

- Bernd
animal42
Interessierter
Interessierter
Beiträge: 54
Registriert: Dienstag 4. September 2001, 00:00

Beitrag von animal42 »

Das kling ja alles richtig gut! Was für eine Box haste denn?
BSE
Einsteiger
Einsteiger
Beiträge: 253
Registriert: Sonntag 28. April 2002, 10:49

Beitrag von BSE »

Ich benutze Neutrino mit einer
Nokia 2xIntel AVIA500.
Da ich von den Filtern her jedoch nur ein funktionierendes Interface
fordere sollte die HW eigentlich egal sein. (Hoffentlich)
Sprich: Auch auf den Systemen die bereits erfolgreich wingrab
oder dboxTimer einsetzen koennen, sollte die Software laufen.
Nochmal zurueck zur PlayerApp. Falls sich keiner erbarmen sollte
werde ich selbst eine sehr minimalistisch App stricken. Aber seid
gewarnt, ich bin kein GUI Designer !
BTW: Ein kurzer Wiedergabetest mit "passendem input"
(DIVX 352x288@25fps) hat ebenso problemlos funktioniert
(Video only)

- Bernd
alexW
Developer
Beiträge: 631
Registriert: Donnerstag 24. Januar 2002, 12:21

Beitrag von alexW »

Also,

mein Interesse an solch einem Filter waere gross ;) Eine App ist nicht unbedingt noetig, ich denke da gibts doch schon brauchbares irgendwo fuer :)
alexW
BSE
Einsteiger
Einsteiger
Beiträge: 253
Registriert: Sonntag 28. April 2002, 10:49

Beitrag von BSE »

Ok, ich habe mal einen ersten Versuch auf den Server gelegt.

http://transputer.dyn.escape.de/src/dbo ... II_0_1.zip

Unter
http://transputer.dyn.escape.de/src/dboxII/
sind noch einige andere sourcen, tools und docs.

Wie gesagt, das ist keine Enduser Software sondern richtet sich
primaer an diejenigen die zumindest schoneinmal mit GraphEdit
herumexperimentiert haben !

Wie im Readme erwaehnt, ist dafuer dringend angeraten das
dort erwaehnte MPEGDemultiplexII filter aus der TRex installation
zu verwenden.

http://transputer.dyn.escape.de/download/TRexSetup.exe

Der MPEG2Decoder und Renderer werden hoffentlich dann ebenfalls
in der NAECHSTEN TRex version verfuegbar sein. Bis dahin moege sich
der Testwillige mit dem Cyberlink decoder behelfen.

Das RenderFilter ist mir noch zu unvollkommen, wird aber hoffentlich
bald einen brauchbaren Status erreichen.


- Bernd
Zuletzt geändert von BSE am Donnerstag 30. Mai 2002, 01:43, insgesamt 1-mal geändert.
Flagg
Developer
Beiträge: 392
Registriert: Samstag 21. Juli 2001, 00:00

Beitrag von Flagg »

@BSE:

Kannst du die Treiber auch als DLL zur Verfügung stellen?
Nachtrag: Hab gesehen, das es eine AX-Datei ist. Kann ich AX-Dateien wie DLLs in anderen Sprachen einbinden?

Wann bist du mal im IRC?

Dann könnte man das evtl. in ein Grab-Programm mit einbauen!

MfG
Flagg
alexW
Developer
Beiträge: 631
Registriert: Donnerstag 24. Januar 2002, 12:21

Beitrag von alexW »

BSE hat geschrieben:Ok, ich habe mal einen ersten Versuch auf den Server gelegt.
Jo, also ist echt gut. Was anderes als den Pinnacle Demux bekomme ich da auch nicht vernuenftig zum laufen, der zusammen mit den InterVideo Dekodern laeuft hier allerdings einwandfrei :)
Das einzige was ich nun braeuchte, waere etwas, mit dem die Ausgabe dann ueber einen Codec laufen lassen koennte, irgendwie geht das mit dem GraphEdit wohl nicht?
Waere es evtl. moeglich das Teil als Capture Quelle anzumelden? ;)
alexW
BSE
Einsteiger
Einsteiger
Beiträge: 253
Registriert: Sonntag 28. April 2002, 10:49

Beitrag von BSE »

Ja das geht prinzipiell schon und wird auch gemacht.
(Der Form halber ...)
Jedoch bringt es leider kaum Vorteile. Der Filter wird dann
zwar in Applikationen wie AMCap erkannt, jedoch wird dann
wieder nur eine std. Render Methode ausgefuehrt die wieder
den M$ Demultiplexer einfuegen wuerde.
Wie gesagt, ich denke man braeuchte eine (freie) App. um
einen Graphen verlaesslich aufzubauen.
BTW: Ich werde mal den neuen TRex auf den Server stellen,
dort sollten dann auch die "vermissten" Filter verfuegbar sein.

http://transputer.dyn.escape.de/download/TRexSetup.exe

- Bernd
alexW
Developer
Beiträge: 631
Registriert: Donnerstag 24. Januar 2002, 12:21

Beitrag von alexW »

BSE hat geschrieben:Jedoch bringt es leider kaum Vorteile. Der Filter wird dann
zwar in Applikationen wie AMCap erkannt, jedoch wird dann
wieder nur eine std. Render Methode ausgefuehrt die wieder
den M$ Demultiplexer einfuegen wuerde.
Hm, ja das sollte dann natuerlich nicht passieren ;)
Naja, also sagen wir es direkt heraus, ich will durch diesen Filter direkt in z.B. vdub auf Platte durch einen Codec streamen lassen, bzw. z.B. mit dem WinMediaKram live Streamen lassen. Das ist das, was ich mir so gerne wuensche :)
Und das was dein Filter momentan schon leistet ist wirklich beachtlich :)
alexW
BSE
Einsteiger
Einsteiger
Beiträge: 253
Registriert: Sonntag 28. April 2002, 10:49

Beitrag von BSE »

Hmmm, ok das ist prinzipiell machbar !
Jedoch muesste man Audio und Video Decoder mit in das
CaptureFilter packen. Das wuerde dann I420, YUY2, RGB24 Video bzw
PCM Audio liefern koennen. Ein wenig tricksen muss man
da schon, da fuer das System seperate Audio und Video Capture
Quellen verfuegbar sein muessen. Ich denke nicht das VDUB
mit einer kombinierten A/V Source klarkommt.
(Zumal das ganze noch durch einen DShow Wrapper gewuchtet wird,
der damit bestimmt nichts anfangen kann. VDUB ist halt eine VfW App ...)
Obwohl diese Mechanik natuerlich DShow verhoehnt und der Vorteil
einer kompakten MPEG Komprimierung dahin waere hat die Idee doch so
ihren Reiz.

- Bernd
BSE
Einsteiger
Einsteiger
Beiträge: 253
Registriert: Sonntag 28. April 2002, 10:49

Beitrag von BSE »

Das DShow Render Filter nimmt langsam Form an.
Das Streaming von Audio ODER Video laeuft schon recht gut,
nur beides zusammen ist z.Z. nicht stabil lauffaehig.
Waehrend fuer Video ES oder PES eingeschleust werden kann,
ist fuer Audio zwingend PES erforderlich.
Im Prinzip kann der Playbackpfad auch direkt ohne zuerst in den
Main mode zu gehen gestartet werden. Von da aus gibt es jedoch
noch keinen Weg zurueck. ("insmod gtx_dvr.o" wird per Telnet
interface aufgerufen und koennte danach wieder removed werden,
ebenso wie die ueblicherweise verwaisten dvrv und dvra prozesse)
Hat da jemand einen Tip wie das zu bewerkstelligen waere ?
Ebenso braeuchte man ein Programm mit inversem Verhalten zu
fbclear ...

BTW: Dank einer kleinen Erweiterung im Demultiplexer laeuft nun
auch Audio im Capture Pfad einwandfrei.

@alexW
Falls du das Video in ein anderes Format konvertieren moechtest,
ist das natuerlich auch im Filtergraph moeglich. In der Regel moechte
man jedoch nicht bei der SrcAufloesung bleiben, sondern diese Reduzieren.
Und dafuer ist nuneinmal ein schnell Scaler unerlaesslich
(I420 oder YUY2 input/output, da das nuneinmal die nativen MPEGDecoder
Ausgangsformate sind)

Ein CapturePfad koennte dann grob so aussehen:
(Der Einfachheit halber VideoOnly)
DBOXIICapture -> Demultiplexer -> MPEGVideoDecoder -> Scaler
-> Compressor (-> AVIMuxer/MPEGMuxer) -> FileWriter

Wobei als Compressor prinzipiell jeder Echtzeitfaehige Codec eingesetzt
werden kann.

- Bernd
alexW
Developer
Beiträge: 631
Registriert: Donnerstag 24. Januar 2002, 12:21

Beitrag von alexW »

BSE hat geschrieben:Das Streaming von Audio ODER Video laeuft schon recht gut,
nur beides zusammen ist z.Z. nicht stabil lauffaehig.
Oeh, wie das? Bei mir habe ich einfach meinen mpeg Audio Dekoder angeschlossen und es lief beides gleichzeitig einwandfrei hier.
BSE hat geschrieben:ebenso wie die ueblicherweise verwaisten dvrv und dvra prozesse)
Hat da jemand einen Tip wie das zu bewerkstelligen waere ?
Leider nein, die muessten halt mal weitergeschrieben werden ;)
BSE hat geschrieben:@alexW
Falls du das Video in ein anderes Format konvertieren moechtest,
ist das natuerlich auch im Filtergraph moeglich. In der Regel moechte
man jedoch nicht bei der SrcAufloesung bleiben, sondern diese Reduzieren.
Jo, aber ich will auch in Echtzeit das halt wieder dann weiterstreamen koennen, das geht ja afaik mit den vorhandenen Filtern soweit auch nicht.
alexW
BSE
Einsteiger
Einsteiger
Beiträge: 253
Registriert: Sonntag 28. April 2002, 10:49

Beitrag von BSE »

Oeh, wie das? Bei mir habe ich einfach meinen mpeg Audio Dekoder angeschlossen und es lief beides gleichzeitig einwandfrei hier.
Naja, damit habe ich den Render Pfad gemeint, auf der Capture Seite
laeuft das natuerlich.
Jo, aber ich will auch in Echtzeit das halt wieder dann weiterstreamen koennen, das geht ja afaik mit den vorhandenen Filtern soweit auch nicht.
Ja da hast du Recht. Wenn man z.B. das Video via M$ StreamingVideo
schicken will, muss man wohl, wie zuvor beschrieben, uncompressed
Samples liefern.
Wer jedoch VCD oder SVCD, MPEG4, MJPEG, ... in Echtzeit generieren moechte, kann
mit dem existierenden Filter und einem performanten Scaler +
Encoder arbeiten.

Falls jemand also Source zu einem SCHNELLEN Scaler hat, nur her damit.
Daraus ein Filter zu bauen ist dann kein grosser Aufwand. Das was ich
momentan habe ist fuer einen Echtzeitbetrieb leider unbrauchbar langsam.

- Bernd
BSE
Einsteiger
Einsteiger
Beiträge: 253
Registriert: Sonntag 28. April 2002, 10:49

Beitrag von BSE »

Generelles AudioStreaming ZUR Box laeuft bis auf ein paar kleine
Macken. 256kBit LayerII klingen gar nicht einmal so schlecht
ueber die heimische Anlage ...
Prinzipiell laesst sich damit alles streamen, wofuer es einen
funktionierenden SourceReader gibt. Bis auf RealAudio und Midi
sollte damit eigentlich alles laufen. (MP3, WMA, WAVE, MPA, ...)

- Bernd
BSE
Einsteiger
Einsteiger
Beiträge: 253
Registriert: Sonntag 28. April 2002, 10:49

Beitrag von BSE »

Ok, fuer alle (euch wenigen) Interessierten. Unter

http://transputer.dyn.escape.de/src/dboxII/dboxII.zip

liegen nun die Sourcen (und vorkompilierten Binaries) fuer
das Capture und Render Filter. Anzuraten ist wie immer auch das letzte
TRex (alpha) mitzuinstallieren, da dort einige elementare Filter registriert werden.

http://transputer.dyn.escape.de/download/TRexSetup.exe

Vielleicht noch ein Wort zum Renderer.
Den parallelen Betrieb von Audio UND Video habe ich ersteinmal
zur Seite gelegt. Weder das Render-Filter noch WinGrab kann
bei meiner GTX Box zufriedenstellend die Hardware ansteuern
(Entweder verzweifelte ReSyncversuche oder AudioTotalausfall, oder
Video stottert, ...) Beschraenkt man sich auf Audio ODER Video dann
sieht die Sache wieder freundlicher aus. Zu weiteren Details lest
einfach die readme es.

@developer: Vielleicht findet ihr ja ein wenig Zeit den "clipmode"
weiter zu verbessern.

- Bernd
msonic
Neugieriger
Neugieriger
Beiträge: 9
Registriert: Freitag 3. Mai 2002, 03:35

Beitrag von msonic »

Hi Bernd,

hab mich heute mal ueber Deine sourcen hergemacht.
Da ich mit NT4 unterwegs bin, muss ich leider erstmal mein eigenes sueppchen kochen. Aber Deinen Filter-Ansatz find ich ungemein interessant.
Neutrino ist leider sehr empfindlich beim Zugriff uebers Netz :-( ... noch,
aber Du solltest mal

wsprintf(buffer, "GET /%.4x,%.4x HTTP/1.0\r\nAccept: *\n\n\r\n\r\n", vpid, apid);

versuchen.

Da ich Deinen muxer noch nicht versucht habe, kann ich Dir zwar nicht genau sagen wei gut beide streams rueberkommen, aber "vom Datenfluss" her sieht es eigentlich recht "rund" aus ;-)
Auf das ".4" und "/n/n" bin ich beim durchforsten der box sourcen gestossen und den vpid will er bei mir auch zwingend als erstes haben.

Beim Interface scheint sowieso noch jeder sein eigenes ding zu machen. Sollte sich mal jemand erbarmen und das in die Hand nehmen ;-)

Gruss
msonic
BSE
Einsteiger
Einsteiger
Beiträge: 253
Registriert: Sonntag 28. April 2002, 10:49

Beitrag von BSE »

msonic hat geschrieben:Da ich mit NT4 unterwegs bin, muss ich leider erstmal mein eigenes sueppchen kochen.
Eigentlich brauchst du das nicht ! Die Filter sollten auf jedem Win32
System mit installiertem DirectX/DirectShow (auch die Alten, wenn ich
mich recht entsinne muesste DX5 genuegen)
lauffaehig sein, d.h. (Win95, 98, NT4, 2k, Me, XP).

Probier es doch einfach einmal aus !

- Bernd
msonic
Neugieriger
Neugieriger
Beiträge: 9
Registriert: Freitag 3. Mai 2002, 03:35

Beitrag von msonic »

grrr, nun hatte ich Dir so eine schoene Antwort geschrieben und bei "Absenden" hatte er den login wieder vergessen und alles war wech :-(

in der kuerze: geht unter NT4 nicht.
Prinzipiell gehts, jedoch kann ich keinen Graphen erstellen, da die Filter sich nicht verbinden lassen (MPEG stuff von Ligos).
TRex laesst sich nicht unter NT installieren, daher muesste ich wohl die Filter manuell kopieren und installieren.

gruss
Matthias
BSE
Einsteiger
Einsteiger
Beiträge: 253
Registriert: Sonntag 28. April 2002, 10:49

Beitrag von BSE »

msonic hat geschrieben:TRex laesst sich nicht unter NT installieren, daher muesste ich wohl die Filter manuell kopieren und installieren.
Ooops, da meint es der Installer wohl zu gut ... und will dich vor
vermeintlich Schlimmem bewahren.

Ok, in diesem Falle installiere doch bitte auf einem gefuegigerem System
und kopier und registrier die Filter anschliessend unter NT4.
Wohin sollte (COM sei Dank) eigentlich egal sein.
Falls bei der Registrierung etwas fehlschlagen sollte, melde dich nochmal.

- Bernd
msonic
Neugieriger
Neugieriger
Beiträge: 9
Registriert: Freitag 3. Mai 2002, 03:35

Beitrag von msonic »

schon geschehen ;-)

Den Graphen kann ich nun zwar zusammenstellen, aber beim Versuch zu rendern kommt leider nur "unbekannter Fehler: ret 0x80004005"

Ich habe nur die Filter registriert, die ich brauche. Koennte natuerlich sein, das ihm noch irgenwas fehlt :-(

bye
matthias
aladalpe
Interessierter
Interessierter
Beiträge: 60
Registriert: Mittwoch 22. August 2001, 00:00

Beitrag von aladalpe »

Hi BSE!
Ich finde deine Idee und deine Mühe SUPERGENIAL!!!
Habe gestern deine Filter ausprobiert!
Also das rendern im Clipmode von Video (divx und so) und Audio (mp3 und so) hat super geklappt!
Leider kam ich beim Capturen irgendwie nicht weit! Das hat immer abgebrochen ohne überhaupt ein Bild zu zeigen!
Ich habe Win98SE und TREX instlliert und die Filter auch so verbunden wie in deiner Beispiel gif angezeigt war! Leider ohne erfolg! :(

Vielleicht wird's noch, aber wie gesagt die Idee finde ich super-Geil!!

Was ich mir wünschen würde (falss überhaupt möglich) ist das bei cropped divx-filme das bild zentriert würde und der Rest mit schwarzen balken gefüllt wäre! (momentan zeigt es mir das bild bei solchen filmen oben links und der rest ist grün gefüllt)

Aber weiter so!! LOB! ;)))
BSE
Einsteiger
Einsteiger
Beiträge: 253
Registriert: Sonntag 28. April 2002, 10:49

Beitrag von BSE »

Was ich bisher vergass zu sagen:

1.) Die box muss auf einen dekodierbaren(!) Channel getuned sein
(Entweder manuell, oder per Browser) damit der capture graph
funktionieren kannn. Danach Graph wie im gif dargestellt aufbauen
und mit Rechtsklick auf das Capture-Filter Settings einstellen (IP Adresse).

2.) Fuer den RenderPfad muss die Box nicht im Main mode
gebootet werden (sofern Properties am Renderer richtig sind (GTX/ENX)
und der im Code hartverdrahtete Pfad zu den modulen noch stimmt
z.Z /lib/modules/2.4.2/misc :-) , vielleicht geht das irgendwann auch
automatisch ...)
Vom "Clipmode" gibt es z.Z. jedoch kein zurueck in den "View/Capture"
Modus. Dafuer ist ein Neustart erforderlich.

Generell gilt: Falls Capture und Clipmode mit Wingrab funktionieren,
sollten auch die Filter laufen. Falls ihr also Probleme habt, ist es
eine gute Idee ersteinmal die Grundfunktionalitaet mit
Wingrab zu verifizieren. Falls auch Wingrab bei euch scheitert bitte
hier im WinGrab-Forum nach Fehlerursachen und Loesungsmoeglichkeiten
suchen. Erst wenn damit alles ok ist weiter am Filtergraph basteln.
Was ich mir wünschen würde (falss überhaupt möglich) ist das bei
cropped divx-filme das bild zentriert würde und der Rest mit schwarzen
balken gefüllt wäre!
Ja, ein Crop/Letterbox-Filter sowie ein SCHNELLER Scaler fehlen der
bisherigen Architektur. Ein Crop/Letterbox-Filter ist nicht das grosse
Problem, ein Echtzeitfaehiger Scaler ist jedoch von ganz anderem
Kaliber. Wer etwas als Source auftreiben kann, bitte eine Mail an
mich (die Filterhuelle sollte dann kein Problem sein)

- Bernd
BSE
Einsteiger
Einsteiger
Beiträge: 253
Registriert: Sonntag 28. April 2002, 10:49

Beitrag von BSE »

aladalpe hat geschrieben:Leider kam ich beim Capturen irgendwie nicht weit! Das hat immer abgebrochen ohne überhaupt ein Bild zu zeigen!
Verflixt, ich habe heute mal die aktuelle yadd vom 04.05 getestet
und komme zum gleichen Ergebnis !
Es hat wohl den (ersten) Anschein als ob keinerlei Videodaten geliefert
werden. Das erkennt das Filter und bricht den CaptureVorgang sofort
wieder ab.
Bisher habe ich alle Tests erfolgreich mit einer schon recht betagten
Version vom 07.04 durchgefuehrt.

- Bernd
msonic
Neugieriger
Neugieriger
Beiträge: 9
Registriert: Freitag 3. Mai 2002, 03:35

Beitrag von msonic »

yupp,
hab es eben auch mal getestet. Es kommen nur Daten, wenn playback vorher gestoppt wird :-(

gruss
msonic
BSE
Einsteiger
Einsteiger
Beiträge: 253
Registriert: Sonntag 28. April 2002, 10:49

Beitrag von BSE »

Ok, hier also der Link auf die aktuelle Version der
DirectShow Filter fuer die DBox.

http://transputer.dyn.escape.de/src/dboxII/

dboxII_0_2.zip ist der letzte Stand der Dinge.
Im bin Verzeichnis sind noch zwei binaries deren Sinn
sich nach Lesen der ReadMe es auch erschliessen sollte ...

Hauptsaechlich wurden einige Fehler beseitigt.

- Bernd