LongoMatch:The Digital Coach

Archive for enero 2009

Uno de los principales objetivos de LongoMatch es demostrar que hoy por hoy se puede crear una aplicación multimedia multiplataforma utilizando única y exclusivamente herramientas de Software Libre. Para ello escogí como framework multimedia GStreamer un gran conocido en el mundo GNU/Linux pero que apenas se ha dado a conocer en Mac y Windows debido a la existencia de Direct Show y QuickTime.

Lo que muchos proyectos hacían hasta el momento era desarrollar un backend para cada  SO, lo que representa un gran trabajo ya que se deben mantener tres a la vez para el caso Windows/Mac/Linux. El enfoque de LongoMatch es totalmente distinto ya que se usa el mismo backend para todas las plataformas. Junto con Songbird y el media center Elisa, LongoMatch es uno de los primeros proyectos en apostar por GStreamer como framework único.

Uno de los grandes problemas de GStreamer es que no proporciona binarios ni para Windows ni para Mac de ahí que cada uno se las tenga que apañar por si mismo. Ante este problema he creado dos nuevos proyectos GStreamer WinBuilds y GStreamer MacBuilds para crear un instalador en esas plataformas que nace de las necesidades de LongoMatch para ser multiplataforma. Para ambos cuento con la colaboración de  Andrés Colubri, estudiante argentino de la Universidad de California de Los Angeles (UCLA).

GStreamer WinBuilds

La compilación de GStreamer en windows está basada en el método OABuild que proporciona un entorno para compilar GStreamer usando Visual Studio. El problema de OAbuild es que los binarios que genera no son funcionales del todo por que le faltan mucho plugins esenciales por intentar compilar todas las dependencias externas con MSVC. Lo que hice fue compilar estas dependencias (ffmpeg, libxvid, libx264, liba52, etc…) usando Mingw/Msys y enlazando el compilado de windows con las librerías generadas.

Los cambios que he realizado hasta la fecha son:

  • Added ffmpeg plugin with full codec support
  • Updated Glib to 2.18
  • Added volume plugin
  • Added libmad plugin
  • Added asfdemux plugin.
  • Added lame plugin
  • Removed  Direct Show wrapper and use the ffmepg plugin for all the decoding stuff.
  • Added xvid plugin.
  • Added the mpeg2decoder.
  • Added mpegstream plugin.
  • Added resindvd plugin.
  • Added libfaad plugin.
  • Added libfaac plugin.
  • Added libdvdspu plugin.
  • Adde liba52 plugin.
  • Added mpeg4parse plugin.
  • Added qtdemux plugin.

En la forja están colgados los instaladores para XP y Vista.

GStreamer MacBuilds

Este proyecto está basado en Macports. El problema original de Macports es que compila unos cambios pulgins con dependencias con Gtk+, lo cual nos genera unas depencias finales de varios megas. La ide es suprimir estos plugins, que no son esenciales, para obtener unos binarios finales con las minimas dependencias finales a fin de empaquetar todo en un instaldor de no más de 50 megas.

