Laden...

Wäre ein Video-Codec mit C# möglich?

Erstellt von Chickenlord vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.502 Views
C
Chickenlord Themenstarter:in
114 Beiträge seit 2008
vor 15 Jahren
Wäre ein Video-Codec mit C# möglich?

Ja, ist nur ne theoretische Frage, da ich mich grade sehr intensic mit Bildkompression beschäftige und die Videokompression da nicht weit entfernt liegt. Also wäre es wohl möglich mit C# einen ganz normalen Video-Codec zu machen? Ich kenn mich mit dem Aufbau von Codecs leider nicht so aus und hab auch schon gegoogelt um mehr zu erfahren, aber wirklich was rausgefunden hab ich nicht. Nur zur Theorie der Kompressionsverfahren. Deshalb dachte ich mir, hier sind ja viele schlaue Köpfe unterwegs, mindestens einer weiß bestimmt was.

Wer übrigens zu der Kompressionstheorie mal was schönes zum lesen haben will: http://www.cs.cf.ac.uk/Dave/Multimedia/node200.html
Ist teilweise kurz gehalten, aber gibt n ganz netten Überblick.

„Heute back ich, morgen brau ich,
übermorgen cast ich die Königin nach int;
ach, wie gut dass niemand weiß,
dass ich Rumpelstilzchen heiß!“

"Bei Stylefragen sollteste nen Mac-User oder ne Frau fragen."

1.130 Beiträge seit 2007
vor 15 Jahren

Ein problem wird sein, dass der Garbagecollector regelmäßig dazwischenfunkt und die Ausführung ca. für die Zeit anhält, in der normalerweise 1 Frame angezeigt wird.
Außerdem müsste man viel mit invoke/unsafe machen, um die Performance hinzubekommen.
C# ist generell ein paar % langamer als c++

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

C
Chickenlord Themenstarter:in
114 Beiträge seit 2008
vor 15 Jahren

Davon gehe ich mal aus, dass man ordentlich "pfuschen" müsste, um die geschwindigkeit hinzubekommen. Das hab ich schon bei son paar tests gemerkt. Aber sonst müsste es doch, theoretisch, machbar sein oder nicht? Und weiß jemand zufällig, wo es ein "Blatt" über den Aufbau eines Codecs gibt? Ich mein, die werden doch wohl nich über den standard I/O laufen oder? Wie gesagt, ich hab keine Ahung vopn dem Aufbau...

EDIT: Was mir noch zur Geschwindigkeit einfiel grade. Immerhin haben ja zwei Leute hier ausm Forum schon Möglichkeiten gefunden, die Bitmap bearbeitung auf fast C++ Niveau zu bekommen. Somit sollte das auch bei Videos Möglich sein.
Und noch ne frage: Gibt es in C# Irgendeine Klasse, um Videos im Avi-Format zu laden?

„Heute back ich, morgen brau ich,
übermorgen cast ich die Königin nach int;
ach, wie gut dass niemand weiß,
dass ich Rumpelstilzchen heiß!“

"Bei Stylefragen sollteste nen Mac-User oder ne Frau fragen."

Gelöschter Account
vor 15 Jahren

Und noch ne frage: Gibt es in C# Irgendeine Klasse, um Videos im Avi-Format zu laden?

in .net 3.5 unter WPF gibt es ein control, das das kann. such mal im forum.

prinzipiell kannst du das decodieren von den grafikkartenshadern übernehmen lassen. im prinzip ist decodieren nichts anderes als einen stream zu lesen und immer stückchenweise (blockweise) zu dekomprimieren. dafür kann man die shadereinheiten der graka misbrauchen und hat dann keine probleme mehr mit performance (außer auf veralteten grafikkarten.. sowas wie z.b. die gforce fx 5200 oder noch älteres gelumpe). nachteil ist, das du dann 2 implementierungen benötigst. eine für gforce und eine für ATI, da die bibliotheken für die grafikkarten-API nich kompatibel sind 😃

rein cpu-lasig ist das prinzip nicht anders. du machst einen stream auf eine file (die videodatei) auf und ließt header zum initialisieren aus und dann gehts blockweise in einen bestimmten algorithmus. je nach format schwankt die komplexität zwischen "kapier ich irgendwie nicht" und "what the fuck..."

C
980 Beiträge seit 2003
vor 15 Jahren

Ein Beispiels eines managed codec findest du hier (2, 3). Es wird allerdings nicht irgend ein avi Film decodiert, sondern die Video-Stream Ausgabe eines C64 Emulators generiert (als Video Codec). Ist allerdings Silverlight 3, auf Basis der MediaStreamSource Klasse ...

C
Chickenlord Themenstarter:in
114 Beiträge seit 2008
vor 15 Jahren

Yo also danke auf jedenfall für eure Antworten. Allerdings gings mir jetzt halt weniger um Speed oder sowas. Ein VErsuch meinerseits läuft auch schon, da ich atm sowieso an einer Picture Compression Library arbeite. Dabei ist mein Ziel, falls es wen interessiert, mir die Methoden selber zu überlegen oder mich im Notfall bei vorhandenen Dingen zu inspirieren. Das klappt bis jetzt auch ganz gut. Momentan krieg ich maximal ne Kompressionsrate von ca. 20:1 im Vergleich zum Raw-Bitmap hin, was Einzelbilder angeht. Das ganze natürlich möglichst ohne deutlich sichtbare Verluste. Ich werd zumindest die Pic Compression Library möglichst schnell versuchen fertig zu stellen. Momentan liegt mein Hauptproblem allerdings tatsächlich in der Geschwindigkeit. Bitmaps sind zu langsam und auch FastBitmaps sind nicht schnell genug. Also kämpfe ich momentan damit, mir das ganze als stumpfes ByteArray zu holen.
Falls mir also noch jemand n Link dazu geben kann, wie der I/O bei nem Codec funzt, also was ich reinkriege, wie der Codec überhaupt angesprochen und initialisiert wird und was er wieder ausspucken soll, dann imme rher damit. Denn sowas hab ich leider noch nicht gefunden.

Greetz, der Chicken

„Heute back ich, morgen brau ich,
übermorgen cast ich die Königin nach int;
ach, wie gut dass niemand weiß,
dass ich Rumpelstilzchen heiß!“

"Bei Stylefragen sollteste nen Mac-User oder ne Frau fragen."