<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Zenhaven.org</title>
	<atom:link href="http://www.zenhaven.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zenhaven.org/blog</link>
	<description>Marc's blog</description>
	<lastBuildDate>Sun, 13 May 2012 21:12:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>FLVmeta 1.1.0 released</title>
		<link>http://www.zenhaven.org/blog/2012/05/13/flvmeta-1-1-0-released/</link>
		<comments>http://www.zenhaven.org/blog/2012/05/13/flvmeta-1-1-0-released/#comments</comments>
		<pubDate>Sun, 13 May 2012 21:12:59 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[FLVmeta]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[cmake]]></category>
		<category><![CDATA[flv]]></category>
		<category><![CDATA[flvmeta]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://www.zenhaven.org/blog/?p=67</guid>
		<description><![CDATA[After a few years of short intense development phases, between long pauses of semi-inactivity, here it is, FLVmeta 1.1.0. This release is a beta version, some real-world testing will be needed to ensure no bugs remain. However, I am pretty confident this version can be used in a production environment, because it is currently used [...]]]></description>
			<content:encoded><![CDATA[<p>After a few years of short intense development phases, between long pauses of semi-inactivity, here it is, FLVmeta 1.1.0.</p>
<p>This release is a beta version, some real-world testing will be needed to ensure no bugs remain. However, I am pretty confident this version can be used in a production environment, because it is currently used in such a way on a daily basis where I work.</p>
<p>Source code and binaries can be downloaded at <a title="FLVmeta Github download page" href="https://github.com/noirotm/flvmeta/downloads" target="_blank">Github</a> or <a title="FLVmeta Google Code downloads page" href="http://code.google.com/p/flvmeta/downloads/list" target="_blank">Google Code</a>.</p>
<p>Here is a summary of the most interesting features:</p>
<ul>
<li>In-place updating: in addition to writing new files with inserted metadata, FLVmeta can now also update an existing FLV file, in order to simplify workflows where several encoding steps take place.</li>
<li>Exhaustive dumps: flvdump has been removed, as its functionality has been integrated and expanded into the main flvmeta executable.<br />
FLVmeta can now dump the <em>onMetadata</em> tag, the whole file, or any chosen metadata tag. A few interesting output formats are available. In addition to the old &#8220;debug&#8221; format, XML, JSON and YAML are now supported, allowing integration most software.</li>
<li>File checking: FLVmeta can perform a large range of verifications on a FLV file, from the most begnin issues to fatal errors rendering the file impossible to play. A textual report will be printed, optionally as XML to allow further processing.</li>
<li>File fixing: currently experimental, this is an option that will attempt to fix invalid FLV files when updating them.</li>
<li>User documentation: there is a man page now, that explains in detail how every command and option works.</li>
</ul>
<p><span id="more-67"></span></p>
<p>I have successfully implemented support for the <a title="CMake homepage" href="http://www.cmake.org/" target="_blank">CMake</a> build system in addition to autotools, initially in order to facilitate Windows builds, and now as the primary build system.</p>
<p>I intend to get rid of autotools, for a few reasons. First, CMake exists on even more platforms that the autotools. Furthermore it is much easier to support than autoconf to implement non-trivial features. And finally, I now feel that the number of users used to the &#8220;./configure &amp;&amp; make &amp;&amp; make install&#8221; way of installing software on Unix derivatives is decreasing due to the availability of binary package installation systems, such as Aptitude or RPM. FLVmeta can already be found as a binary package on a number of platforms, including Debian and derivatives such as Ubuntu, or FreeBSD, NetBSD.</p>
<p>I also discovered a great documentation management tool named <a href="http://johnmacfarlane.net/pandoc/" target="_blank">Pandoc</a>. I needed a tool to author or maintain FLVmeta&#8217;s man page, because avoiding editing raw NRoff files seemed obvious.<br />
At first I tried the <a href="http://rtomayko.github.com/ronn/" target="_blank">Ronn</a> tool, but I had trouble obtaining satisfying results, and its Markdown-derivated dialect was too far from the standard everyone seems to be used to.<br />
Using Pandoc gives me a great level of control over the output formats, and is easy to use and integrate into my build chain. This is especially true when using CMake, as the man page can even be automatically compiled from Visual Studio, assuming the tool has been installed on your Windows box, and can be found via the PATH environment variable.</p>
<p>All in all, I am satisfied by the experience of developing open-source software, and I am happy to have created a tool that is useful to at least a handful of people. I know that the number of downloads is probably not a very representative figure, but there have been thousands of downloads since its first release in 2007 (approximatively 10889 as of 2012-05-13).<br />
There have been some bug reports and patches that have been proposed (and accepted), and some people are willing to help me maintain the program, for example by providing Debian packaging.<br />
I have learned a lot about video formats in general, FLV, AVC (H.264), and proper development in C which I had never really used in its pure form before, since some IT schools in France think it is a great idea to teach an hybrid form of C and C++ as first coding experience for many students.</p>
<p>So, until now, FLVmeta has indeed been developed in pure C. I first chose this language in order to achieve the greatest possible performance, especially because I needed to replace FLVtool2, which did not fit my needs (back then, I needed to update FLV files hundreds of megabytes large). I was not disappointed by the result I could obtain, very fast execution, and great control over the amount of memory used by the program. However, I am feeling kind of frustrated by the shortcomings of the languages, the more features I add.<br />
The pure algorithmic parts of the code are fine as they are, it is mainly about handling structures and making choices depending on the contents of the files, lots of ifs and control structures.<br />
What bothers me is the fact that when I need to use a non-trivial data structure (lists, maps&#8230;) there is no readily-available standard solutions, and I need to reinvent the wheel and write a container adapted to my needs, for example as seen in the <a href="https://github.com/noirotm/flvmeta/blob/master/src/amf.c" target="_blank">amf.c</a> file.<br />
So I am pondering switching to C++. Many parts of the code will not be modified, however I&#8217;ll be able to make some parts more modular, especially AMF parsing, or the FLV reader/writer.<br />
Do not expect heavy development soon, I first need to make sure the current iteration is stable enough.</p>
<p>The current todolist for FLVmeta has a few items:</p>
<ul>
<li>metadata insertion via XML command files: This feature would greatly benefit from a switch to C++, since I&#8217;ll need a robust XML parser and the ability to store the described commands as in-memory structures, which might be a little it complex.</li>
<li>batch file processing: for the moment, FLVmeta can only handle one file for each invocation. The ability to work on a set of files would be a neat improvement, since a lot of video editing workflows that I have met involve working on a lot of files.</li>
<li>FLV encryption support: I am not sure this recently added feature is widely implemented, but I need at least to detect whether a file is encrypted or not, since it must certainly have an impact on its playability on a variety of systems.</li>
<li>improving command line processing: simply put, FLVmeta is a program that is invoked to run a specific command. However, right now, a command is specified using a command line switch, such as -C / &#8211;check. The more options I add, the more limited choices I have to find available letters for options. So basically, I want flvmeta to use the pattern of programs such as Git, where the program is just a driver for sub-commands specified right after the program name.<br />
For example, I want to have <strong>flvmeta update &#8211;no-last-second file.flv</strong> and for example install a script such as <strong>flvmeta-update</strong> that automatically invokes the update command.<br />
This would allow me to offer better online contextual help, like <strong>flvmeta help update</strong>, invocation that would print detailed help only for the update command.</li>
</ul>
<p>Now that FLVmeta 1.1 has been formally released, I am going to shift my focus to other kinds of projects. I am currently learning how to program with QT, and I am certainly going to make some interesting cross-platform applications with it.<br />
One project that would probably be nice to develop is flvmeta-gui, as the name indicates, a GUI for flvmeta. I need to conceptualize the interface of such a program, but it would certainly appeal to people allergic to the CLI, and I know a few of them, even though I disapprove their way of doing things <img src='http://www.zenhaven.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>I will finish this (again) big post by promising I am going to try to post more at Zenhaven.org. I love writing, I love writing about software development, and I hope some people will enjoy reading me and react by writing (non-spam) comments !<br />
The few next posts will be about FLVmeta and a few use cases that might interest potential users.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zenhaven.org/blog/2012/05/13/flvmeta-1-1-0-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Goodbye Subversion</title>
		<link>http://www.zenhaven.org/blog/2011/09/12/goodbye-subversion/</link>
		<comments>http://www.zenhaven.org/blog/2011/09/12/goodbye-subversion/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 14:09:44 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[FLVmeta]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.zenhaven.org/blog/?p=40</guid>
		<description><![CDATA[I have been using SVN for years, basically since 2004, when I got really fed up with CVS, which was used at my work back then. What seduced me in SVN was the ability to easily configure it as an Apache module, coupled with our central LDAP authentication, and SSL encryption, and its ability to track [...]]]></description>
			<content:encoded><![CDATA[<p>I have been using <a title="Subversion @ Apache.org" href="http://subversion.apache.org/">SVN</a> for years, basically since 2004, when I got really fed up with CVS, which was used at my work back then. What seduced me in SVN was the ability to easily configure it as an Apache module, coupled with our central LDAP authentication, and SSL encryption, and its ability to track file renames/moves.<br />
I also enjoy its wide platform compatibility, as well as its excellent windows companion tool : <a title="TortoiseSVN homepage" href="http://tortoisesvn.net/">TortoiseSVN</a>, which works wonders compared to the horrible WinCVS.<br />
It took me a little bit of time to fully understand the benefit of atomic commit numbers, as opposed to file versions in CVS, as well as the directory structure used to simulate branches and tags (seems like implemented as an afterthought, doesn&#8217;t it ?).</p>
<p>Then came the <a title="DCVS" href="http://en.wikipedia.org/wiki/Distributed_Concurrent_Versions_System">DCVS</a>.<span id="more-40"></span></p>
<h2>Early discovery</h2>
<p>I first learned about <a title="Mercurial" href="http://mercurial.selenic.com/">Mercurial</a>. I was impressed by its great merging and branches abilities, more than the whole &#8220;distributed&#8221; concept, however I found it a bit tricky to install and make it work in Windows, especially with TortoiseHg, which was definitly not yet as good as its older brother, TortoiseSVN. So I didn&#8217;t look further, and stuck with SVN for the time being.</p>
<h2>A few years later</h2>
<p>I&#8217;m now working in an environment where rapid website release cycles mean that a lot of developments/commits make it directly to production, the production environment being directly based on the current trunk, probably a wrong approach, but most developers in the team don&#8217;t care about branches.<br />
This means that if someone is working on a feature that hasn&#8217;t been completed and spans several commits on the trunk, any urgent bugfix will cause these features to go online, and inevitably cause bugs on the production website.</p>
<p>The obvious solution to this problem is feature branches, branches that only live for as long as the feature is not complete, and get reintegrated into the trunk when functional and tested.<br />
However, in SVN, every branch is server-side, which means that the central repository might become really encumbered with trash in the /branches directory, unless each developer deletes such a branch when done with it. Guess what ? In practice, a lot of orphan branches remain, and noone cares about deleting them.<br />
Of course, this has an interest because SVN also works as a code backup platform, so at the end of the day, each developer should put his code on the well-protected server, instead of keeping it on their potentially dead-the-next-day desktop computer.<br />
Also consider the fact that developers can work from home as well as from the office, and potentially need their code from anywhere.</p>
<p>SVN has also another flaw, it&#8217;s really getting slow when working on large codebase, especially with binary files like images, quite common in websites.<br />
This is caused by the fact that everything happens between the client and the server, even getting file or repository-wide history. Trying to work out a problematic trail of changes is basically impossible if the internet connection is down for some reason.</p>
<h2>Here comes a new challenger</h2>
<p>That&#8217;s why I got very interested when I tried Git, which I had been following since its introduction by Linus Torvald, after the infamous issue with Bitkeeper.<br />
Git&#8217;s Windows support has evolved quite a bit since the early days, and I must say that TortoiseGit (a TortoiseSVN clone) has become a quite good piece of software, allowing people to more easily bypass the initial steep learning curve of the many many git commands and options, by using a simple yet potent and familiar UI.</p>
<p>Git solves practically every issue I have encountered so far, especially about branches. Feature branches are a core part of Git&#8217;s workflow, and they&#8217;re freaking fast.<br />
It also makes working locally very practical, as apart from the initial cloning, and eventual pull/pushes, everything is done on the client side.<br />
And at least branches and tags are properly implemented without feeling &#8220;half-baked&#8221;.</p>
<p>Now you might certainly ask me: &#8220;how can it be used in a server-is-the-backup environment if all is done in a distributed way ?&#8221;<br />
Very simply of course. As long as a developer has access to a machine via SSH and that has git installed, saving your work is just a matter of creating a bare repository in your account, and add it locally as a remote into which you can push and pull at will, without ever needing to communicate with the &#8220;central&#8221; repository.</p>
<h2>Goodbye, really ?</h2>
<p>At work, no, we&#8217;re not quite ready for the switch yet, but it will come, eventually.</p>
<p>I&#8217;m talking about <a href="http://www.flvmeta.com/">flvmeta</a>, instead.</p>
<p>When I decided to host flvmeta publicly back in 2007, I decided to choose Google Code project hosting, because of its simplicity, and its support of SVN. It&#8217;s been a good choice, and has worked flawlessly since then, with an active community, bug reports, and a now established codebase (says <a href="http://www.ohloh.net/p/flvmeta/factoids/9445076">ohloh.net</a>).</p>
<p>These days, I&#8217;m working on the trunk, to complete the 1.1 release of the software. It&#8217;s much more advanced than the 1.0.x branch, and given its good stability, I encourage people to use it instead, even though some planned features are still being developed.<br />
So there&#8217;s no formal release yet, and people are encouraged to use the latest trunk revision.</p>
<p>This approach gives me, the main developer, a moral obligation: the trunk must <strong>NOT</strong> be broken. I&#8217;ve been very tempted to use feature branches to work around that issue, and so I created a repository at Github based on a conversion from the flvmeta SVN.<br />
I must admit that I like Github a lot, and so I decided to maintain both the SVN and Git repository in parallel, opting not to use git-svn facilities, just to compare Git to SVN for daily tasks.</p>
<p>After a while I&#8217;ve started to wonder about closing the google code project in favour to Github entirely, because this double-repository thing is just an annoyance, and using feature branches in the Git version adds the risk to desync it from the SVN repository, which could confuse users.</p>
<p>And then, yes, they did it, <a href="http://google-opensource.blogspot.com/2011/07/announcing-git-support-for-google-code.html">Google added support for Git in Google Code</a> ! So I uploaded my local flvmeta repository to Google Code, converted the Wiki SVN to Git, and that&#8217;s all there was to it. Now Github and Google Code are both mirrors for my local repository, and keeping them in sync is just a matter of pushing correctly.</p>
<h2>Last words</h2>
<p>I&#8217;m now a happy gitter, I will not come back to SVN for flvmeta. I just need to fix a few things in the build scripts, because I relied on SVN revision numbers to tag the executables during compilation, if just to make support easier by having people telling me the exact revision of the program they&#8217;re using.<br />
It will just be a matter of using git hashes instead, there&#8217;s a handy command that I can use for that: <code>git rev-parse --short HEAD</code>, or even <code>git describe --always</code>.</p>
<p>The only thing that I don&#8217;t like with Google&#8217;s support of Git is that they decided to stick to the most used and abused protocol ever, HTTP, instead of ssh: or git:, therefore forcing me to enter my password for every interaction with their servers, since TortoiseGit won&#8217;t let me save authentification data.<br />
I really prefer how Github handles authentication, by using cryptographic key pairs, that can be revoked individually, so if a developer machine is ever compromised, risks can be mitigated.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zenhaven.org/blog/2011/09/12/goodbye-subversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dedibox V3: first impressions and benchmark</title>
		<link>http://www.zenhaven.org/blog/2010/06/01/dedibox-v3-first-impressions-and-benchmark/</link>
		<comments>http://www.zenhaven.org/blog/2010/06/01/dedibox-v3-first-impressions-and-benchmark/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 17:04:38 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[dedibox]]></category>

		<guid isPermaLink="false">http://www.zenhaven.org/blog/?p=28</guid>
		<description><![CDATA[Right after the announcement, I could get my very own Dedibox V3. Nothing to complain of with the speed of delivery, it took me no more than 10 minutes to order the new box, be notified of its availability, and install an Ubuntu Lucid distribution (signaled as beta). As I was very curious about the [...]]]></description>
			<content:encoded><![CDATA[<p>Right after the announcement, I could get my very own <a href="http://www.online.net/serveur-dedie/offre-dedibox-v3.xhtml">Dedibox V3</a>.</p>
<p>Nothing to complain of with the speed of delivery, it took me no more than 10 minutes to order the new box, be notified of its availability, and install an Ubuntu Lucid distribution (signaled as beta).</p>
<p>As I was very curious about the performance of the famous Nano processor, I pitted my older Dedibox (the server powering this very website) against the new one using <a href="http://www.tux.org/~mayer/linux/bmark.html">nbench</a>, here are the results:</p>
<p>First, the original dedibox:</p>
<pre>BYTEmark* Native Mode Benchmark ver. 2 (10/95)
Index-split by Andrew D. Balsa (11/97)
Linux/Unix* port by Uwe F. Mayer (12/96,11/97)

TEST                : Iterations/sec.  : Old Index   : New Index
                    :                  : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT        :             450  :      11.54  :       3.79
STRING SORT         :          71.765  :      32.07  :       4.96
BITFIELD            :      2.5932e+08  :      44.48  :       9.29
FP EMULATION        :          88.285  :      42.36  :       9.78
FOURIER             :           13993  :      15.91  :       8.94
ASSIGNMENT          :          18.371  :      69.90  :      18.13
IDEA                :          3042.6  :      46.54  :      13.82
HUFFMAN             :          1113.4  :      30.87  :       9.86
NEURAL NET          :          21.175  :      34.02  :      14.31
LU DECOMPOSITION    :          762.56  :      39.50  :      28.53
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX       : 35.427
FLOATING-POINT INDEX: 27.756
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
CPU                 : GenuineIntel Intel(R) Celeron(R) CPU          220  @ 1.20GHz 1200MHz
L2 Cache            : 512 KB
OS                  : Linux 2.6.24.2dedibox-r8-1-smp-x32
C compiler          : gcc version 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
libc                : libc-2.7.so
MEMORY INDEX        : 9.421
INTEGER INDEX       : 8.429
FLOATING-POINT INDEX: 15.394
Baseline (LINUX)    : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38
* Trademarks are property of their respective holder.</pre>
<p> </p>
<p>Now the new server:</p>
<pre>BYTEmark* Native Mode Benchmark ver. 2 (10/95)
Index-split by Andrew D. Balsa (11/97)
Linux/Unix* port by Uwe F. Mayer (12/96,11/97)

TEST                : Iterations/sec.  : Old Index   : New Index
                    :                  : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT        :          625.84  :      16.05  :       5.27
STRING SORT         :          72.811  :      32.53  :       5.04
BITFIELD            :      2.9437e+08  :      50.50  :      10.55
FP EMULATION        :            88.6  :      42.51  :       9.81
FOURIER             :          8060.1  :       9.17  :       5.15
ASSIGNMENT          :          13.373  :      50.89  :      13.20
IDEA                :            3123  :      47.77  :      14.18
HUFFMAN             :          1478.7  :      41.00  :      13.09
NEURAL NET          :          13.524  :      21.73  :       9.14
LU DECOMPOSITION    :           772.2  :      40.00  :      28.89
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX       : 37.871
FLOATING-POINT INDEX: 19.972
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
CPU                 : CentaurHauls VIA Nano processor U2250 (1.6GHz Capable) 1600MHz
L2 Cache            : 1024 KB
OS                  : Linux 2.6.32-22-generic-pae
C compiler          : gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
libc                :
MEMORY INDEX        : 8.883
INTEGER INDEX       : 9.899
FLOATING-POINT INDEX: 11.077
Baseline (LINUX)    : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38
* Trademarks are property of their respective holder.</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.zenhaven.org/blog/2010/06/01/dedibox-v3-first-impressions-and-benchmark/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FLVmeta news</title>
		<link>http://www.zenhaven.org/blog/2010/04/14/flvmeta-news/</link>
		<comments>http://www.zenhaven.org/blog/2010/04/14/flvmeta-news/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 10:16:57 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[FLVmeta]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.zenhaven.org/blog/?p=17</guid>
		<description><![CDATA[After a few months of development, FLVmeta 1.1 is nearing completion. Snapshots can be downloaded on the Google Code project page at: http://code.google.com/p/flvmeta/downloads/list A lot of new features have been added, here is an exhaustive list: Added proper command line handling and help. Added the possibility to overwrite the input file when the output file [...]]]></description>
			<content:encoded><![CDATA[<p>After a few months of development, FLVmeta 1.1 is nearing completion.</p>
<p>Snapshots can be downloaded on the Google Code project page at: <a href="http://code.google.com/p/flvmeta/downloads/list">http://code.google.com/p/flvmeta/downloads/list</a></p>
<p><span id="more-17"></span>A lot of new features have been added, here is an exhaustive list:</p>
<div id="_mcePaste">
<ul>
<li>Added proper command line handling and help.</li>
<li>Added the possibility to overwrite the input file when the output file is not specified or when both files are physically the same.</li>
<li> Added support for CMake builds in addition to autotools. It is now the official way to build flvmeta on Windows.</li>
<li>Added metadata and full file dumping, integrating former flvdump functionality into flvmeta.</li>
<li>Added support for XML, YAML, and JSON formats for dumping.</li>
<li>Added XML schemas describing the various formats used by flvmeta.</li>
<li>Added a file checking feature (currently unimplemented).</li>
<li>Added the possibility to print output file metadata after a successful update using one of the supported formats.</li>
<li>Added a feature to insert custom metadata strings while updating.</li>
<li>Added an option to disable insertion of the onLastSecond event.</li>
<li>Added an option to preserve existing metadata tags if possible.</li>
<li>Added an option to fix invalid tags while updating (this is a highly experimental feature, should be used with caution)</li>
<li>Added an option to ignore invalid tags as much as possible instead of exiting at the first error detected.</li>
<li>Added an option to reset the file timestamps in order to correctly start at zero, for example if the file has been incorrectly split by buggy tools.</li>
<li>Added an option to display informative messages while processing (not quite exhaustive for the moment)</li>
</ul>
</div>
<p>A few things are still missing for the next stable release, for example some proper user documentation, now that a complete set of command line options are available, as well as the implementation of the check command.</p>
<p>Everyone is welcome to test the software and report bugs on the <a href="http://code.google.com/p/flvmeta/issues/list">issue tracker</a>.</p>
<p>I&#8217;m also still pondering the benefits of using gettext in order to fully internationalize the output of the program. On one hand, there are many people who don&#8217;t speak english, and adding the potential to reach a wider audience is tempting. It is also a must-have in order to be featured in distros like Debian.</p>
<p>On the other hand, I still have issues with building flvmeta with gettext enabled. First of all the cmake/windows combination would be kind of experimental at best, and using autotools, I still need to fully understand which files must and must not be added to the repository.<br /> There&#8217;s also the question of performance, since flvmeta is mostly used as an automated tool for update purpose. Dynamically loading strings in that setting is kind of pointless since speed and memory can be affected and there&#8217;s noone to ever read those messages anyways.</p>
<p>After version 1.1, which is transitional in the sense that it really represents the maturation of flvmeta into a real CLI tool, a 1.2 version will be in development.</p>
<p>Features expected for 1.2 include:</p>
<div>
<ul>
<li>insertion of custom data tags, notably cuepoints, from XML files</li>
<li>extraction of individual audio and video streams</li>
<li>creation of a GUI tool wrapping flvmeta&#8217;s functionalities, and adding a bit more, like batch processing, and integration with various file managers (Nautilus, Windows Explorer ?)</li>
<li>eventually a streaming mode, to create some sort of &#8220;real time&#8221; playback of FLV files to devices or sockets, which could really be interesting in conjunction with a HTTP server, to better control bandwidth usage when using the now widespread &#8220;pseudo-streaming&#8221; of FLV files</li>
</ul>
</div>
<p>To add a quick follow-up to my previous post, I might add that&#8230; no, FLV is not quite dead yet, since H.264 streams in FLV containers are working quite well in the Flash Player, and major sites have adopted that combination.<br />I think we also might even expect support for On2 VP8 in FLV files before the end of the year. If Google really open-sources its code, alternative flash implementations will certainly jump the wagon before maybe even Adobe.<br />Of course, due to Adobe being a major On2 licensee, as well as thanks to the rather good relationship between them and Google, the official Flash Player might support this codec fast enough for it to become a viable alternative to the increasingly controversial H.264.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zenhaven.org/blog/2010/04/14/flvmeta-news/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>About the future of FLV</title>
		<link>http://www.zenhaven.org/blog/2008/05/13/about-the-future-of-flv/</link>
		<comments>http://www.zenhaven.org/blog/2008/05/13/about-the-future-of-flv/#comments</comments>
		<pubDate>Tue, 13 May 2008 19:35:31 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[f4v]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[flv]]></category>

		<guid isPermaLink="false">http://www.zenhaven.org/blog/?p=11</guid>
		<description><![CDATA[FLV is dead. That can seem like a rather bold statement, but let&#8217;s face the truth. After Adobe&#8217;s recent publication of updated and open specifications for the FLV/F4V and SWF formats, that seems to be about the most logical conclusion. If someone reads the aforementioned specification in detail, there&#8217;s one thing that will immediatly be [...]]]></description>
			<content:encoded><![CDATA[<p>FLV is dead.</p>
<p>That can seem like a rather bold statement, but let&#8217;s face the truth. After Adobe&#8217;s recent publication of updated and <em>open </em><a title="FLV/F4V specs" href="http://www.adobe.com/devnet/flv/">specifications</a> for the <a title="Flash Video" href="http://en.wikipedia.org/wiki/Flash_Video">FLV/F4V</a> and SWF formats, that seems to be about the most logical conclusion.<span id="more-11"></span></p>
<p>If someone reads the aforementioned specification in detail, there&#8217;s one thing that will immediatly be noticed. The specification is not about FLV, but FLV and F4V.<br />
What is F4V ? In a nutshell, it is a subset of the MPEG-4 standard destined to be a container for video, audio, and various metadata. Exactly what FLV is supposed to be too, you&#8217;ll tell me. That&#8217;s only partly true. FLV has a few limitations as a media container.</p>
<p>First of all, FLV fails as a streaming format. Ok, it&#8217;s widely used on major sites like Youtube, dailymotion, and many others, but it&#8217;s not <em>true</em> streaming, because all it does is playing an already existing file, not a stream generated on-the-fly, and playing continuously, like a TV channel.<br />
Even for random access seeking, an encoder producing FLV files has to add some specific metadata, that tell the player where it can seek.<br />
Some tricks are needed on the server side, like using specific modules for the web server (eg: mod_flv_streaming for Lighttpd), or using some scripting, in PHP or other server languages.<br />
Unhappily, free encoders like ffmpeg or mencoder are unable to add those precious metadata while encoding the files.<br />
That problem drove me to write the <a title="FLVMeta" href="http://flvmeta.googlecode.com/">FLVMeta</a> tool, that precisely does this, taking an existing FLV file to update with the needed metadata. To be fair, there are several existing tools doing the same thing, but none of them worked well enough for my taste <img src='http://www.zenhaven.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Another problem with the FLV format is that each frame belongs to its own &#8220;packet&#8221;. Every frame is accessible in a standalone way, even when a frame is not a keyframe, a frame containing enough information to be fully rendered, without relying on information from previous frames.<br />
That means that a FLV file can only contain video data that can adapt to that layout. Basically, a FLV file can contain video data that belongs only to a hard-coded list of codec families, like Sorenson Spark and ON2 True Motion VP6. Unfortunately, Sorenson Spark, derived from H.263, is outdated and is not on par with the modern codecs in terms of image quality. On2 VP6 is much better as a codec, but is a proprietary format, and it&#8217;s known that On2 is not exactly friends with people who try to implement their format.</p>
<p>On the other hand, H.264 has been implemented as Free Software, like the encoder <a title="x264 homepage" href="http://www.videolan.org/developers/x264.html">x264</a>, even though the standard is encumbered by many patents that can be enforced in countries like the USA. H.264 has already superseded Divx as a highly compressed movie format, and is expected to be used more and more as a streaming format.</p>
<p>Therefore, realizing the limitations of the existing video formats, Adobe chose to implement H.264 in its Flash Player software.<br />
However, as the FLV format is unable to contain H.264 video, Adobe pushed a variation of the MPEG-4 multimedia container format, and heralded it as its new champion, the F4V format !</p>
<p>This &#8220;new&#8221; format is able to contain any video and audio format, leaving more space for Adobe if they wish to widen their offer. It is also able to contain more diverse metadata, for instance in the recently introduced AMF3 format, as FLV was limited in being only able to contain AMF0 encoded data.</p>
<p>So, the most recent Flash Player (version 9.0.124.0) supports both H.264 playback as well as F4V. It&#8217;s only a matter of time before developers will upgrade their Flash authoring tools to versions able to output Flash9 files, using ActionScript 3. And then, will there be a reason to continue to support FLV ?<br />
I&#8217;m pretty sure that the major players in the league will switch to H.264, to avoid paying license fees to On2, and to provide better High Definition contents.</p>
<p>So what will be the point of keeping on using FLV ? Pretty much none, in my opinion. Maybe the F4V format is somewhat harder to implement than FLV, but most of the existing encoding software will just have to adapt their already mature MPEG-4 code, making the F4V format even more well supported than FLV is today.</p>
<p>So yes, FLV is dead, long live F4V.</p>
<p>PS: Fear not for FLVMeta, I&#8217;ll continue supporting it and developing the latest 1.1 version, FLV will be around for a few months at least, but I will focus my efforts on developing my AMF0/3 parser/serializer <a title="libamf" href="http://libamf.sf.net">libamf</a> which should allow C and C++ code at least to fully support Adobe&#8217;s metadata.</p>
<p><strong>Update</strong>: Adobe has since then added support for AVC (H.264) in the FLV format. It must be noted that there are some limitations, including the fact that only the first frame contains the necessary information to decode the whole stream, namely the <em>Sequence Parameter Set NALU</em>, so random access streaming via pseudo-streaming does not work properly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zenhaven.org/blog/2008/05/13/about-the-future-of-flv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Marie Darling: the first concert</title>
		<link>http://www.zenhaven.org/blog/2008/05/09/marie-darling-the-first-concert/</link>
		<comments>http://www.zenhaven.org/blog/2008/05/09/marie-darling-the-first-concert/#comments</comments>
		<pubDate>Fri, 09 May 2008 15:10:38 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[Music]]></category>
		<category><![CDATA[Aloyse]]></category>
		<category><![CDATA[Baroc]]></category>
		<category><![CDATA[concert]]></category>
		<category><![CDATA[darling]]></category>
		<category><![CDATA[marie]]></category>
		<category><![CDATA[paris]]></category>

		<guid isPermaLink="false">http://www.zenhaven.org/blog/?p=6</guid>
		<description><![CDATA[It will take place the 2nd of June, in Paris, in the &#8220;Baroc&#8221; (36 rue Sambre et Meuse, 75010) at 20h. Marie will play alongside Aloÿse and a surprise guest. For those who don&#8217;t know her, Marie is the singer extraordinaire of Katzenjammer Kabarett, a nice Electro/Gothic/Punk/Cabaret&#8230; errr well, an interesting band anyways This is [...]]]></description>
			<content:encoded><![CDATA[<p>It will take place the 2nd of June, in Paris, in the &#8220;Baroc&#8221; (36 rue Sambre et Meuse, 75010) at 20h.<br />
Marie will play alongside Aloÿse and a surprise guest.</p>
<p>For those who don&#8217;t know her, Marie is the singer extraordinaire of Katzenjammer Kabarett, a nice Electro/Gothic/Punk/Cabaret&#8230; errr well, an interesting band anyways <img src='http://www.zenhaven.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>This is going to be Marie&#8217;s first solo concert, so she needs encouragements and a loooot of people screaming her name.</p>
<p>Oh I forgot, the entrance is free !</p>
<p>Links:<br />
<a href="http://www.myspace.com/mariedarling">http://www.myspace.com/mariedarling</a><a href="http://www.katzenjammer-kabarett.com/"></p>
<p>http://www.katzenjammer-kabarett.com/</a></p>
<p><a href="http://www.myspace.com/aloysuke">http://www.myspace.com/aloysuke</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zenhaven.org/blog/2008/05/09/marie-darling-the-first-concert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello World !</title>
		<link>http://www.zenhaven.org/blog/2008/05/08/hello-world/</link>
		<comments>http://www.zenhaven.org/blog/2008/05/08/hello-world/#comments</comments>
		<pubDate>Thu, 08 May 2008 00:17:29 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[My life]]></category>
		<category><![CDATA[Zenhaven.org]]></category>
		<category><![CDATA[hello world]]></category>

		<guid isPermaLink="false">http://www.zenhaven.org/blog/?p=3</guid>
		<description><![CDATA[Every software developer out there will have recognized the famous &#8220;Hello World&#8221;. For those who are not part of this fantastic corporation, well, this is just a way to make a first try in a new domain you don&#8217;t master yet, like, for instance, me and all this blogging thing. Ok, ok, no digression for [...]]]></description>
			<content:encoded><![CDATA[<p>Every software developer out there will have recognized the famous &#8220;Hello World&#8221;.<br />
For those who are not part of this fantastic corporation, well, this is just a way to make a first try in a new domain you don&#8217;t master yet, like, for instance, me and all this blogging thing.</p>
<p>Ok, ok, no digression for a first post. This one marks the opening of my first blog, and website, so I&#8217;ll talk a bit about me and blogs.<span id="more-3"></span></p>
<p>Why did I wait so long before doing my website ? It&#8217;s been like ten years I&#8217;ve been in the IT business, the Internet, new technologies, etc, and I have never found the motivation to invest time and energy into this. There are several explanations, I guess.</p>
<p>Maybe I&#8217;ve just been lazy, or I didn&#8217;t feel like finding a decent web host. I was a student for six years, and it&#8217;s true that I was pretty busy with my studies. I really prefered improving my programming skills rather than talking about those, and I couldn&#8217;t really afford a dedicated server.<br />
I must also admit that I suck at web design (see <a href="http://noirotm.free.fr/">http://noirotm.free.fr</a> for an early example of what kind of web design I can come up with). I&#8217;m really happy that there are now very intuitive solutions such as <a title="Wordpress" href="http://www.wordpress.org/">WordPress</a>, or <a title="Drupal" href="http://www.drupal.org/">Drupal</a>, that have thousands of themes, and can be almost be used as-is, as publishing platforms.</p>
<p>Another explanation is that maybe I didn&#8217;t have anything to say. Yeah, a lot of things have already been said on the Internet, and I didn&#8217;t think I could contribute with my limited knowledge about stuff. And I don&#8217;t like talking about myself either <img src='http://www.zenhaven.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>But fear not, after all those years, I now have my blog, and it will be as random as possible !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zenhaven.org/blog/2008/05/08/hello-world/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