Este proyecto está todavía en su fasis de análisi y diseño pero las pautas a seguir serán:

  1. Localizar los plugins que dependan de gconf y de gnome-vfs
  2. Crear un repositorio local de portfiles (http://guide.macports.org/#development.local-repositories)
  3. Modificar los portfiles de gstreamer y gst-plugins-* suprimiendo las dependencias a gconf y gnome-vfs que a su vez dependen de GTK+
  4. Modificar los portfiles de gstreamer y gst-plugins-* suprimiendo los plugins que dependan de gconf y gnome-vfs  en “configure.args” (por ejemplo añadiendo –disable-gnomevfssink)
  5. Crear el instalador (http://guide.macports.org/#using.binaries.binary-packages)

Pasada ya la primera gran iteración del desarrollo de LongoMatch, que va a dar por concluida la versión 1.0, estoy ya desarrollando importantes mejoras para el programa pensando en la siguiente versión.

Hasta el momento he conseguido un sistema estable que actualmente cumple con todos los requisitos que fijé para la primera version. Es hora de ir pensando en nueva mejoras y una de las más importantes es crear un capturadora de vídeo para poder realizar análisis de partidos en directo. De momento LongoMatch sólo puede trabajar con archivos locales por lo que el análisis debe esperar a que finalice el partido. Con esta mejora se pretende que se pueda visualizar y capturar la salida de una cámara digital de tal modo que el análisis sea instantáneo.

Ya he implementado la capturadora usando GStremer y me faltan realizar algunas pruebas mas para integrarlo en el sistema. Aquí dejo una captura del monstruito funcionando!!!

Capturadora de video multiplataforma basada en GStreamer

Capturadora de video multiplataforma basada en GStreamer

Introduction

Debian-like systems use APT, a free user interface that works with core libraries to handle installing software on Linux. Apt can be functionally considered to be a front-end to dpkg. While dpkg performs actions on individual packages, apt tools manage relations (especially dependencies) between them, as well as sourcing and management of higher-level versioning decisions (release tracking and version pinning).

For this guide I supose that your project uses the autotools buid system. That’s why I will use CDBS which is a tool that uses debhelper to make building and maintaining Debian packages even easier. It has many advantages:

  • It produces a short, readable, and efficient debian/rules.
  • It automates debhelper and autotools for you, so you do not have to worry about repetitive tasks.
  • It helps you focus on more important packaging problems, because it helps without limiting customization.
  • Its classes have been well tested, so you can avoid dirty hacks to solve common problems.
  • Switching to CDBS is easy.
  • It is extensible.

Configuration Files

The files needed to create .deb package are stored in the project’s  root directory with the following structure:
  • debian/changelog
  • debian/control
  • debian/copyright
  • debian/rules

changelog

The changelog file is, as its name implies, a listing of the changes made in each version. It has a specific format that gives the package name, version, distribution, changes, and who made the changes at a given time.

The first line includes the package’s name (longomatch) and the package’s version (0.9.1-1hardy1) followed by the distribution’s name (hardy)

The changelog for the longomatch package:

longomatch (0.9.1-1hardy1) hardy; urgency=low
   *Improved video editor
   *Added templates support
   *Added internationalization support

— Andoni Morales Alastruey Tue, 18 Nov 2008 23:50:00 +0200

control

The control file contains the information that the package manager (such as apt-get, synaptic, and adept) uses, build-time dependencies, maintainer information, and much more.

For the longomatch package, the control file looks something like:

Source: longomatch
Section: devel
Priority: extra
Maintainer: Andoni Morales Alastruey <my@mail.com>
Build-Depends: debhelper (>= 5), autotools-dev, cdbs, pkg-config, mono-gmcs,libdb4o6.0-cil, libgtk2.0-cil,libgstreamer0.10-dev, libgstreamer-plugins-base0.10-dev, libgtk2.0-dev, libmono2.0-cil, libmono-cairo2.0-cil
Standards-Version: 3.7.2
Package: longomatch
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, mono-runtime, ffmpeg, mencoder
Description: LongoMatch:The Digital Coach
Sports video analyze tool for coaches
and trainers to assist them  on making live video reports
from a match. It creates a database with the most
important plays of a game, grouped by categories, to easily
access them and to create play lists and new videos from the
selected plays.

copyright

This file gives the copyright information. Generally, copyright information is found in the COPYING file in the program’s source directory. This file should include such information as the names of the author and the packager, the URL from which the source came, a Copyright line with the year and copyright holder, and the text of the copyright itself. LongoMatch includes the following copyright file:

This package was debianized by Andoni Morales Alastruey <my@mail.com> on
Tue, 02 Sep 2008 03:04:08 +0200.
Upstream Author(s):
Andoni Morales Alastruey <my@mail.com>
Copyright:
Copyright (C) 2008 Andoni Morales Alastruey <my@mail.com>
License:
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
The Debian packaging is (C) 2008, Andoni Morales Alastruey <ylatuya@gmail.com> and
is licensed under the GPL, see `/usr/share/common-licenses/GPL'.
# Please also look if there are files or directories which have a
# different copyright/license attached and list them here.

rules

The last file we need to look at is rules. This does all the work for creating our package. It is a Makefile with targets to compile and install the application, then create the .deb file from the installed files. It also has a target to clean up all the build files so you end up with just a source package again. CDBS is a set of Makefile includes that uses debhelper to make building and maintaining Debian packages even easier. It uses advanced features of Makefiles to abstract the build process, so rules files end up primarily as a series of include statements. The final rules file using CDBS looks like this:

#!/usr/bin/make -f
include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk

As you can see the rules configuration files is very simple. CDBS scripts delegate all the work to autotools.

Creating the binaries package

The next step is to build the binaries package and the sources packages which are built calling the following commands in the ./debian directory:

# debuild -b (to build the binaries package)

# debuild -S (to build the sources packages)

debuild will parse all the previous files and will create a .deb package


Descripción del proyecto

LongoMatch es un proyecto de Software Libre que proporciona una serie de herramientas para el análisis por vídeo. Está enfocado al deporte y ayuda a entrenadores y ténicos a realizar estudios de acciones a través del vídeo, permitiendo localizar y agrupar por categorías diferentes segmentos de una grabación para facilitar su posterior análisis. Su uso puede llegar a ser más genérico, pudiendo ser utilizado para realizar resúmenes de conferencias, estudios de películas o cualquier actividad que consista en localizar y estudiar partes concretas de una grabación. Para más información, visitad la página web del proyecto: www.ylatuya.es