spacer
January 1, 2007: FLVMDI 2.94 and FLVMDIGUI 1.05 released!
FLVMDI now saves huge files faster, with /p switch outputs progress (which helps if you are getting an error) and some interface related bugs (like /v switch checking for existence of the folder though it was unnecessary) were fixed. FLVMDIGUI now supports the /v and /p switches. Also files (or folders) can now be dragged and dropped to the text fields.
 
October 2, 2006: FLVMDIGUI 1.04 released!
This minor update adds support for the '/l' switch (controls onLastSecond event injection). (Support for '/v' switch will be available in a future version).
 
August 24, 2006: FLVMDI 2.9 released!
After months of version 2.8 beta, we have released the new version as 2.9 to avoid confusion. /v switch extracts the current metadata from a FLV file as XML. Injection of onLastSecond event is now optional and controlled by the /l switch. Also two issues, both rarely encountered, have been fixed.
 
March 31, 2006: Adobe released SWF 8 specs which includes FLV specs
As soon as we find some free time, we will revise FLVMDI. UPDATE (April 13): It turns out FLVMDI 2.7 does not need any modification as a result of the released specs.
 
November 8, 2005: FLVMDI 2.7 released!
This version optionally adds keyframes object to metadata, which has video key frame time and file position arrays. Unlike the beta, release version also adds this info to the XML output.
 
November 2, 2005: FLVMDI 2.7 Beta available for download!
This version optionally adds keyframes object to metadata, which has video key frame time and file position arrays. You don't need it unless you need that specific info.
 
September 13, 2005: FLVMDI 2.5 and Flash 8 trial now available
FLVMDI 2.5 released. We will update this page later, because we are currently too busy. FLVMDI 2.5 supports new video codec and adds some data that Flash 8 video encoder adds...
 
June 22, 2005:
FLVMDI 2.0 released! - After two months of beta - and only one bug found and fixed! BTW, our FLV Captioning tool Captionate also has the ability to inject the same metadata as FLVMDI 2.0.
 
September 10, 2004:
FLVMDI GUI frontend version 1.00 released!
 
April 26, 2004: FLVMDI version 1.00 released!
 

