Menu

Home

M. Scheerer

WHAT IT IS

This is Doppio Media, a programming language independent lightweight media framework which is currently implemented as a Java and a J# version named Lightweight Java/.NET Media Framework (LJMF).
There's also a C# version in development.

Extended documentation

An extended documentation can be found here. Further API documentation can be browsed for the Application programming interface, for the Decoder programming interface, and the Tag programming interface.

Souce code examples

Application programming interface (Player)

Decoder programming interface (Information)
Decoder programming interface (FormatReaderWrapper)
Decoder programming interface (Decoder)
Decoder programming interface (Demultiplexer)
Decoder programming interface (FormatReader-Audio)
Decoder programming interface (FormatReader-Video)

Tag programming interface (Information)
Tag programming interface (Tag)

Development goals

-Eliminating all media player related security issues and also security updates:
According to http://j00ru.vexillium.org/?p=2211 and https://en.wikipedia.org/wiki/Stagefright_(bug) exploitable security bugs in today's media frameworks are very common.
Google is working hard to solve the problem, but improves only one (forked) single part of a media framework library and states:

"Hopefully, one day we will be able to declare both project “fuzz clean” against most publicly available samples and simple mutation algorithms.
Until then, we recommend to refrain from using either of the two projects to process untrusted media files or alternatively
to use privilege separation on your PC or production environment, where absolutely required."

Doppio offers a complete 100% solution now - not once a day. To solve the problem two techniques called sandboxing and virtualization are used. So thousands of security bugs cannot be exist any more in media frameworks.

-Performance:
A complete media framework solution should require less memory during long working sessions and less CPU amount. This is accomplished through parallel computing, that means using several CPU's at once, using high performance algorithms in the decoders and a reliable memory management. Later is a big issue in today's media framework.

-Reliability
A media player must be play any valid media source without any issues if the media format is supported. The Xamp player contains the only decoder(system) be able to pass the official Ogg test suite on: https://wiki.xiph.org/TheoraTestsuite
Also the new developed MP3 decoder (Hera) was tested with official test suits like ISO/IEC 11172 part 4. In addition this decoder supports also the rare supported free format up to a bitrate of 640KB/s. Further informations are on the pages State of the MP3 decoder development and State of the Ogg Theora decoder development.

-Support of professional applications:
There are some professional high end applications which need some extra features like enhanced video navigation with significantly faster interactive search in video.
Doppio supports enhanced video navigation techniques which are outperforming existing solutions.
Video navigation is a subject of research.
See http://ngvb.net/wp-content/uploads/2014/11/hudelist_knt.pdf

-Support of open codecs:
Open codecs like Ogg are not well supported and maintained in open source players and from open codec organisations. Doppio shows that Ogg is even better than other media container systems in case of usability and video navigation.

-Click to ready installation for end users
Because Doppio doesn't rely on other computer libraries which must be installed with the correct version, there are no installation issues for end users.

-Easy to use for software developers
Doppio runs with Java 1.1 VM and with .NET 1.0 or above. Therefore this system can be used from any programming languages supported from the .NET and Java runtime system on any platforms (Develop once run everywhere).

Features

Doppio supports currently decoding (playback) with following features:

-Non progressive, progressive download or full streaming from local or internet sources
-rewinding with picture preview in all above mentioned use cases
-internal database storing and query metadata of a media
-handle many media streams independently of each other
-spectrum analyzing with time and frequency representation
-equalizing
-full screen (Media Applet)
-selectable video scaling algorithm (Media Applet)
-dual monitor support (Media Applet)
-plugging various media formats

Media format support

Ogg Sceleton (Metadata)
Ogg Comment (Metadata)
ID3 (Metadata)
Ogg Vorbis (Audio)
Ogg Theora (Video + Audio)
MP1, MP2, MP3 (Audio)
Mpeg1 (Video + Audio)
Mpeg2 (Video + Audio)

Trans/encoding support for running on servers is planned.

Media format comparisons

H264 versus VP8
http://www.streamingmediaglobal.com/Articles/ReadArticle.aspx?ArticleID=68594&PageNum=3
And then compare VP8 with Ogg Theora
http://www.streamingmediaglobal.com/Articles/ReadArticle.aspx?ArticleID=68594&PageNum=3

Ogg Theora vsus H264
http://jasonmillerdesign.com/Blog/Ogg_or_MP4_The_HTML5_Video_Codec_Comparison

Ogg Vorbis versus AAC
http://listening-tests.hydrogenaud.io/igorc/results.html
http://listening-test.coresv.net/results.htm

Supported programming languages

--Java-------------------------
-Clojure (Lisp dialect)
-Groovy
-Scala
-JRuby (Ruby)
-Jython (Python)

--.NET--List is incomplete----
-A# (Ada)
-C#
-C++
-Clojure
-Component Pascal
-Eiffel
-F#
-IronPython
-IronRuby
-IronScheme
-JScript
-L# (Lisp)
-P# (Prolog)
-Visual Basic .NET (VB.NET)

Compiling

Compiling Java:
-Install Java SDK
-Delete folder src/org/ljmf/audio/dotnet
-Execute the Ant script to create a jar file

Compiling J#:
-Install .NET SDK, J# SDK and DirectSound SDK
-Delete folder src/org/ljmf/audio/java
-Execute the J# compiler: e.g. C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\vjc.exe /o /r:"C:\WINDOWS\Microsoft.NET\Managed DirectX\v9.03.91\Microsoft.DirectX.DirectSound.dll" /t:library /out:doppio.dll /recurse:org*.java

Compiling C#
-Install .NET SDK and DirectSound SDK
-Execute the C# compiler: e.g. C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\csc.exe /o /r:"C:\WINDOWS\Microsoft.NET\Managed DirectX\v9.03.91\Microsoft.DirectX.DirectSound.dll" /t:library /out:doppio.dll /recurse:org*.cs

Installation

Using the compiled framework under arbitrary Java languages:

Bind the library as a JAR into the target project.

Using the compiled framework under arbitrary .NET languages J#):

Bind the library as a DLL into the target project.
With .NET versions higher than 3.5 use this workaround - here's a C# example:

The following code needs to be called in your C# code before instantiating any classes or calling any code in a J# DLL.
After you call this, you can then call all of your J# code. You load the library explicitly and then Windows already knows its location.

Simple example:

using System;
using System.IO;
using System.Runtime.InteropServices;
using net.windward.api.csharp;

namespace SimpleExample
{
    class Program
    {
        [DllImport("kernel32", SetLastError = true)]
        static extern IntPtr LoadLibrary(string lpFileName);

        static void Main(string[] args)
        {
            if (Environment.Version.Major >= 4)
            {
                string folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), @"..\Microsoft.NET\Framework\v2.0.50727");
                folder = Path.GetFullPath(folder);
                LoadLibrary(Path.Combine(folder, "vjsnativ.dll"));
            }

            // now call J# code
            Report.Init();
            Console.Out.WriteLine("success!");
        }
    }
}

Shipping the .NET project:

Include the needed J# runtime into the Setup.exe:
http://www.microsoft.com/en-us/download/details.aspx?id=15468

Using the compiled framework under arbitrary .NET languages (C#):

Bind the library as a DLL into the target project.

Project Members:


MongoDB Logo MongoDB