AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte FVF (Multimediaformat)
Thema durchsuchen
Ansicht
Themen-Optionen

FVF (Multimediaformat)

Ein Thema von FAlter · begonnen am 11. Apr 2007 · letzter Beitrag vom 9. Jul 2017
 
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.095 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

FVF (Multimediaformat)

  Alt 11. Apr 2007, 19:06
Hi,

ganz früher mal habe ich ein paar Bilddateien, einen Sound dazu und ein paar Infos in einer ini genommen, alles eine Datei gepackt und das ein Videoformat genannt.

Nun hat mir das aber irgendwann nicht mehr gefallen, und so habe ich kurzerhand etwas neues draus gemacht. Dieses neue Format möchte ich euch hier vorstellen.

Unten findet ihr die Units meines aktuellen FVF-SDK, sowie Beispiele für einen Player und (NEU) einen Encoder (unterstützt bisher nur Video, kein Audio). Erstellt euch ein Package und tut mindestens die FVFPlayer.pas rein, diese Komponente könnt ihr aufs Form ziehen und nutzen. Oder ihr erstellt die Komponente im OnCreate... Siehe dazu die Beispiele, diese nutzen keine Packages (ihr müsst ggf. die Suchpfade in den Projekteinstellungen anpassen, die Struktur im Archiv entspricht nicht der Struktur in meiner Ablage).

Unterstützte Formate:
  • Video
    • (NEU) BGR8[R/B/M] (Farbreduktion 8 Bit mit Schwerpunkt auf rot/blau/gemischt)
    • (NEU) BGR8[R/B/M]I (Farbreduktion 8-Bit + Interlaced)
    • BGR16 (Farbreduktion 16-Bit)
    • BGR16I (Farbreduktion 16-Bit + Interlaced)
    • BGR24 (Unkomprimiert)
    • BGR24I (Interlaced)
    • MJPEG (JPEG-Bilder; auch Interlaced)
    • NONE (Dummy)
  • Audio
    • FMK (Audiodaten entsprechen FMK-Format)
    • NONE (Dummy)

Zum Aufbau des Dateiformats:

Zuerst kommt folgender Header:
Delphi-Quellcode:
  TFVFHeader = packed record
    FVFSignatur: array[0..2] of Char; //Da steht 'FVF' drin
    MajorVersion: Byte; //0
    MinorVersion: Word; //2 (1 unterstützt nur Dateien bis 4GB, s.u.)
    Width: Word;
    Height: Word;
    FrameTime: Word; //ms pro Frame
  end;
Dann kommen zwei nullterminierte Ansi-Strings, z. B.
Code:
'NONE'#0 +
'NONE'#0
Diese geben das verwendete Video- (erstes) und Audioformat an. Im Beispiel sind es die Dummys, welche verwendet werden, um z. B. Videos ohne Audiospur oder Musik ohne Video zu speichern. Leider gibt es momentan noch keine Audiocodecs (außer dem Dummy-Codec)...

Darauf folgen nochmal zwei Int64 (bei Dateiversion 0.1 LongWord/32-Bit), z. B.
Code:
0 4
Diese geben die Größe der Video- und Audiodaten an. Dann folgen die eigentlichen Daten.

Der Audio-Dummy benötigt noch die Zeit, wie lange das (eventuelle) Video ohne Audio gehen soll, da diese noch nirgends gespeichert wurde. Normalerweise kann das nämlich aus den Audiodaten - falls benötigt - ermittelt werden. Daher haben wir hier 4 Bytes dafür reserviert. Dies könnte folgendes DWord sein:

Code:
1000
Im Beispiel haben wir also eine leere, eine Sekunde dauernde, Stille erzeugt. Nach den Audiodaten kann theoretisch alles mögliche stehen, das wird nicht mehr verarbeitet. Es wäre z. B. denkbar, wie auch bei MP3s, am Ende Tags anzuhängen (mit den ID3v1-Dags ist es somit kompatibel).

Mfg
FAlter
Angehängte Dateien
Dateityp: 7z binaries.7z (451,2 KB, 7x aufgerufen)
Dateityp: 7z sources.7z (324,0 KB, 12x aufgerufen)
Felix Alter
Japanurlaub 2015

Geändert von FAlter ( 9. Jul 2017 um 10:16 Uhr)
  Mit Zitat antworten Zitat
 


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 02:21 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