What is FLV MetaData Injector?
FLV MetaData Injector (FLVMDI) is a Win32 console (command line) application that can add 'onMetaData' AMF data to FLV files. (There's also a GUI frontend FLVMDIGUI). FLVMDI optionally saves an XML version of the injected data, and can add an additional string data or save the onMetaData data to an XML file. FLVMDI has some unique functionality, but it's not as vital now because flashcom 1.5.2+ and Flash Video Exporter 1.2+ adds the required metadata. (Unfortunately there's still a gotcha with Sorenson Squeeze 4, also see Sorenson Squeeze (4.1) FLV Metadata upate...).
 
Flash 8 Video Encoder inserts the correct MetaData. Also Sorenson Squeeze 4.2 is released on Sept 20, 2005, hopefully they fixed the metadata issues.
 
FLVMDI is free to use, but you cannot distribute it or link directly to the download. FLVMDI is not exactly freeware, but only free to use and at your own risk that is. All rights other than granted here belong to Manitu Group.
 
Linking to this page is welcome. [www.buraks.com/flvmdi].
 
More Info
Current Status
Version 2.94. No known bugs. (Maximum FLV size FLVMDI can handle is around 700-750MB. We will get rid of this limitation with version 3, which will be using a brand new FLV library).
 
What info does the injected onMetaData event have?
We tried to have all the info that is added by Flash Video Exporter and Flash 8 Video Encoder and some more... The data is added at the start of the file with a timestamp of 00:00:00. If there's existing metadata, some standard (known) fields will be changed as stated below. If there is Flash 8 cue point information in the metadata, it will be preserved along with any non-standard values (Note that these values are not exported to the XML file). With version 2.9 and the /v switch, you can save the existing onMetaData data present as an XML file.
  • duration: (Number) Length of the FLV in seconds. FLVMDI computes this value.
  • lasttimestamp: (Number) TimeStamp of the last tag in the FLV file.

    (You may think as 'duration = lasttimestamp + estimated or calculated duration of the last tag'. This is not exactly true though; FLVMDI calculates/estimates duration for last Audio and Video tags separately and uses the appropriate value for the duration. With version 2.0, FLVMDI is more conservative and duration will be equal to lasttimestamp more than 1.x version).
     
    NetStream.Time will not return the duration, or the actual time as one might expect. It returns the position of the PlayHead which can only be a timestamp in the FLV file (see Position of the PlayHead). So, lasttimestamp value is useful for detecting the end of the FLV more than the duration value.
     
  • lastkeyframetimestamp: (Number) TimeStamp of the last video tag which is a key frame. This info might be needed because seeking a frame after this time usually does not work.
  • width: (Number) Width of the video in pixels. (Flash exporter 1.1 sets this to 0).
  • height: (Number) Height of the video in pixels. (Flash exporter 1.1 sets this to 0).
  • videodatarate: (Number) FLVMDI does not compute this value and imports it if present. (Defaults to 0).
  • audiodatarate: (Number) FLVMDI does not compute this value and imports it if present. (Defaults to 0).
  • framerate: (Number) FLVMDI computes this value, but uses imported value if not 0.
  • creationdate: (String) FLVMDI cannot compute this value and imports it if present. (Defaults to 'unknown').
  • filesize: (Number) Filesize in bytes (including the injected data).
  • videosize: (Number) Total size of video tags in the file in bytes.
  • audiosize: (Number) Total size of audio tags in the file in bytes.
  • datasize: (Number) Total size of data tags in the file in bytes.
  • metadatacreator: (String) Will be set to 'Manitu Group FLV MetaData Injector 2'.
  • metadatadate: (Date) Date and time metadata added. (Note that this is not of type string like 'creationdate').
  • xtradata: (string) Additional string data if specified.
  • videocodecid: (Number) Video codec ID number used in the FLV. (Sorenson H.263 =2, Screen Video =3, On2 VP6 = 4 and 5, Screen Video V2 = 6).
  • audiocodecid: (Number) Audio codec ID number used in the FLV. (Uncompressed = 0, ADPCM = 1, MP3 = 2, NellyMoser = 5 and 6).
  • audiodelay: (Number) Audio delay in seconds. Flash 8 encoder delays the video for better synch with audio (Audio and video does not start both at time 0, Video starts a bit later). This value is also important for Flash 8 Video Encoder injected Cue Points, because logical time of the cue points does not correspond to physical time they are inserted in the FLV. (Cue points are injected before encoding, when the video is shifted by 'audio delay' seconds, cue points are also shifted and their physical time in the FLV changes).
  • canSeekToEnd: (Boolean) True if the last video tag is a key frame and hence can be 'seek'ed.
  • keyframes: (Object) This object is added only if you specify the /k switch. 'keyframes' is known to FLVMDI and if /k switch is not specified, 'keyframes' object will be deleted.
    'keyframes' object has 2 arrays: 'filepositions' and 'times'. Both arrays have the same number of elements, which is equal to the number of key frames in the FLV. Values in times array are in 'seconds'. Each correspond to the timestamp of the n'th key frame. Values in filepositions array are in 'bytes'. Each correspond to the fileposition of the nth key frame video tag (which starts with byte tag type 9).
FLVMDI 2.x also optionally (with v2.9) injects onLastSecond event. It is inserted at 1 second minus the last timestamp value. You can add the event to NetStream just like onMetaData event. [Starting from v2.9, injection of onLastSecond event is optional and can be controlled by the /l switch. Earlier versions always injected this event].
 
How to use FLVMDI?
FLVMDI takes parameters from the commandline. Usage is:
 
flvmdi inFile [outFile] [/v] [/s] [/x] [/e] [/l] [/k] [/p]
 
inFile is the source file (or folder). If outFile parameter is not supplied, inFile will be overwritten, else the outFile path will be used for saving.
 
If inFile parameter is a folder, all FLV files in that folder will be processed (but not files in subfolders). If outFile parameter is specified when the inFile parameter is a folder, it must also be an existing folder, where output files will be written. (If you don't supply the full path for the parameters, Windows will use the current working directory when searching for the file(s)).
 
The result of the operation will be written to the console. If /s is present, then the resulting string will be a one digit return code (still a string). Also versions 1.3 and above will return exit codes matching the values below.
 
Result String Result as One Character Meaning
Completed. 0 Sucess
An error occured. [filename] 1 Some error occured while processing, no details available.
usage: flvmdi inFile [outFile] [/v] [/s] [/x] [/k] [/l] [/eExtraData] [/p] 2 Error with parameters supplied
directory does not exist : [outputFolder] 3 The folder specified cannot be found.

 
If /x switch is specified, an XML file with the data is also created at the same location as the FLV file, with the FLV file name but .XML extension (Flash 8 cue points info and any other imported non-standard values are not exported to the XML file).
 
You can specify a string which will be written as 'xtradata' with the /e switch (like /eHeresmydata). If the string has spaces you should specify the whole parameter in quotes like: "/eThis is data with spaces". Obviously, using "s in the string is not supported. This string is directly written into the FLV file without any further encoding.
 
If /k switch is specified, 'keyframes' object is added to the metadata. (Otherwise, any existing 'keyframes' object in the metadata will be deleted). Values in the keyframes object may be used for 'seeking' progressive downloaded FLV files using a serverside script. (See www.asvguy.com/2005/11/streaming_flash.html for some more information).
 
If /l switch is specified, FLVMDI also injects onLastSecond event. It is inserted at 1 second minus the last timestamp value. You can add the event to NetStream just like onMetaData event.
 
If /v switch is specified, all other switches are ignored and FLVMDI writes the onMetaData event data present as an XML file (using FLV name with XML extension). Original FLV file is not modified and no metadata is injected.
 
If /p switch is specified (v2.94 and above), FLVMDI outputs the progress, which may help if you are getting an error to find out at what stage it happens.
 
FLVMDI GUI frontend
FLVMDIGUI is a GUI frontend for FLVMDI. It uses (and so requires) FLVMDI.EXE, in the same folder for your convenience.
 
spacer

 
Version 1.05 has been only tested on Win XP, and hopefully will require no help. If you do not feel comfortable using the command line interface, then FLVMDIGUI is for you!
 
Downloads
FLVMDI 2.94 (flvmdi294exe.zip 228KB)
FLVMDIGUI 1.05 (flvmdigui105.zip 453KB)
 
Links
Creative COW Leader Lee Brimelow explains &page=/articles/brimelow_lee/flv_meta_injection/index.html" target="_blank">how to inject extra metadata into your Flash video (FLV) files.
 
Short video: Using flvmdi to inject metadata into flvs by Flashcomguru.
 
Compressing FLV video tutorial by Jeroen Wijering
 
FLV Metadata Viewer Free MetaData Viewer application in property sheet extension form, for Windows XP (by Manitu Group)
 
You need to submit your link in order to be listed in this section. We reserve the right to reject/accept any link submitted.
 
Thanks
We'd like to thank to Justin Watkins (for his help with the AMF Data format); Stefan and Abdul for suggestions and following people for their miscellaneous help: Michael Harris.
 
Also special thanks to Ivn Cavero Belaunde (Video Architect, Flash Authoring) of Macromedia.
 
FAQ
I get a black window pop up and disappear when I run FLVMDI. What's going on?
This is expected behavior. FLVMDI is a command-line console application. (On XP, you can run CMD.EXE, navigate to the folder you have FLVMDI and run it from command-line to see the output). FLVMDIGUI provides a Graphical User Interface for running FLVMDI.
 
FLVMDIGUI displays a message box saying 'FLVMDI.EXE not found'. What now?
FLVMDIGUI is a front-end for running FLVMDI. Download if you haven't and copy FLVMDI.EXE to the folder you have FLVMDIGUI.EXE and it will be able to find and run FLVMDI.
 
How to use FLVMDI with ColdFusion?
Thanks goes to Stefan for the following sample:
 
You need to use cfexecute like:
<cfexecute
name="C:\Inetpub\...\flvmdi.exe"
arguments="C:\Inetpub\...\12_1.flv C:\Inetpub\...\12_2.flv /s"
variable="result" timeout="5"></cfexecute>
<cfoutput>result: #result#</cfoutput>

How to get the MetaData?
You will need to add onMetaData event (and onLastSecond event, if you'll be using it) to NetStream object.
 
Here's a sample code snippet for onMetaData event:
nc = new NetConnection();
nc.connect(null);
nets = new NetStream(nc);
video.attachVideo(nets); //Video is an Embedded Video symbol
nets.play("sample.flv");

nets.onMetaData = function(metadata){

	trace('onMetaData event at '+nets.time);

	trace(' duration: '+metadata.duration+newline+
	      ' lasttimestamp: '+metadata.lasttimestamp+newline+
	      ' lastkeyframetimestamp: '+metadata.lastkeyframetimestamp+newline+
	      ' '+metadata.width+newline+
	      ' '+metadata.height+newline+
	      ' videodatarate: '+metadata.videodatarate+newline+
	      ' audiodatarate: '+metadata.audiodatarate+newline+
	      ' framerate: '+metadata.framerate+newline+
	      ' creationdate: '+metadata.creationdate+newline+
	      ' filesize: '+metadata.filesize+newline+
	      ' videosize: '+metadata.videosize+newline+
	      ' audiosize: '+metadata.audiosize+newline+
	      ' datasize: '+metadata.datasize+newline+
	      ' metadatacreator: '+metadata.metadatacreator+newline+
	      ' metadatadate: '+metadata.metadatadate );
}
When you are using AS2, you may need to add the event(s) using the following syntax:
nets["onMetaData"] = function...
nets["onLastSecond"] = function...
For adding onLastSecond event when you are using Flash MX 2004 professional video components, you may need to access the NetStream object in the component. For example, if the media display component has the instance name 'md', you can access the NetStream Object like the following:
var nets = md._playerImpl._ns;
nets.onLastSecond = function...
Is FLVMDI source available?
Unfortunately, no. FLVMDI uses our internal commercial FLV Library which we wouldn't like to give away.
 
IS AMF data format available?
The data format is documented in SWF 8 specs. (FLV format is defined in SWF specs).
 
Can I include FLVMDI with my application?
Yes, but generally, you'll need to,
  • Email us for permission,
  • Credit us for FLVMDI where appropriate,
  • Distribute the executable without any modification,
  • Provide us a single user license of your software (if commercial)
All negotiable (except the first one: contact us for permission).
 
Can you provide me a custom FLVMDI build to include in my application?
Yes, please contact us with your specific need. If it's simple enough, you may even get it free.
 
I love FLVMDI so much. Can I make a donation which will help further development of FLVMDI?
Thank you! Note that a donation is not necessary or required, FLVMDI is free to use for any purpose. Still, if you wish to donate: spacer You can also consider purchasing Manitu Group products to support us...
 
Support
FLVMDI is not an officially supported product. But you'll most likely receive a response when you write to flvmdi@buraks.com. Please let us know your experience and about bugs, suggestions are always welcome.
 

 
Copyright © 2004-2007 Manitu Group, Istanbul, Turkey. All rights reserved. All trademarks acknowledged.
General Privacy Policy of Manitu Group
gipoco.com is neither affiliated with the authors of this page nor responsible for its contents. This is a safe-cache copy of the original web site.