AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Acinerella [Ver. 1.4] FFMpeg Wrapper
Thema durchsuchen
Ansicht
Themen-Optionen

Acinerella [Ver. 1.4] FFMpeg Wrapper

Ein Thema von igel457 · begonnen am 18. Jul 2008 · letzter Beitrag vom 23. Jan 2016
Antwort Antwort
Seite 4 von 4   « Erste     234   
Benutzerbild von igel457
igel457
Registriert seit: 31. Aug 2005
http://acinerella.sourceforge.net/img/acin_logo.jpg

Ü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:
  • Audioformate:
    • MP3
    • OGG
    • WAV, AIFF
    • WMA
    • AC3
    • FLAC
  • Videoformate:
    • MPEG2 (Als MPEG PS (*.mpg, *.vob) oder TS (z.b. *.ts))
    • H.246
    • AVI
    • WMV
    • MOV
    • FLV
    • OGG
    • Bink&Smacker

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:
http://acinerella.sourceforge.net/

Changelog:

Version 1.4
Proben und Scoringsystem hinzugefügt
Internes und verbuggtes Protokol-System entfernt und ersetzt
Compiliert mit brandneuer ffmpeg-revision (vom 22. Mai 2010)
Makefile verbessert
Probleme mit dem Delphi-Memorymanager und Linux aufgelöst

Version 1.3
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

Version 1.2
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 (statisch oder dynamisch mit FFMpeg gelinkt)
Fehler in ac_free_decoder behoben
Delphi 2009 kompatibilität des Headers.

Version 1.1
Bug behoben, durch den Acinerella nach dem sequentiellen laden von einigen Dateien (3-10) mit einer AV abstürzt
Bug behoben, durch den Acinerella spätestens nach dem sequentiellen laden von 26 Dateien nicht mehr funktioniert
Der Header sollte nun auch mit Delphi 2009 laufen (siehe hier)
Die mitgelieferte test.c lief nur mit Cygwin, nicht wenn sie mit MinGW kompiliert wurde. Das ist jetzt auch behoben.
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)
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
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:
http://downloads.sourceforge.net/aci...se_mirror=osdn (1.9 MB, TAR.BZ2)

Viel Spaß damit,
Andreas
Miniaturansicht angehängter Grafiken
demo_iteration_152.png  
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein

Geändert von igel457 (11. Jan 2011 um 16:03 Uhr)
 
mimi

 
FreePascal / Lazarus
 
#31
  Alt 9. Jan 2011, 18:45
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.
Michael Springwald
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

 
FreePascal / Lazarus
 
#32
  Alt 9. Jan 2011, 23:22
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
Andreas
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#33
  Alt 10. Jan 2011, 13:31
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.
Michael Springwald
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

 
FreePascal / Lazarus
 
#34
  Alt 11. Jan 2011, 16:01
das Beispielprogramm erzeugt aber eine Datei "out.wav", die du dir mit einem anderen Player anhören kannst.
Andreas
  Mit Zitat antworten Zitat
Peter666
 
#35
  Alt 21. Jan 2016, 11:21
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

Geändert von Peter666 (21. Jan 2016 um 11:24 Uhr)
  Mit Zitat antworten Zitat
CHackbart
 
#36
  Alt 23. Jan 2016, 22:49
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 http://flashavconverter.com gekauft und regelmäßig angepasst. Der Autor aktualisiert in regelmäßigen Abständen die Header-Dateien. Leider nicht so häufig wie man das selber gerne hätte und dementsprechend musste ich irgendwann selber Hand anlegen.

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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz