![]() |
Acinerella [Ver. 1.4] FFMpeg Wrapper
Liste der Anhänge anzeigen (Anzahl: 1)
![]() Über: Acinerella ist ein in C geschriebener Wrapper für die Dekodierfähigkeiten der FFMpeg Bibliotheken libavformat und libavcodec. Acinerella exportiert gerade mal 10 API-Funktionen - daher ist es sehr einfach die Headerdatei zu übersetzen und Acinerella mit anderen Programmiersprachen (zum Beispiel Pascal) zu verwenden. Würde man FFMpeg direkt verwenden wollen, so muss man drei 1000 Zeilen lange Header übertragen. Zwar gibt es eine Pascal Version dafür, doch diese ist nicht Up-To-Date und dazu höchst wahrscheinlich Fehlerhaft. Acinerella ist einfach zu verwenden. Somit ist die größte Hürde auf dem Weg zum eigenen Video- und Audioplayer - das dekodieren der Daten - genommen. Die Datenströme werden direkt aus dem Speicher geladen, wodurch sich größtmögliche Freiheit bei der Entwicklung ergibt. Alle FFMpeg Bibliotheken sind statisch mit Acinerella verbunden, wodurch sich eine einzelne, 2 MB große, DLL ergibt. Einige unterstützte Formate:
Wichtig: Die Bibliothek ist unter der GPL veröffentlicht! Also wer damit geschriebene Programme veröffentlicht, muss (entsprechend der Lizenz) den Sourcecode davon ebenfalls offen legen. Mehr Infos (oder auch nicht): Auf der Acinerella Website: ![]() Changelog: Version 1.4 :arrow: Proben und Scoringsystem hinzugefügt :arrow: Internes und verbuggtes Protokol-System entfernt und ersetzt :arrow: Compiliert mit brandneuer ffmpeg-revision (vom 22. Mai 2010) :arrow: Makefile verbessert :arrow: Probleme mit dem Delphi-Memorymanager und Linux aufgelöst Version 1.3 :arrow: Medieninformationen (Autor, Titel, Album, Länge, etc.) hinzugefügt :arrow: Zeitsprungunterstützung hinzugefügt (ac_seek Funktion) :arrow: Umgehung für springende Zeitstempel hinzugefügt (wie dies zum Beisipel bei OGG-Dateien der Fall war) :arrow: Fehler in der Erzeugungsfunktion für einzigartige Protokollnamen behoben Version 1.2 :arrow: Compiliert mit FFMpeg 0.5 :arrow: Neue Dateitypen: WMV, WMA, besserer Support für OGG-Theora, FLV :arrow: "Streamseek" Callbackfunktion hinzugefügt (nicht für das aktive Suchen im Stream(!)) :arrow: Läuft ohne Probleme unter Linux (statisch oder dynamisch mit FFMpeg gelinkt) :arrow: Fehler in ac_free_decoder behoben :arrow: Delphi 2009 kompatibilität des Headers. Version 1.1 :arrow: Bug behoben, durch den Acinerella nach dem sequentiellen laden von einigen Dateien (3-10) mit einer AV abstürzt :arrow: Bug behoben, durch den Acinerella spätestens nach dem sequentiellen laden von 26 Dateien nicht mehr funktioniert :arrow: Der Header sollte nun auch mit Delphi 2009 laufen (siehe ![]() :arrow: Die mitgelieferte test.c lief nur mit Cygwin, nicht wenn sie mit MinGW kompiliert wurde. Das ist jetzt auch behoben. :arrow: Nach wie vor können maximal nur 26 Dateien gleichzeitig geöffnet sein. Wer will kann diese Beschränkung beheben (acinerella.c->unique_protocol_name) :arrow: Die mitgelieferte DLL ist nun um ca. 1MB kleiner, was sich u.u. jedoch auf die Performance auswirken kann. Wer will kann sich seine eigene Version kompilieren. Version 1.0 :arrow: Initiale Veröffentlichung Der Download: Im Anhang ist meine aktuelle Version der Bibliothek, sowie der Pascal-Header und ein in Delphi geschriebenes Demo Programm (Exe im Ordner /bin, Quellen im Ordner /header/pascal/demo). Um das Programm zu verwenden, einfach im Explorer die zu öffnende Videodatei per Ziehen und Ablegen auf das Exe-Symbol ziehen. Wird eine Videospur gefunden, so wird diese in einem Fenster (über die GDI, sieht daher mies aus) wiedergegeben. Die erste Audiospur wird in eine Datei "out.wav" im Arbeitsverzeichnis ausgegeben. Die Bibliothek kann hier heruntergeladen werden: ![]() Viel Spaß damit, Andreas |
Re: Acinerella FFMpeg Wrapper
Hallo, ich habe die Demo kurz mit einem MPEG2 PS mit M2V und MP2 und einer VOB mit M2V und AC3 ausprobiert. Das Bild ist in Ordnung so lange es nicht verkleinert wird und das Audio wird korrekt gespeichert. :thumb:
|
Re: Acinerella FFMpeg Wrapper
Das Bild ist komplett in Ordnung. Es muss bloß mit OpenGL oder DirectX gezeichnet werden, da sonst die Geschwindigkeit von der Fenstergröße abhängt. Das ist also kein Fehler in Acinerella.
|
Re: Acinerella FFMpeg Wrapper
Zitat:
|
Re: Acinerella FFMpeg Wrapper
Hi, super Projekt, ich hoffe es wird noch weiterentwickelt ;)
Ich habe da aber ein Problem: Wenn ich den Quellcode kompilieren will bekomme ich folgende Meldung:
Delphi-Quellcode:
Kommentiere ich die entsprechende Zeile aus dann funktioniert es ohne Probleme.
[Error] acinerella_demo.dpr(43): Undeclared identifier: 'ReportMemoryLeaksOnShutdown'
Habe ich da etwas falsch gemacht oder ist das eine Delphi Funktion die mein Delphi 7 nicht unterstützt? |
Re: Acinerella FFMpeg Wrapper
Sieht mir nach ner Funktion von FastMM aus... Wenn du das installierst und in das Projekt einbindest, sollte es gehen. Dürfte aber auch einfach mit Auskommentieren der Zeile funktionieren.
|
Re: Acinerella FFMpeg Wrapper
Hallo zusammen.
Zitat:
Zitat:
Delphi-Quellcode:
Bei mir BDS 2006.{Set this variable to true to report memory leaks on shutdown. This setting has no effect if this module is sharing a memory manager owned by another module.} ReportMemoryLeaksOnShutdown: Boolean; Gruss BlackDragon /EDIT: Jetzt hab ich glatt vergessen, igel noch mitzuteilen... HUT AB !!! :hello: :cheer: :thumb: Wie immer nur genialer Stuff aus deiner Ecke... :wink: |
Re: Acinerella FFMpeg Wrapper
Erstmal Danke für das Lob. Ich entwickle die Bibliothek immer dann weiter, wenn ich neue Features brauche - momentan läuft sie aber einigermaßen gut.
Diese "ReportMemoryLeaksOnShutdown" Zeile kann getrost weggelassen werden (ist nur um das Debugging zu erleichtern). Ohne die Zeile braucht man sich auch um auftretende Speicherlecks nicht mehr zu kümmern ;-) |
Re: Acinerella FFMpeg Wrapper
schade ! Unter Lazarus läuft es nicht wegen dem Scanline.
|
Re: Acinerella [Ver. 1.1] FFMpeg Wrapper
Hab mal eine neue Version hoch geladen:
Code:
@mimi Ist ja auch nur eine Demo - Acinerella selbst ist äußerst Programmunabhängig und läuft vermutlich selbst auf dem Gameboy
Version 1.1
:arrow: Bug behoben, durch den Acinerella nach dem sequentiellen laden von einigen Dateien (3-10) mit einer AV abstürzt :arrow: Bug behoben, durch den Acinerella spätestens nach dem sequentiellen laden von 26 Dateien nicht mehr funktioniert :arrow: Der Header sollte nun auch mit Delphi 2009 laufen (siehe [url=http://www.delphipraxis.net/internal_redirect.php?t=142393]hier[/url]) :arrow: Die mitgelieferte test.c lief nur mit Cygwin, nicht wenn sie mit MinGW kompiliert wurde. Das ist jetzt auch behoben. :arrow: Nach wie vor können maximal nur 26 Dateien gleichzeitig geöffnet sein. Wer will kann diese Beschränkung beheben (acinerella.c->unique_protocol_name) :arrow: Die mitgelieferte DLL ist nun um ca. 1MB kleiner, was sich u.u. jedoch auf die Performance auswirken kann. Wer will kann sich seine eigene Version kompilieren. PS: Außerdem ist Acinerella jetzt natürlich mit der allerneusten SVN-Version von FFMpeg ausgestattet. |
Re: Acinerella [Ver. 1.1] FFMpeg Wrapper
Ich bekomme keine acinerella.so erzeugen.
Ich bin in src verzeichnis gegangen und habe make aufgerufen von der Console. Er gibt Fehler: Zitat:
ich wollte erstmal eine Linux LIb erzeugen bevor ich deinen Player ausprobieren kann. |
Re: Acinerella [Ver. 1.1] FFMpeg Wrapper
Ändere mal folgendes:
Vorher
Code:
Nachher
#ifdef _WIN32
#define CALL_CONVT __cdecl #else #define CALL_CONVT __cdecl #endif
Code:
Allerdings ist das (leider) nicht das einzige Problem. Viele Linux-Distributionen vertreiben Versionen von FFMpeg, die die alte img_convert nicht mehr an Bord hat, bzw. diese nicht mehr exportieren. Abhilfe schafft hier entweder das manuelle Kompilieren der FFMpeg oder das Warten auf eine der nächsten Acinerella-Versionen, denn ich denke dass Andreas diese Funktion ersetzen wird.
#ifdef _WIN32
#define CALL_CONVT __cdecl #else #define CALL_CONVT #endif Solltest du einen Fehler beim Kompilieren der test.c erhalten, der besagt, dass O_BINARY nicht gefunden wurde, so musst du außerdem folgendes in die test.c einfügen:
Code:
Der "Fehler" rührt daher, dass es unter Linux eben keinen unterschied zwischen dem binären und "textuellen"(komisches Wort, nennt man das so?) Öffnen von Dateien gibt, unter Windows allerdings schon. Daher braucht man die Konstante unter Linux/Unix nicht und wird schlichtweg nicht definiert. Durch das Setzen auf 0 sollte es auch bei Oder-Verknüpfungen von diesen O_-Konstanten zu keinerlei Problemen kommen.
#ifndef WIN32
#define O_BINARY 0 #endif Viel Glück. |
Re: Acinerella [Ver. 1.1] FFMpeg Wrapper
jetzt bekomme ich folgende Fehler:
Zitat:
Zitat:
oder was genau meinst du damit ? |
Re: Acinerella [Ver. 1.1] FFMpeg Wrapper
Hi,
bis das läuft ist wohl noch mehr zu tun. Für die Warnungen musst du noch #include <string.h> hinzufügen, das ist ein kleiner Bug der aber in der aktuellen Version behoben sein sollte. Das mit der img_convert hatte ich ja bereits erwähnt, da bastelt Andreas dran. Das letzte Problem ist ein Problem der Makefile, bishher ist es offenbar noch nicht gelungen eine Plattformabhänge Kompilierung hinzubekommen. Wenn du dir die Makefile mal anschaust, wirst du feststellen das es zwei befehle gibt, einen für Linux, einen für Windows. Du musst nur den richtigen ausführen. Das heißt, ich glaube in der im Moment offiziellen Version gibt es das noch nicht. Ersetz mal das in der Makfeile angegebene durch folgendes: gcc -shared -o libacinerella.so acinerella.o -lavformat -lavcodec -lavutil -lm -lswscale Zitat:
|
Re: Acinerella [Ver. 1.1] FFMpeg Wrapper
Hallo,
es gibt eine neue Version von Acinerella: 1.2 Änderungen: + Compiliert mit FFMpeg 0.5 + Neue Dateitypen: WMV, WMA, besserer Support für OGG-Theora, FLV + "Streamseek" Callbackfunktion hinzugefügt (nicht für das aktive Suchen im Stream(!)) * Läuft ohne Probleme unter Linux * Fehler in ac_free_decoder behoben * Delphi 2009 kompatibilität des Headers. Download: ![]() Viel Spaß damit! EDIT: Wer sich vor 12:55 das Paket heruntergeladen hat, sollte dies nochmal tun - ich hatte vergessen die Makefile auszutauschen und in der Demo war noch ein Bug. |
Re: Acinerella [Ver. 1.3] FFMpeg Wrapper
Hallo,
ich habe eine neue Version von Acinerella hochgeladen. Acinerella 1.3 hat folgende Änderungen: + Medieninformationen (Autor, Titel, Album, Länge, etc.) hinzugefügt + Zeitsprungunterstützung hinzugefügt (ac_seek Funktion) + Umgehung für springende Zeitstempel hinzugefügt (wie dies zum Beisipel bei OGG-Dateien der Fall war) * Fehler in der Erzeugungsfunktion für einzigartige Protokollnamen behoben Viel Spaß damit, Andreas |
Re: Acinerella [Ver. 1.4] FFMpeg Wrapper
Hi,
nachdem ich in den letzten Monaten immer mal wieder ein bisschen an Acinerella gebastelt habe, möchte ich euch diese Änderungen nicht vorenthalten und habe ein neues Release zusammengeschustert: Folgende Änderungen: Version 1.4 :arrow: Proben- und Scoringsystem hinzugefügt :arrow: Internes und verbuggtes Protokol-System entfernt und ersetzt :arrow: Compiliert mit brandneuer ffmpeg-revision (vom 22. Mai 2010) :arrow: Makefile verbessert :arrow: Probleme mit dem externen Memorymanager unter Linux aufgelöst Den Download gibt es wie gewohnt im ersten Post oder zusammen mit mehr Informationen unter ![]() Viel Spaß damit, ich freue mich auf euer Feedback, Andreas |
Re: Acinerella [Ver. 1.4] FFMpeg Wrapper
Hallo,
erstmal vielen Dank für das Update (und natürlich für das gesamte Projekt). Ich habe 3 Fragen: 1.) Die Funktion "ac_decode_package" schreibt auf die Konsole (Fehlermeldungen), kann man das Abstellen / Umleiten? 2.) Die Funktionen "ac_open" und "ac_probe_input_buffer" gibt einen "PAc_proberesult" wert zurück, der nur als Pointer deklariert ist. Was verbirgt sich denn tatsächlich dahinter? 3.) Gibt es eine Möglichkeit die "Art" des Videobildes zu bestimmen? Bei MPEG2 interessieren mich eigendlich nur die "I"-Frames, bei MPEG-4 nur die "Reference Images". Vielen Dank! Gruß Ekkehard |
Re: Acinerella [Ver. 1.4] FFMpeg Wrapper
Hallo,
1.) Nein, nicht dass ich wüsste. Eventuell gibt es in FFMpeg eine entsprechende Funktion. Sobald kein Konsolenfenster da ist, wird aber auch nichts angezeigt und es gibt auch keine I/O Fehlermeldung. 2.) Dahinter verbirgt sich ein Pointer auf AVInputFormat. Falls du überprüfen möchtest, ob Acinerella eine bestimmte Datei öffnen kann, kannst du ein paar Bytes daraus mit "ac_probe_input_buffer" Testen. Damit beim Öffnen der Datei diese Überprüfung nicht erneut stattfinden muss, kannst du das "probe result" direkt an "ac_open" übergeben. 3.) Nein, das ist aktuell nicht möglich, sollte aber eigentlich relativ einfach einzubauen sein. Über jede Mithilfe und jeden Patch freue ich mich. Hoffe, dir geholfen zu haben, Andreas |
Re: Acinerella [Ver. 1.4] FFMpeg Wrapper
Danke für die Antworten.
zu 3.) Wenn etwas bei meiner Arbeit "abfällt" bin ich gerne bereit das wieder zu Verfügung zu stellen. Allerdings müsste dazu ja die DLL neu kompiliert werden - aber wie geht das (welcher Compiler etc.)? Gruß Ekkehard |
Re: Acinerella [Ver. 1.4] FFMpeg Wrapper
Zitat:
Eine Anleitung eine entsprechende Buildumgebung zu schaffen (welche ganz genau Schritt für Schritt befolgt werden muss) findet sich hier: ![]() |
Re: Acinerella [Ver. 1.4] FFMpeg Wrapper
Ok, das sieht - für mich als Delphi verwöhnten - *sehr* kompliziert aus. Mit Linux kenne ich mich ein wenig aus (ls, cd & co.). Mein enger Zeitrahmen wird aber verhindern das ich mich da durchwühle.
Danke trotzdem! |
Re: Acinerella [Ver. 1.4] FFMpeg Wrapper
Was die "Key Frames" (oder Intra-Frames) angeht habe ich etwas gefunden.
Die function ac_read_package liefert einen Zeiger zurück, der mehr enthält als die Deklaration TAc_Package hergibt. Ich habe wie folgt deklariert
Delphi-Quellcode:
Dann kann das Ergebnis mittels typecast wie folgt verwendet werdenconst AV_PKT_FLAG_KEY = $0001; type PAVPacket = ^TAVPacket; TAVPacket = packed record {56} pts: int64; ///< presentation time stamp in time_base units dts: int64; ///< decompression time stamp in time_base units data: PByte; size: integer; stream_index: integer; flags: integer; duration: integer; ///< presentation duration in time_base units (0 if not available) destruct: procedure (p: PAVPacket); priv: pointer; pos: int64; ///< byte position in stream, -1 if unknown end; PAc_package_Overload = ^TAc_package_Overload; TAc_package_Overload = packed record {The stream the package belongs to.} stream_index: integer; _offset1 : integer; AVPacket: TAVPacket; end;
Delphi-Quellcode:
die Boolsche Variable "iskeyframe" wird True wenn ein Startbild decodiert wurde. Funktioniert bei meinem H.264 HD test strom fast (selten ist das erste Frame nur grau) immer.
pack := ac_read_package(inst);
... iskeyframe := ((PAc_package_Overload(pack)^.AVPacket.flags and AV_PKT_FLAG_KEY) <> 0); Gruß Ekkehard |
AW: Acinerella [Ver. 1.4] FFMpeg Wrapper
Hallo,
nach intensivem Testen glaube ich, dass die Bibliothek ein Speicherleck hat. Wird die Funktions ac_open zyklisch Aufgerufen sieht man im Taskmanager aber auch mit sysinternals Process Explorer das immer mehr Speicher genommen wird. Die Speicher wird nicht über die deklarierten Funktionen "malloc" "realloc" geholt. Ich glaube das Ganze Problem entsteht im "probe" Bereich. Irgendwelche Ideen? Gruß Ekkehard |
AW: Acinerella [Ver. 1.4] FFMpeg Wrapper
Hallo,
ich bastle gerade am Linux Support meiner Audio Bibliothek und bin in diesem Zuge außerdem dabei Acinerella dort ebenfalls mit allen Formaten zum laufen zu kriegen, weshalb ich nochmals einige Änderungen durchgeführt habe: Z.B. ist der externe Speichermanager vorerst rausgeflogen, weil hierdurch nicht der 16-Byte Align und Padding am Ende eingehalten wurde. Ich werde im Zuge meiner Änderungen valgrind's memcheck auf das Problem ansetzen und mitteilen ob mir irgendetwas aufgefallen ist. U.u. ist es ein Windows-Spezifisches Problem oder ein Problem mit dem verwendeten ffmpeg-checkout. Grüße, Andreas |
AW: Acinerella [Ver. 1.4] FFMpeg Wrapper
Hallo Zusammen,
zunächst einmal Vielen Dank für dieses geniale Projekt. Mit der Thematik selbst habe ich mich bislang noch nie beschäftigt und konnte Dank der schlanken übersichtlichen Bibliothek dennoch in kürzester Zeit ein Programm basteln, welches mir eine Thumbnail-Übersicht des gewählten Video-Clips erstellt. Es funktioniert prima, jedoch möchte ich im nächsten Schritt den ganzen Prozess beschleunigen, indem ich mich "springend" durch den Stream bewege. Dazu müsste ich die Funktion ac_seek() verwenden. <ZITAT> {Seeks to the given target position in the file. The seek funtion is not able to seek a single audio/video stream but seeks the whole file forward. The deocder parameter is only used as an timecode reference. The parameter "dir" specifies the seek direction: 0 for forward, -1 for backward. The target_pos paremeter is in milliseconds. Returns 1 if the functions succeded.} function ac_seek(pDecoder: PAc_decoder; dir: integer; target_pos: int64): integer; cdecl; external ac_dll; </ZITAT> Offen gestanden verstehe ich die Erklärung nicht. Bedeutet der Aufruf ac_seek(Ac_decoder, 0 , 1000 ) , dass ich mich um 1000ms vorwärts bewege ? Vielen Dank thomas |
AW: Acinerella [Ver. 1.4] FFMpeg Wrapper
Die Funktion arbeitet nur mit absoluten Werten (wäre er relativ hätte ich ihn vermutlich timecode_offs genannt). Der DIR Parameter wird von FFMpeg benötigt, da FFMpeg unter Umständen nicht weiß, wo sich der Stream aktuell befindet und somit wissen muss, ob es nun vorwärts oder rückwärts suchen soll.
Mit dem Kommentar am Anfang meine ich nur, dass nicht getrennt in Audio-/Video-Streams gesucht werden kann, sondern nur jeweils in einem einzelnen, obwohl man einen einzelnen Dekoder für einen Teilstream angibt. Zum Suchen wird jedoch der Timecode, der im angegebenen Teilstream steckt, verwendet. Ich hoffe, ich habe alle Klarheiten nun beseitigt ;-) |
AW: Acinerella [Ver. 1.4] FFMpeg Wrapper
Hallo Andreas,
vielen Dank für Deine schnelle Antwort. Stimmt - hätte ich mit etwas überlegen selbst herausfinden können. Das man im Audio- und Videostream nicht getrennt "navigieren" kann sehe ich für meinen Zweck nicht als Nachteil. Zusammegefasst bedeutet dies, dass ich beim Funktionsaufruf ac_seek(ACDecoder, 0 , 10000); an die Position 10 Sekunden ab Clipbeginn springe ??? Wenn ich das so probiere, liefert mir der folgende Aufruf ac_read_package(AC_instance) ein NIL zurück. (Der Clip ist natürlich länger als 10 Sekunden) Ich bitte um Nachsicht für meine Unbeholfenheit, aber wie schon gesagt das Thema ist absolut neu für mich.... Viele Grüße thomas |
AW: Acinerella [Ver. 1.4] FFMpeg Wrapper
Ja, die Annahme ist korrekt ;-) Nur wenn du bereits 10 Sekunden abgespielt hast, musst du -1 als zweiten Parameter übergeben.
Leider ist das springen in Videos eine kniffelige Angelegenheit und ob und wie gut es funktioniert hängt vor allem vom Containerformat ab - und auch FFMpeg ist leider nicht perfekt. Um das Springen im Video zu ermöglichen musst du auf jeden Fall eine "Seek"-Callback-Prozedur an die ac_open Routine übergeben. Beim Abspielen von Audio, wofür ich Acinerella persönlich am meisten einsetze funktioniert das Suchen jedoch meistens einwandfrei (außer für FLAC Dateien ohne OGG-Container). Andreas |
AW: Acinerella [Ver. 1.4] FFMpeg Wrapper
...dadurch dass ich nur die Keyframes weiter auswerte "rennt" das Programm recht schnell durch den Film und liefert mir die gewünschte Vorschau. Da die CPU ja zu 100% bezahlt ist, kann sie auch mal in der Mittagspause was tun und so komme ich auch ohne "Sprünge" zum Ziel.
nochmals Vielen Dank |
AW: Acinerella [Ver. 1.4] FFMpeg Wrapper
Ich habe Acinerella Erfolgreich unter Linux Kompilieren können und kann sie in Lazarus nutzen. Nur habe ich eine Frage:
Im ersten Beitrag von diesem Thread steht drin, dass man mit Acinerella ein Multiemdiaplayer schreiben könnte. Aber wie? Ich finde keine Passenden Funktion/Proceduren dafür. Das Demo Programm hilft mir auch nicht wirklich weiter. Denn, es spielt keine Datei wirklich ab, die ich hören könnte oder verstehe ich hier etwas Falsch? Ich dachte folgendes müsste gehen: Ich öffne eine Audio Datei und kann sie dann Abspielen und Anhören. |
AW: Acinerella [Ver. 1.4] FFMpeg Wrapper
Hi,
Acinerella kümmert sich um das Dekodieren von Audio- und Videoströmen. Es werden also sehr komplex komprimierte Daten in einfach zu verwendete Rohdaten "zurückverwandelt". Audiodaten in "PCM-Wave" und Videodaten in einfache "RGB-Bitmaps". Auf dem Weg zur Multimediawiedergabe ist dieser Schritt der schwierigste. Um die Daten wiederzugeben, müssen sie "nur noch" an eine entsprechende Ausgabebibliothek gestreamt werden - wenn man sich mit Threads und Pointern auskennt ist das auch kein Problem. Für alle anderen gibt es zum Beispiel Audorra mit welches unter Zuhilfenahme von Acinerella fast jedes existierende Audioformat Plattformübergreifend wiedergibt oder das Video-Modul von Andorra 2D. Hoffe das hilft dir, Andreas |
AW: Acinerella [Ver. 1.4] FFMpeg Wrapper
Sowas habe ich mir schon gedacht. Audorra läuft bei mir leider nicht. Warum weiß ich nicht. Ich habe den Fehler im Code gesucht und es wird eine Variable nicht Installisiert. Dazu in einem Extra Thread mehr(Zu gegebener Zeit)
Erstmal Danke für deine Antwort.Die Beschreibung hat mich etwas anders vermuten Lassen. Vielleicht könntest du sie noch mal Anpassen. Das Beispiel Programm z.b. Spielt leider auch keine Audio Dateien ab, ist das dafür überhaupt vorgesehen? Habe es mit OGG und MP3 Dateien versucht. es werden nur Informationen angezeigt. Mehr leider nicht. |
AW: Acinerella [Ver. 1.4] FFMpeg Wrapper
das Beispielprogramm erzeugt aber eine Datei "out.wav", die du dir mit einem anderen Player anhören kannst.
|
AW: Acinerella [Ver. 1.4] FFMpeg Wrapper
Ich weiß der Post ist ziemlich "alt", aber hat schon einmal jemand versucht Acinerella für iOS, OSX bzw. Android zu kompilieren? Ich glaube auch das sich die FFmpeg header mal wieder geändert haben. Ich hatte vor Jahren mal angefangen diese nach Delphi zu übersetzen, es dann aber nach einiger Zeit aufgegeben. Die ändern andauernd irgendwelche Funktionen, Structs und Bezeichner.
Ich hatte mir via git clone git://source.ffmpeg.org/ffmpeg.git die aktuelle Version geladen und wollte das ganze kompilieren. Mal abgesehen von den dutzenden illegal option Fehlern. Das makefile ist sicher nur für Linux ausgelegt :( Peter |
AW: Acinerella [Ver. 1.4] FFMpeg Wrapper
Das kenn ich nur allzu gut, FFMpeg ist ein tolles Projekt, aber der Code ist gewöhnungsbedürftig. Das wird sich denke ich auch niemals ändern, aber sobald man notgedrungen die Header übersetzt hat "versteht" man zumindest die Logik dahinter. Ich mag mich nicht anmaßen das ganze zu bewerten, aber ich würde es persönlich so nicht machen. Anyway, es ist halt so wie es ist.
Ich hab vor ein paar Jahren mal die FFMPEG Player Komponente von ![]() Meine persönliche Erkenntnis daraus ist: 1. Die in den DLL's exportierten Funktionen ändern sich eigentlich nie. Major-Updates entfernen Funktionen die als depreciated deklariert sind. 2. Die Anzahl der übersetzten Structs, sollten minimiert werden. Also alles was man nicht braucht, da reicht ein pointer. 3. AVCodecContext und AVFrame sind wichtig und da gilt der Hauptaugenmerk drauf. Im Prinzip werden bei Minor-Updates neue Variablen in den Structs fröhlich angehängt und andere Variablen als depreciated mit einem Compilerflag versehen. Ändert sich die Majorversion wird fröhlich gekürzt. Solange man wirklich nur das nutzt, was man braucht, dann ist das ganze übersichtlich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz