static void
_g_digicam_manager_class_init (GDigicamManagerClass
*klass)
{
GObjectClass *object_class = (GObjectClass*) klass;
g_assert (G_DIGICAM_IS_MANAGER_CLASS
(klass));
parent_class = g_type_class_peek_parent (klass);
g_type_class_add_private (klass, sizeof
(GDigicamManagerPrivate));
/* Override virtual functions */
object_class->finalize = _g_digicam_manager_finalize;
/**
* GDigicamManager::focus-done:
* @manager: the gdigicam manager
Juan A. Suárez Romero
jasuarez@igalia.com
Writing multimedia
applications with Grilo
Opening
Sources
Sources
Grilo
● Framework focused on making discovery and
browsing easy for application developers
● A single, high-level API for all the sources
● Plugins
● Provides access to multimedia content
● Extendable
Grilo
SOURCESOURCESOURCE
SOURCESOURCEMEDIA
SOURCESOURCE
METADATA
KEYS
creates
contains provides
Youtube
Jamendo
Flickr
IMDB
...
Audio
Video
Image
...
Title
Artist
Album
...
Totem
Totem
Requirements
● Define what we need
● Type of content
– Any kind?
– Only video? Music?
● Metadata keys
– URL
– Title
– Thumbnail
– ... 55 metadata keys
Content to show
● Ignore any source that does not provide Videos
● In “browse” view, ignore any source that does not
support browsing
● In “search” view, ignore any source that does not
support searching
Information to show
- Title
- Author
- Duration
- Thumbnail
- URL
- Title
- Author
- Duration
- Thumbnail
- URL
Browse Search
Invoke Grilo
- Title
- Author
- Duration
- Thumbnail
- URL
- Title
- Author
- Duration
- Thumbnail
- URL
Browse Search
Problems
● Two problems to solve
● Source not handling some keys
● Too much expensive to retrieve some keys
Totem
● Flags to control content retrieval
● Normal: provides the known requested content
– GRL_RESOLVE_NORMAL
● Fast only: provides the known requested content that
does not penalize the operation in terms of performance
– GRL_RESOLVE_FAST_ONLY
● Full: provides the known requested content using all the
available sources
– GRL_RESOLVE_FULL
Reduce the problems
● Request content in chunks
● Request fast only in first iteration
● While current chunk is visible
● Ask for each visible media element the discarded keys
(using full flag)
● URL key case: slow key and not shown in the UI
● Request it when user wants to play
GNOME Music
GNOME Music
Cover Art
GNOME Music
● Music defines its own structure
● Grilo's one is different
● Does not have concept of “Artist” or “Album”
● They are “boxes”
● Needs to sort the results
GNOME Music
Approaches
● Request content from Tracker directly
● Create Grilo Media elements to add missing information
(Cover Art)
● Instruct Grilo's Tracker plugin how to construct the
medias
● Use query() function
● Very specific to the plugin
● In case of Tracker plugin, use SPARQL to make the query
– First column is the media to build
– Use alias to map each SPARQL column to specific metadata keys
Closing
Other use-cases
● Application to upload audio/video content to web
services
● store() function
● Mediaplayer with auto-resume
● “playback-interrupted-time” key
● store_metadata() function
– Metadata Store source handles it
Show me a code
Resources
● Wiki
● http://live.gnome.org/Grilo
● Source code
● git://git.gnome.org/grilo
● git://git.gnome.org/grilo-plugins
● IRC
● #grilo at irc.gnome.org
● Mailing list
● http://mail.gnome.org/mailman/listinfo/grilo-list

Writing multimedia applications with Grilo

  • 1.
    static void _g_digicam_manager_class_init (GDigicamManagerClass *klass) { GObjectClass*object_class = (GObjectClass*) klass; g_assert (G_DIGICAM_IS_MANAGER_CLASS (klass)); parent_class = g_type_class_peek_parent (klass); g_type_class_add_private (klass, sizeof (GDigicamManagerPrivate)); /* Override virtual functions */ object_class->finalize = _g_digicam_manager_finalize; /** * GDigicamManager::focus-done: * @manager: the gdigicam manager Juan A. Suárez Romero jasuarez@igalia.com Writing multimedia applications with Grilo
  • 2.
  • 3.
  • 4.
  • 5.
    Grilo ● Framework focusedon making discovery and browsing easy for application developers ● A single, high-level API for all the sources ● Plugins ● Provides access to multimedia content ● Extendable
  • 6.
  • 7.
  • 8.
  • 9.
    Requirements ● Define whatwe need ● Type of content – Any kind? – Only video? Music? ● Metadata keys – URL – Title – Thumbnail – ... 55 metadata keys
  • 10.
    Content to show ●Ignore any source that does not provide Videos ● In “browse” view, ignore any source that does not support browsing ● In “search” view, ignore any source that does not support searching
  • 11.
    Information to show -Title - Author - Duration - Thumbnail - URL - Title - Author - Duration - Thumbnail - URL Browse Search
  • 12.
    Invoke Grilo - Title -Author - Duration - Thumbnail - URL - Title - Author - Duration - Thumbnail - URL Browse Search
  • 13.
    Problems ● Two problemsto solve ● Source not handling some keys ● Too much expensive to retrieve some keys
  • 14.
    Totem ● Flags tocontrol content retrieval ● Normal: provides the known requested content – GRL_RESOLVE_NORMAL ● Fast only: provides the known requested content that does not penalize the operation in terms of performance – GRL_RESOLVE_FAST_ONLY ● Full: provides the known requested content using all the available sources – GRL_RESOLVE_FULL
  • 15.
    Reduce the problems ●Request content in chunks ● Request fast only in first iteration ● While current chunk is visible ● Ask for each visible media element the discarded keys (using full flag) ● URL key case: slow key and not shown in the UI ● Request it when user wants to play
  • 16.
  • 17.
  • 18.
    GNOME Music ● Musicdefines its own structure ● Grilo's one is different ● Does not have concept of “Artist” or “Album” ● They are “boxes” ● Needs to sort the results
  • 19.
  • 20.
    Approaches ● Request contentfrom Tracker directly ● Create Grilo Media elements to add missing information (Cover Art) ● Instruct Grilo's Tracker plugin how to construct the medias ● Use query() function ● Very specific to the plugin ● In case of Tracker plugin, use SPARQL to make the query – First column is the media to build – Use alias to map each SPARQL column to specific metadata keys
  • 21.
  • 22.
    Other use-cases ● Applicationto upload audio/video content to web services ● store() function ● Mediaplayer with auto-resume ● “playback-interrupted-time” key ● store_metadata() function – Metadata Store source handles it
  • 23.
  • 24.
    Resources ● Wiki ● http://live.gnome.org/Grilo ●Source code ● git://git.gnome.org/grilo ● git://git.gnome.org/grilo-plugins ● IRC ● #grilo at irc.gnome.org ● Mailing list ● http://mail.gnome.org/mailman/listinfo/grilo-list