19. April 2010

Kaum bekannte Datenbankfeatures: Video-Metadaten auslesen ...

English title: What you might did not know about your database: Read Video Properties

Heute habe ich ein weiteres Feature aus der Reihe Kaum bekannte Features der Oracle-Datenbank. Wusstet Ihr schon, dass Ihr auch videospezifische Metadaten aus einem BLOB lesen könnt ...?
Did you know that the Oracle database can read metadata from a video file (which is present as a BLOB) ...?
Alles, was Ihr braucht, ist das Video als BLOB - es kann sich also als ein solcher in einer Tabelle befinden oder als BFILE im Dateisystem; es muss lediglich als BLOB erreichbar sein. Für den Zugriff auf das Dateisystem benötigt Ihr allerdings noch ein DIRECTORY-Objekt. Und der Code zum Auslesen der Properties sähe dann so aus (dieses Beispiel liest das Video per BFILE aus dem Dateisystem) ...
The BLOB can either reside in a database table or in the filesystem - use a directory object and the BFILENAME function in the latter case. The code to read the properties might then look as follows (this example reads the video file from the filesystem) ...
declare
  l_ctx        raw(32767) := null;
  l_attributes clob;
  l_mimetype   varchar2(32767);
  l_format     varchar2(32767);
  l_width      number;
  l_height     number;
  l_frameres   number;
  l_framerate  number;
  l_videodur   number;
  l_numframes  number;
  l_comptype   varchar2(32767);
  l_numcolors  number;
  l_bitrate    number;

  l_video      bfile;
begin
  l_video := bfilename('{Directory-Objekt}', ' {Video-Filename}');
  dbms_lob.createtemporary(l_attributes, true, dbms_lob.call);
  ordvideo.getproperties(
    ctx             => l_ctx,
    videobfile      => l_video,
    attributes      => l_attributes,
    mimetype        => l_mimetype,
    format          => l_format,
    width           => l_width,
    height          => l_height,
    frameresolution => l_frameres,
    framerate       => l_framerate,
    videoduration   => l_videodur,
    numberofframes  => l_numframes,
    compressiontype => l_comptype,
    numberofcolors  => l_numcolors,
    bitrate         => l_bitrate
  );
  dbms_output.put_line('MIMETYPE:         '||l_mimetype);
  dbms_output.put_line('FORMAT:           '||l_format);
  dbms_output.put_line('WIDTH:            '||l_width);
  dbms_output.put_line('HEIGHT:           '||l_height);
  dbms_output.put_line('FRAME RESOLTION:  '||l_frameres);
  dbms_output.put_line('VIDEO DURATION:   '||l_videodur);
  dbms_output.put_line('NUMBER OF FRAMES: '||l_numframes);
  dbms_output.put_line('COMPRESSION TYPE: '||l_comptype);
  dbms_output.put_line('NUMBER OF COLORS: '||l_numcolors );
  dbms_output.put_line('BITRATE:          '||l_bitrate);
end;
/
Die Funktion selbst befindet sich im Datentypen ORDVIDEO - dieser hat eine Methode GETPROPERTIES, welche die Metadaten ausliest. Leider werden bei weitem nicht alle gängigen Videoformate unterstützt - so war ich mit mp4-Dateien erfolgreich, während WMV-Dateien nicht funktionierten. Out-Of-The-Box unterstützt Oracle halt nur eine eingeschränkte Anzahl an Videoformaten. Was der ORDVIDEO-Typ noch alles kann, erfahrt Ihr im Oracle-Handbuch; darin finden sich auch ein paar (wenn auch sehr rudimentäre) Abschnitte, wie man die Funktionalität erweitern kann.
The functionality is part of the ORDVIDEO type. Its method GETPROPERTIES reads various metadata attributes in PL/SQL variables. Unfortunately it has only limited support for common video formats. I was successful with MP4 files whereas Windows Media files (WMV) threw an error message. The Oracle documentation contains more information about ORDVIDEO and also some hints how to extend the functionality.

Kommentare:

Anonym hat gesagt…

Notwendigkeit zu uberprufen:)

Carsten Czarski hat gesagt…

was ist schon wirklich notwendig? Die Menscheheit hat es hunderttausende von Jahren komplett ohne IT geschafft ...

:)

Grüße

-Carsten

Beliebte Postings