Tuesday, December 22, 2009

Rygel 0.4.8 (Till the Blood Runs Clear) is out!

Here goes the release log:

A bug-fix release in stable 0.4.x series to fix seeking in general and playback
for clients that always seek (Sony PS3).

Dependency-related changes:

- Require valac >= 0.7.10.

All contributors to this release:

Zeeshan Ali (Khattak) 

Download source tarball from here.

Friday, December 4, 2009

GSSDP 0.7.1 and GUPnP 0.13.2 released!

GSSDP 0.7.1 released!

- Don't leak target regex.
- Make GSSDPClient ignore Point to Point interfaces.
- Use SO_REUSEPORT if present. Darwin and some BSDs don't have SO_REUSEADDR, but
- If we can't create a request socket don't try to create a multicast socket.
- Have specific GError code for interfaces without an IP address.
- Actually remove gssdp_client_new_full().

Bugs fixed:

1898 - GSSDPClient keeps autoselecting my VPN
1810 - Not possible to run multiple ssdp clients on darwin
1800 - leak of a gregex in gssdp-resource-browser
1796 - gssdp_client_new_full is declared in header but not implemented

All contributors:

Olivier Crête 
Ross Burton 
Iain Holmes 
Mattias Wadman 
Zeeshan Ali (Khattak) 

Download release tarballs from here

GUPnP 0.13.2 released!

Changes since 0.13.1:

- Utilize libconic (Maemo5) if available.
- Unix context manager must signal the unavailibility of all contexts when
- Enable silent build rules if they are available.
- Fix race-conditions in client-side notification handling.
- Unix context manager ignores point-to-point interfaces.
- Context manager ignores interfaces without IP addresses.
- Don't require timeouts to be specified in subscription requests.
- Fix build against gcc 4.[1,2].
- Make network manager thread-safe.
- Remove idle source on dispose in context manager implementations.
- Warn in docs that gupnp_service_info_get_introspection() is evil and why.
- Service retrieves introspection data in truly async way.
- Fix some leaks.
- A bunch of code clean-ups.

All contributors:

Olivier Crête 
Zeeshan Ali (Khattak) 
Ross Burton 
Jens Georg 
Cem Eliguzel 

Bugs fixed:

1890 - Timeout parsing problem with SUBSCRIBE method
1880 - subscription/notification handling is racy
1906 - Tests failed with gupnp 0.13
1849 - Compile error when using gcc 4.[1,2] and strict aliasing
1494 - Ability to deal with multiple network interfaces
1881 - networkmanager interaction should use its own dbus connection

Download release tarballs from here

Saturday, November 28, 2009

We can has Python too

Zachary Goldberg reports:

As I've been mentioning lately I have been working on using PyGObject + GObject Introspection (recently forked, now called PyGI + PyGObject + Gobject Introspection) and have some exciting news!

I have been working on fleshing out a whole bunch of unit tests which exercise the entire GUPnP API. I hate a major roadblock in that PyGI did not support native callbacks! So, after a week or two detour I have implemented PyGI callbacks (which now work rather nicely, but need a bunch of stylistic cleanups and error checking before its pushed back upstream.. priorities!) as well as some working GUPnP demos.

My best demo so far is about 25 lines of python which:

1) Gets all devices on one network interface
2) Scans for all the services each device provides
3) If the device is GMediaRenderer and it provides an AVTransport Service (it does...) then it
3a) Stops whatever is currently playing
3b) Loads a new URI (hardcoded from my mediatomb server for now, havn't played enough with gupnp-av to dynamically get the mediatomb data -- for now!)
3c) Initiates playing

3a->3c have been tested using the synchronous GUPnP action api (send_action...) as well as the asynchronous API (begin_action.... end_action...) with callbacks!

Update: Seems this info is out-dated already, Zach has done quite some more after this.

Saturday, November 21, 2009

Video of Maemo summit talk

For those interested in UPnP/DLNA on Maemo and happen to miss Maemo summit, here is the video of my talk. You'll notice that slide screen is only half visible but that is not really a problem since you can access the slides here.

GUPnP AV, GUPnP Vala and Rygel releases

GUPnP AV 0.5.2

Changes since 0.5.1:

- Add a missing NULL check.
- Fix a potential leak of xmlDoc.
- Register a (g)type for GUPnPSearchCriteriaOp for better gtk-doc and
 vala-gen-introspect support.
- Fix docs for GUPnPSearchCriteriaParser::expression.
- Fix parsing of SearchCriteria strings: Closing parenthesis doesn't imply end
 of SearchCriteria expression.

All contributors to this release:

Zeeshan Ali (Khattak) 

Download source tarball from here.

GUPnP Vala 0.6.2

Changes since 0.6:

- Remove bogus type_argument from gupnp metadata.
- No need for custom bindings for SearchCriteriaParser.

Dependency-related changes:

- Require vala >= 0.7.8.
- Require and adapt to gupnp-av >= 0.5.2.

Bugs fixed:

1850 - Vapi for ServiceAction.get_message is wrong

All contributors:

Zeeshan Ali (Khattak) 
Jens Georg 

Download source tarball from here.

Rygel 0.4.6 (They've Got a Secret)

Brief summary of changes since 0.4.4:

- Implement optional UPnP Search action. This is not only a must have feature
 for a commercial MediaServer but is also a big first step towards proper
 XBox 360 support.
- Simplify Browse action handling.
- Simplify MediaServer plugin implementation.
- Make sure autostart dir exists before attempting to write to it.
- Fix a potential crash that is trigered by MediaContainer reporting incorrect
 (higher) number of children.
- External:
 - Work around (vala) bug#602003.
 - Optimizations and code clean-ups.
- Tracker:
 - Provide an efficient Search implementation using Tracker's search API.
 - Minor code clean-ups.

Dependency-related changes:

- Require gupnp-av >= 0.5.2.
- Require gupnp-vala >= 0.6.2.
- Require valac >= 0.7.9.

Bugs fixed in this release:

600256 - Segfault when trying to access a stream

All contributors to this release:

Zeeshan Ali (Khattak) 

Download source tarball from here.

Saturday, November 14, 2009

Some important definitions

The information on this page is essential for everyone out there who is even tiny bit interested in UPnP/DLNA.

Tuesday, October 27, 2009

Rygel 0.4.4 (Green & Mean) is out!

Here goes the release log:

Brief summary of changes since 0.4.2:

- Provide a gstreamer-based MediaRenderer plugin. This is mostly code stolen (
  and heavily adapted) from gupnp-media-renderer except that it doesn't depend
  on libowl-av and/or gtk+.
- More ease for MediaServer implementors.
- Better error handling.
- Make sure no message is suppressed until we know what level of console output
  user wants.
- Make use of vala's async support to simplify code quite a bit.
- Plugins should load xml files from source tree when built with
  '--enable-uninstalled' configure flag.
- Build with no optimizations in debug mode.
- Use closure table to speed up object lookup and deletion.
- Add build option for SQL debugging.
- Workaround a crasher bug (#3774) in sqlite 3.6.12.
- Use vala's static client D-Bus syntax.
- Early ignorance of disabled plugins. This not only speeds-up startup a bit but
  also rids us of redundant debug messages.
- MediaExport:
  - Nicely handle unavailability of gstreamer's playbin(2) element.
  - Fix a potential crasher.
- Tracker:
  - Use multidimensional arrays to deal with search results. This combined with
    static client D-Bus syntax gives us quite a speed boost.
  - Handle item creation error.
- External:
  - Allow applications to provide custom thumbnails for items.
  - Support pixel-aspect-ratio properties.
  - All D-Bus operations are now done asynchronously.
  - Make use of plugin icon if provided.
  - Move magic string substitution to core so other plugins can benefit from it.
- Lots of other improvements and bug fixes.

Dependency-related changes:

- Require and adapt to libgee >= 0.5.
- Require and adapt to valac >= 0.7.8.

Bugs fixed in this release:

597276 - Rygel crash on startup
587649 - thumbnails not published for external media servers
589959 - External plugin should query media servers on demand
598005 - unable to load media-tracker plugin

All contributors to this release:

Zeeshan Ali (Khattak) 
Jens Georg 
Thijs Vermeir 

Download source tarball from here.

Wednesday, October 7, 2009

GUPnP 0.13.1 released

GUPnP 0.13.1 is out!

Release log:

Changes since 0.13:

- Use unix context manager if NetworkManager service is not available.
- Fix some minor leaks.

All contributors:

Zeeshan Ali (Khattak) 
Ross Burton 

Download source tarballs from here

Saturday, October 3, 2009

Rygel 0.4.2 (Thank God It's Friday, Again)

I always forget to announce the micro releases here. Here it is now:

Brief summary of changes since 0.4.1:

- Ability to specify verbosity of console messages by a number between 0 to 5.
- Be able to survive unavailability of D-Bus session bus. This should make it easier to setup Rygel on headless NAS machines.
- MediaExport:
 - Provide duration and date of media.
 - Improved guessing for type (UPnP class) of media.
 - Re-harvest metadata when a file/directory is modified.
 - Speed-up browsing (twice as before).
- rygel-preferences:
 - Fix enabling/disabling of widgets.
 - Copy the desktop file from correct location.
- Mediathek and GstLaunch disabled by default in the user configuration.
- Add GstLaunch to maemo configuration (disabled by default though).
- Put dbus-glib-1 to the list of vala API dependencies.
- Fix seek headers.
- Be more verbose at the end of configure.

Bugs fixed in this release:

596500 - Mpeg TS video files are mistaken for audio files
596213 - Wrong state for checkboxes
596327 - Enables some weird plugins by default
596330 - Missing some metadata

All contributors to this release:

Zeeshan Ali (Khattak) 
Jens Georg 

Download source tarball from here

Sunday, September 27, 2009

Rygel 0.4.1 (Even more fascinating!)

Soon after Rygel 0.4 was released, Peter Robinson pushed it for F12 and our good friend Bastien Nocera started testing it immediately. He found many issues and some of them were so critical that we immediately had to make a another release with fixes for those issues. Thanks Bastien!

Wednesday, September 23, 2009

Rygel 0.4 (Fascinating!) is out!

Rygel 0.4 (Fascinating!) is out!

As usual, the release announcement:

Brief summary of changes since 0.3:

- Rygel is no more just a MediaServer but rather a collection of DLNA (UPnP AV)
  services (devices in UPnP speak).
- Port to new GUPnP APIs. The biggest advantage of that is that we now have
  dynamic network support, i-e Rygel can attach/detach to/from a network
  interface as it goes up/down.
- Support for time-based seeking in transcoded streams.
- Random tweaks to transcoding pipelines.
- Provide a DBus service providing two functionalities:
   * Ability to tell Rygel to shutdown. Starting of Rygel is automatically
     handled by D-Bus since a .service file is provided by Rygel.
   * Ability to tell Rygel (MediaExport plugin actually) to (un)export URIs on
     the fly.
- Implement enabling/disabling of UPnP in the preferences.
- Configuration through command-line options.
- Use a .ini configuration file rather than gconf.
- Special default configuration for Maemo.
- Don't spam the user's config directory and instead keep the description files
  into a separate subdirectory.
- `make clean` doesn't clean the generated C files anymore.
- Remove "all rights reserved" part from all copyright headers.
- Remove integrated DVB plugin as DVBDaemon now implements the external plugin
  interface and hence dynamically glues to Rygel, just like PulseAudio.
- New classes to further ease the plugin implementation.
- (Un)pause the SoupMessage at the right time. This was causing a lot of delays
  when playing media on Sony PS3.
- Bitrate is supposed to be in bytes/second. Not really but tell that to writers
  of UPnP specification.
- Expose transcode formats in the GetProtocolInfo's source argument. This should
  make Sony Bravia TVs happy.
- Transcoder URIs are now sorted according to their distance from the original
- Provide "contentFeatures.dlna.org" header in the HTTP responses.
- Provide DLNA transferMode header in the HTTP responses.
- Only advertise internal URIs on local loopback interface.
- Replace 'ip' config by 'interface' so users can bind Rygel to interfaces
  rather than IP.
- Allow plugins to provide thumbnails.
- Add thumbnails (if available) for each item if none provided by plugins. This
  works both on the desktop and Maemo.
- Suppress all C compiler warnings by default. These warnings are mostly useless
  for us since almost all C code is generated.
- Preference dialog is now more like a GNOME preferences dialog.
- Provide .desktop file for preferences dialog.
- Shave the build output.
- GstLaunch: New plugin that exposes gstreamer pipelines described using
  familiar gst-launch syntax in the user configuration.
- Tracker plugin:
  - Nicer default title.
  - Better detection of Tracker availability. Apparently ubuntu folks think that
    providing a .service file is wrong.
  - Better titles for top-level folders.
  - More usable hierarchy: Browsing by artists, albums and tags.
- Folder plugin:
  - Rename to MediaExport.
  - Nicer default title.
  - Use the new Rygel classes to extract, export and save media metadata.
  - notify about updates to containers.
  - Skip files/folders starting with '.'.
  - Avoid crash if unknown file is found.
  - Delete gone directories on new start.
  - React on deletion of files.
  - Add recursive file monitoring.
  - Provide simple and easy options to add and remove files and folders from the
    preferences UI.
- External plugin:
  - actually use 'DLNAProfile' property.
  - Don't load the plugin more than once.
  - Utilise optional MediaItem properties.
  - Fetch items on demand.
  - Fix critical warnings.
- Mediathek plugin:
  - Fix crash if no config is available.

Dependency-related changes:

- Require gupnp >= 0.13
- Require gupnp-av >= 0.5
- Require GStreamer >= 0.10.23
- Require libgee >= 0.3.0

Bugs fixed in this release:

584649 - Folder plugin should not export dot files and directories
586108 - ID3 information not exported on mp3 files
588034 - Bad durations for audio video files with media export plugin
585986 - Some copyright headers claim "all rights reserved"
585989 - Running "make clean" should leave generated C files in place.
586134 - Tracker plugin fails if org.freedesktop.Tracker can't be activated,
         even if tracker is already running
586243 - GStreamer 0.10.23 required for correct operation of transcoder
587651 - Support for some MediaItem properties missing
587855 - HTTP Error responses not sent
587866 - No way to notify about new sub-containers
588030 - rygel-preferences crashes if user's config file is missing
588162 - Support seeking in transcoded content
589955 - dc:creator never included in DIDL output
589956 - git ignore rules
589974 - Set the bitrate for transcoded resources correctly.
589977 - Rygel not recognised by Sony Bravia televisions
590643 - refactor HTTP request handling code
590702 - Rygel should provide thumbnails for items
591580 - not compatible with Samsung UE46B7070
593228 - [plugin] new gstlaunch plugin

All contributors to this release:

Zeeshan Ali (Khattak) 
Jens Georg 
James Henstridge 
Thijs Vermeir 
Ole André Vadla Ravnås 

Download source tarball from here

Wednesday, September 9, 2009

We got thumbnails

I got thumbnails working in Rygel. :) Right now rygel doesn't generate the thumbnails on it's own but provide thumbnails if already generated by another application (e.g nautilus) and stored in the freedesktop or maemo (they are almost the same) standard location. It works on both desktop and N900 and now that gupnp stack has been released, a rygel release with this and some other cool features will arrive shortly. :)

Now it's very easy for me to find the videos of my friends.

GSSDP 0.7, GUPnP 0.13, GUPnP AV 0.5, GUPnP Tools 0.8 & GUPnP Vala 0.6

GSSDP 0.7 released!

Changes in this release:

- Join the multicast group on the specified interface.
- Put the message src timeout in the specified GMainContext.
- "host-ip" property moved from GUPnPContext to parent GSSDPClient.
- Use inet_aton instead of inet_addr and handle the error from it.
- gssdp-device-sniffer ported to GtkBuilder.
- Version-independent target match. This makes client forward and backward
compatible with resources that implement different version of the specs than
the client.
- Version-independent M-SEARCH response. This has the same effect as above but
only the other way around.
- GSSDPClient now binds to interface rather than IP.
- No need to find the default route.
- Add "active" property to GSSDPClient.
- Fix pkg-config paths.
- Add basic .gitignore.
- Other minor/internal changes.

Bugs fixed:

1621 - new gssdp timeout not added to the specific maincontext
1570 - gupnp doesn't set the pkgconfig lib dir correctly in 64 bit env

Dependencies dropped:

- libglade

All contributors:

Zeeshan Ali (Khattak)
Ross Burton
Jens Georg
Olivier Crête

GUPnP 0.13 released!

Changes since 0.12.8:

- Print reason when fail to fetch description doc
- Support for dynamic/multiple networks through a new class, ContextManager.
This class creates/destroys new context as new network interfaces go up/down.
It also provides two convenient methods to take care of control point and
device reference managment for you. Currently we have two implementations of
context manager:
* unix: The static but guaranteed to work on Unix, implementation. This is the
default if none chosen at configure-time.
* network-manager: A NetworkManager based implementation.
- Idle handlers should use the assigned GMainContext.
- Gracefully handle 'no root element in description' scenerio.
- "host-ip" property moved from GUPnPContext to parent GSSDPClient.
- ControlPoint set itself inactive before getting disposed.
- New function to retrieve the capabilities of a DLNA device as announced in
the device description.
- New function to retrieve the content of arbitrary elements in the device
- Fixed a crash that happens when service-proxy goes down before subscribtion to
it completes.
- Correct condition for SID being NULL.
- Don't create redundant proxies.
- Must not announce earlier versions of resources. This is strictly forbidden
according to the latest UPnP specs. Instead GSSDP now handles M-SEARCH
requests independent of version requested.
- Free app developer from hosting of description documents.
- New API to get SoupMessage associated with ServiceAction.
- Handle the SOAPAction header being missing.
- Fixed strrchr result checking.
- Provide and use a wrapper class for xmlDoc objects, GUPnPXMLDoc that is a
first-class gobject.
- New domains for XML errors.
- Many other minor fixes.

Bugs fixed:

1626 - Print reason when fail to fetch description doc
1769 - audit issues
1760 - missing/invalid SOAPAction header crashes gupnp
1705 - Provide a public API to get information about a GUPnPServiceAction's HTTP

Dependencies changed:

- gssdp >= 0.7

All contributors:

Zeeshan Ali (Khattak)
Ross Burton
Sven Neumann
Jens Georg
Steven Dorigotti

GUPnP AV 0.5 released!

Changes in this release:

- New completely object-oriented, much simpler and consistent API:
* GUPnPDIDLLiteResource & GUPnPDIDLLiteObject are now first-class GObjects.
* Convert the helper methods to read props and their attributes from DIDL-Lite
xml node into new first-class objects with writable properties:
- GUPnPDIDLLiteObject
- GUPnPDIDLLiteContainer
* GUPnPDIDLLiteObject provides a convenient method to get the compatible
resource given a SinkProtocolInfo string.
* A new class for dealing with protocolInfo fields: GUPnPProtocolInfo.
* A new class for dealing with DIDL-Lite descriptors: GUPnPDIDLLiteDescriptor.
* GUPnPDIDLLiteWriter now provides a much simpler API that is consistent with
rest of the GUPnP AV API.
* GUPnPDIDLLiteWriter now handles filtering of DIDL-Lite XML.
* Correct possible values of GUPnPDLNAFlags.
* Replace GUPnPDIDLLiteParserObjectCallback by following signals:
- object-available
- container-available
- item-available
- New Error domain for protocol related errors.
- Workaround for broken printf() implementations.
- Bitrate is in bytes/second and not bits/second.
- Enable DLL on windows.

Dependencies changed:

- gupnp >= 0.13

Bug fixes in this release:

1729 - bitrate checks in gupnp-dlna.c look wrong.
1579 - Minor fixes to enable dynamic library on windows

All contributors to this release:

Zeeshan Ali (Khattak)
Sven Neumann
Jens Georg
Ross Burton

GUPnP Tools 0.8 released:

Changes since 0.7.1:

- Add lenient mode: Just pick-up the first resource available.
- Specify filter in Browse actions to reduce network usage.
- Don't browse containers with no children.
- Always re-browse containers on updates.
- Update childCount after browsing is done.
- Support for multiple networks.
- Leave selection of resource to gupnp-av.
- No need to search for all UPnP resources anymore.
- Fix infinite loop in icon cancelation code.
- No need to care about hosting of description document anymore.
- Adapt to new gupnp-av API.
- Add cmdline option to gupnp-upload to specify network interface.
- Many other minor/internal fixes.

Dependencies changed:

- gssdp >= 0.7
- gupnp >= 0.13
- gupnp-av >= 0.5

All contributors:

Zeeshan Ali (Khattak)
Ross Burton

GUPnP Vala 0.6 released!

Changes since 0.5.4:

- Adapt to new gssdp, gupnp and gupnp-av APIs.
- Fix pkg-config paths.

Bugs fixed:

1570 - gupnp doesn't set the pkgconfig lib dir correctly in 64 bit env

Dependencies changed:

- gssdp >= 0.7
- gupnp >= 0.13
- gupnp-av >= 0.5

All contributors:

Zeeshan Ali (Khattak)
Ross Burton

WARNING: All these releases are API and ABI incompatible with previous releases.

Download source tarballs from: http://gupnp.org/sources/

Thursday, August 27, 2009

Maemo based Nokia N900 phone

So the Maemo-based Nokia N900 is finally announced. We are finally free to tell everyone the cool stuff we have been cooking all this time. My work on this device was mostly with UPnP/DLNA and MAFW, not counting my work from n800 that was re-used. GUPnP will soon be in your pocket, so those out there who doubt the greatness of this library, time to face the facts. :)

So now is the time to ask all the questions you have on our soon-in-the-shelves mobile phone. :)

Wednesday, June 3, 2009

GUPnP 0.12.8 released

Changes since 0.12.7

- Don't crash if device descriptions don't contain a root element.
- Fix pkg-config paths.
- Avoid using asserts.
- Use the closest match instead of using the icon that was last checked.
- Expect xmlRecoverMemory to fail.
- Reject action messages with zero content length.
- Change version in action answer.

Bug fixes in this release:

- bug#1570: gupnp doesn't set the pkgconfig lib dir correctly in 64 bit env.
- bug#1574: Avoid using asserts.
- bug#1592: gupnp_device_info_get_icon_url() does not return the closest match.
- bug#1604: Crash on action without any content.

All contributors to this release:

Ross Burton
Zeeshan Ali (Khattak)
Steven Dorigotti
Sven Neumann
Jens Georg

Download at: http://gupnp.org/sources/gupnp/gupnp-0.12.8.tar.gz

Saturday, May 30, 2009

Rygel 0.3 (Berlin is cool if it doesn't rain) is out

Rygel 0.3 (Berlin is cool if it doesn't rain) is out!

Here are is relase announcement:

Brief summary of changes since 0.2.2:

- Transcoding from any format (that gstreamer's decodebin2 can handle) to mp3,
linear PCM and mpeg transport stream containing mpeg 2 video and mp2 audio.
- Plugin API to deal with user preferences.
- User preferences UI: rygel-preferences.
- New plugins:
* Folder: Recursively exports folders specified in the user preferences.
* ZDFMediathek: Exports online media from 2nd German TV station.
* External: Exports media hierarchies provided by external applications
through implementation of this spec:
http://live.gnome.org/Rygel/MediaServer. The first application
that utilizes this feature is PulseAudio.
- Drop xbox support. It didn't work anyway and we better concentrate on
implementing standard stuff that it at least worthy of being called "UPnP" (
at least for now).
- Tracker and DVB plugins are only loaded if their corresponding services are
- Export of duration for music and video items from Tracker.
- Use HTTP EOF encoding rather the CHUNKED for live streams.
- Ability to build rygel plugins outside it's source tree.
- HTTP proxying only if needed.
- Now that gupnp-av does DLNA profile guessing for us, no need to lie about
DLNA profile anymore.
- Add a summary after configure.
- HTTServer is now internal API.
- Use git-version-gen to generate package version.
- Differentiate between modules and plugins
- Passive, asynchronous plugin loading. A side-effect of which is that modules
can now load more than one plugin.
- Differentiate between name and title of the plugin.
- Plugins can now dynamically change their availability.
- Add API to get/list plugins.
- Re-use existing description from user's home directory. This not only speeds
the start-up but also obsoletes the necessity to keep immutable data (e.g UDN)
in user preferences.
- Provide gconf schemas.
- Lots of other improvements and bug fixes.

Dependency-related changes:

- Explicitly require and link to libsoup-2.4 >= 2.26.0.
- Don't require Vala (and bindings) in distribution tarball.
- Require gupnp-av >= 0.4.
- Require Vala >= 0.7.3.
- Require Gtk+ >= 2.16 if preferences UI is not disabled.

Bugs fixed in this release:

582173 - git-version-gen: generate versions with - instead of .
577000 - gupnp-av-cp does not like & in uris
576998 - Rygel wants to transcode audio files to video/mpeg
575935 - Add support for duration metadata field
574604 – bug connecting to PS3

All contributors to this release:

Zeeshan Ali (Khattak)
Jens Georg
Henrique Ferreiro
Lennart Poettering
Marc-André Lureau
Rob Taylor

Download source tarball at: http://ftp.gnome.org/pub/GNOME/sources/rygel/0.3/

Here is me watching streams from 2nd German TV channel, transcoded to mpeg transport stream through Rygel on my PS3:

Here is the video clip if you are interested or don't believe me. :)

Tuesday, May 12, 2009

GUPnP Tools 0.7.1 released

Changes in this release:

- Use g_printerr() instead of g_critical() in case of problems.
- Initialize the GError to NULL at declaration.
- Declare variables as const to setisfy the compiler.
- Add missing casts.
- Use g_content_type_is_a() to compare mimetypes.
- Correct the order of mimetype check.
- Iterate over item resources rather than renderer protocols.
- Port all UIs to use GtkBuilder.
- Bump-up Gtk+ requirement to 2.16.

Removed dependency in this release: libglade.

Contributors to this release:

Sven Neumann <s.neumann@phase-zero.de>
Zeeshan Ali (Khattak) <zeeshanak@gnome.org>

Download tarball here:

Monday, April 27, 2009

GUPnP 0.12.7 released

GUPnP 0.12.7 released.

Changes in this release:

- Chain up dispose and finalize in GUPnPDeviceInfo
- Use a dedicated SoupSession for event handling
- Fix device icon fallback logic
- Fix user agent string
- Sanity check UDN while parsing

Download source tarball from: http://gupnp.org/sources/gupnp/gupnp-0.12.7.tar.gz

Contributors to this release:

Sven Neumann
Ross Burton
Zeeshan Ali

GUPnP on windows

I have been asked several times in the past if gupnp is portable enough. I always told them that I don't know for sure but the only problem i see is the low-level networking bits. Nobody really showed interest in actually trying it out on windows but then came Jens Georg. He managed to make gupnp stack and network-light working on windows within a weekend, despite the fact that some of his hours were wasted due to firewalls being enabled after a reboot and him forgetting about it. He has a small video of network-light running nicely on win32 on his blog.

Friday, April 17, 2009

My first Javascript app

Last night I tried to make a small app/script in javascript (gjs) and it actually worked. :) Here is the code:

const GLib = imports.gi.GLib;
const GUPnP = imports.gi.GUPnP;
const Mainloop = imports.mainloop;

// This doesn't start any threads
GLib.thread_init (null);

let context = new GUPnP.Context ({ main_context: null,
host_ip: null,
port: 0

let cp = new GUPnP.ControlPoint ({ client: context,
target: "ssdp:all"

function onDeviceProxyAvailable (cp, proxy) {
log (proxy.get_friendly_name ());

// Tell us when there is a new device available
cp.connect ("device-proxy-available", onDeviceProxyAvailable);

// Search and listen for UPnP resources on the network
cp.set_active (true);

Mainloop.run ("0");

Sunday, April 12, 2009

GUPnP AV 0.4 and GUPnP Vala 0.5.4 released

GUPnP AV 0.4 released.

New in this release:

- Watch for empty DIDL-Lite nodes.
- Escape the URIs before putting them into DIDL-Lite XML.
- The '.' must be omitted from duration if fraction part is not included.
- Be more lenient when parsing DIDL-Lite XML fragments.
- Don't require the DLNA profile string.
- Try to guess the DLNA Profile if not provided and put "*" in the whole 4th
field of protocolInfo if our guess work fails.
- Make sure 4th field of protocolInfo is completely in compliance with DLNA
guidelines. This only implies one change in the API: enum dlna_play_speed is
replaced by play_speeds, a GList of allowed play speeds as strings.
- Use '1' and '0' to express boolean properties in DIDL-Lite XML.
- Other minor fixes.

All contributors to this release:

Henrique Ferreiro García
Peter Christensen
Sven Neumann
Zeeshan Ali (Khattak)

Download from here: http://gupnp.org/sources/gupnp-av/gupnp-av-0.4.tar.gz

GUPnP Vala 0.5.4 released.

A new minor release mainly to update the gupnp-av bindings.

Download from here: http://gupnp.org/sources/bindings/gupnp-vala-0.5.4.tar.gz

Saturday, March 28, 2009

Zakir Naik and evolution

This name must be alien to most of the people reading this blog but he is quite a popular in indo-sub continent. Recently a muslim friend of mine presented his arguments to me when we discussed evolution so I thought of watching one of his videos about the theory of evolution. The following are my notes on this video that I was supposed to send to my friend but then realized that it would be nice to 1. share it with others 2. have these available somewhere in public:

He starts his speech with the argument that in no book, it calls evolution a fact but theory. Now this only shows his ignorance about the very definition of a scientific theory and this alone should be enough to simply ignore anything such has to say about science. However I will not do that and listen to rest of his speech and address his arguments. Here is my notes on each of his arguments:

1. Quote from Darwin "I do not believe in natural selection, I do no believe in theory of evolution". First of all, could someone please provide me with a citation for this letter Darwin wrote? Although I have a gut feeling that he is just lying but putting that aside, he is talking about the very early days of Darwin when he was very young and hadn't yet really arrived at the theory of evolution so him not believing in it at that time should not be very surprising and have much (if any) weight as an argument.

2. He presented an argument about Darwin admitting missing links that I couldn't quite catch despite the fact I heard it again and again. If he is just talking about missing links themselves, he seems to be ignorant of an important fact that Darwin was able to correctly predict at least a few missing links to be found later that really where found later just like he predicted.

3. The *only* reason theory of evolution is taught everywhere now a days is that church has been against science and theory of evolution goes against the church. I am sorry but this is such a stupid thing to say. This might be able to explain why it's taught in western/Christian countries but how does this explain it being taught in China, Japan and India for example?

Also not all churches have always fought against theory of evolution. Some churches, like Lutheran got over it ages ago and they hadn't challenged the validity of evolution for a long time. In fact I personally know a Lutheran priest who recently wrote any article on how this theory doesn't go against the teaching of Bible.

Catholics have never really been against evolution and recently they've started to show signs of embracing it.

Notice the stress on *only*. This implicitly implies that he denies any evidence supporting it what so ever and that is something quite contrary to reality. If he had denied or challenged the validity of the big amount of evidence present, that would have been very different but simply denying it's existence is nothing but either utter ignorance or lie.

4. Then he describes the states of human evolution according to theory of evolution. He puts them in wrong order and he doesn't even seem to know that homo-sapiens is the name for the modern humans. Surprise surprise, he proves the theory of evolution wrong by criticizing these stages that he got wrong himself. This is just another example of his ignorance about this theory he is talking against so confidently.

5. He talks of 100s of scientists who are against theory of evolution including nobel prize winers but when he give examples, he is only able to mention one Nobel prize winning scientist. I tried to catch the name of that person but didn't quite catch his name or maybe (just maybe) this person doesn't actually exist?

All the other people who mentions, I have never heard of them and searching for their names on Internet doesn't bring-up much, unlike when you search for Albert Einstein, Richard Dawkins, Stephen Hawking and other big scientists in the recent times.

It could be just that I don't get to catch the names correctly and google isn't able to suggest anything better but I will appreciate if anyone could provide me this list of scientists.

6. He again come to "there is no proof whatsoever" and then he contradicts himself immediately after that saying "there is some proof on the microscopic level". If he had challenged the proof and/or evidence supporting evolution, that was another thing and I could think about that but simply denying the existence of any proof is simply making a loud noise about one's ignorance to me.

7. He then claims that evolution on microscopic level is not against the Quran so he simply accepts that as a fact. Thinking about this, I wonder where does Quran says that evolution can't happen on non-microscopic level? The only thing in evolution that really does conflict with Quran is evolution of man himself. So why make the difference between microscopic species and non-microscopic ones?

8. He then calculates the chances of evolution happening and comes up with a very small number. How does he do that? By completely keeping two very important facts from his calculation: 1. the incredibly huge amount of number of solar systems in this universe 2. The extremely long amount of time it took. I once saw a program on National Geographic in which they calculated the same probability with these importance facts in mind and they came up with a very big number.

9. He then goes on attacking the 'theory' that homosexuality is genetic, which he concludes by saying it is illogical. However I remember hearing the news 1-2 years ago about scientists finding the exact gene that causes a person to be homo-sexual. Not only that, they even found how it transfers from one generation to another. Anyway, this is off-topic and i don't have any reference so i'll let him win on this one. :)

10. At the end, he talks of the 'theory' that all man are descendants of one man. He says that it's just a theory so he doesn't quote it or anything but since it's in accordance with Quran, he predicts that in 100 years it will be proven. How exactly can he know that? What proof he has in support for this theory that he is comfortable with believing in that, even though it's just a 'theory'?

Looking at the history of all religions (including Islam), it's very easy to predict instead that they all will accept theory of evolution at some point, many in fact has already done so and some (Catholics) are showing signs of doing so in the near future. In fact, they will then claim that this theory was foretold in their religious books long time ago and present it as a big argument everywhere.

In the end, a very simple picture that shows one of the many evidence in favor of evolution (thanks Karl Lattimer for pointing it out):

Tuesday, March 24, 2009

Maemo community - Students Wanted

Just copy&paste from Valerio's blog to get this on planet GNOME:

The Maemo community is looking for talented students to join us in the Google Summer of Code initiative.

We already have a good pool of ideas, but we are also looking for students ideas in the mobile/embedded field, especially in the following areas:

* Location based apps;
* Context aware apps;
* Linux kernel advances, related to mobile/embedded;
* Social apps clients;
* Mobile/embedded apps in general that can benefit a wide range of platforms (maemo, openmoko, beagleboard, etc…).

More informations about Maemo @ GSoC can be found here.

Sunday, March 22, 2009

We have transcoding!

Since transcoding is one of the hottest feature almost every user expects from a decent modern MediaServer, I finally manged to put some time into implementing it. After two weeks of hacking, I finally have transcoding implemented in Rygel. Yay! The source format/codec could be anything that gstreamer's decodebin2 can handle. The target format/codec had to be specific and I currently support mp3, PCM and mp2 video + mp2 audio encapsulated in mpeg transport stream.

Before you ask, no! none of the above transcoding classes work against PS3 but PCM. So you can listen to your OGG vorbis file on your PS3, yes but no videos that are in format alien to PS3. With transcoding working with PCM, I don't think any PS3 user will miss transcoding to mp3 (especially keeping in mind the inevitable loss in quality because of transcoding from one lossy codec to another) but transcoding of videos is something users would want/need so I will look into why PS3 refuses the mpeg ts stream from Rygel, however I have a feeling that the problem is most probably not in my code but mpegtsmux gstreamer element. If that is the case, I might not be able to get to dig into this issue any time soon myself. However, anyone willing to contribute is welcome to look into this matter.

Saturday, March 7, 2009

Multiple networks and GUPnP

When GUPnP was first used at Maemo software, one of the first questions I was asked was: Can't GUPnP handle multiple network interfaces just like ClinkC (the now deprecated UPnP framework in Maemo)? The answer to that question was "yes but you have to take care of creating GUPnPContext objects for each network interface yourself" and that wasn't very convenient. This issue, accompanied by the fact that applications had to know when the interfaces go up and down to create and destroy the associated GUPnPContext object themselves, made the lives of application developers not so easy.

Recently when this issue was raised on the mailing-list and bugzilla by two different people, I started to think about how to solve this issue. Keeping in view Ross' advice I came-up with the following solution

A GUPnPContextManager class that basically just have two signals: "context-available" and "context-unavailable", that it uses to create/destroy and report GUPnPContext object for each network interface as it goes up/down. While the API was easy, the implemenation wasn't as there is no portable way of doing this. So what I did was that I wrote two different implementations that user (packager) can choose at configure time:
  1. GUPnPUnixContextManager: Unix-specific implementation of GUPnPContextManager that only checks for all the up interfaces and creates a GUPnPContext object for each one of them. It doesn't unfortunately have any way of knowing when the interfaces go down. One can monitor network interfaces using netlink but that will be linux-specific and therefore should go into a separate implementation. Such an implementation will also be something that will be feasable for maemo so in case you are interested in small tasks for maemo, this is yet another chance. :)
  2. GUPnPNetworkManager: Implementation of GUPnPContextManager based on NetworkManager. This is a full-features implementation and hence the default one.

Although I got this working last week, I realized that Jorn might have overlooked something in his great plan: Every GUPnPContext was joining and watching the multicast channel on the same (default) interface no matter which interface it was created for so the discovery/announcement part wasn't quite functional on each interface. Since this required some fundamental changes in GUPnP stack and the fact that it had been quite some time since I last touched unix socket APIs, it took me a week to get this right. Fortunately, GUPnP API/ABI didn't need to be broken for all this and all that changed in the API was the move of a property from one class in gupnp package to it's parent class in gssdp package (this implied deprecation of one getter and addition of another though).

So after two weeks of hard work, the world seems to be a better place now. The needed changes are yet to be reviewed and merged by Ross so for now if you are interested to try these out, you need to use my 'multinet' branches from gitorious repos:


Sunday, March 1, 2009

First time skied

So after 4 years in Finland, I finally got to ski for the first time ever in my life. It was so much fun but unfortunately also extremely tiring at least for a first timer like me who hadn't developed the needed muscles for it. Ansku took some pictures:

Monday, February 23, 2009

Rygel 0.2.2 is out

Changes since 0.2:

- Use the new (0.6.9) Tracker API.
- Priority of gio-based streams are based on requested DLNA transfer mode.
- GIO-based/like asynchronous plugin API.
- Adapt to latest changes in gupnp-vala API.
- Serialization of media objects isn't done by media objects themselves anymore, but by a new separate class, Rygel.DIDLLiteWriter.
- Internal API is marked 'internal' so it doesn't get to our (Vala) API.
- MediaObject now derives from GLib.Object.
- Generic AsyncResult implementation, SimpleAsyncResult.
- StateMachine interface that all state machines classes implement.
- Visible performance improvements in Tracker plugin by proper use of Tracker APIs.
- Use Filename.to_string() and therefore make Bastien happy.
- Require lastest version (0.1.5) of libgee to use List.slice().
- Don't limit the number of objects returned to a client, let it decide that on it's own.
- Proper handling of update notification to the client by use of a very simple bubble-up mechanism for containers to signal updates.
- Decrease needed gconf version to 2.16.
- Set application name and therefore make Lennart happy.
- Require latest version of vala (0.5.7) and gupnp-vala (0.5.3).
- Allow multiple URIs for each media items.
- Response for seekable media request is now sent buffer by buffer so the whole file is not put into memory.
- Some improvements to build system.
- Lots of other improvements and bugfixes.

Download source tarball from here:

Rygel is an implementation of the UPnP MediaServer V 2.0 specification
that is specifically designed for GNOME (Mobile). It is based on
GUPnP and is written (mostly) in Vala language. Project was
previously known as gupnp-media-server.

More info at: http://live.gnome.org/Rygel

GSSDP 0.6.4, GUPnP 0.12.6 and GUPnP Vala 0.5.3

GSSDP 0.6.4 released

New in this release:

- Send ssdp:byebye before sending the first ssdp:alive. [Jussi Kukkonen]
- Moderate the outbound SSDP messages. [Jussi Kukkonen]
- Documentation fixes. [Jussi Kukkonen]
- Send byebyes in dispose without sleep. [Jussi Kukkonen]
- Use g_set_error_literal(). [Jorn Baayen]
- Depend on glib 2.18. [Jorn Baayen]
- Do not byebye unavailable resources. [Jorn Baayen]
- All resources must respond to "ssdp:all" messages. [Hugo Calleja, Jorn Baayen]

Download from here: http://gupnp.org/sources/gssdp/gssdp-0.6.4.tar.gz

GUPnP 0.12.6 released:

New in this release:

- Port to FreeBSD. [Romain Tartière]
- Ship the XML files needed for example app. [Romain Tartière]
- Keep a reference on the control-point during signal emission. [Sven Neumann]
- Allow passing NULL to ControlPoint constructor, for default resource
factory. [Sven Neumann]
- Remove debug output that accidentally went in with the last commit.
[Sven Neumann]

Download from here: http://gupnp.org/sources/gupnp/gupnp-0.12.6.tar.gz

GUPnP Vala 0.5.3 released:

New in this release:

- Service::action_invoked.action is now 'owned' by the handler.
- Remove all generated files on `make clean`.
- Tell Vala that ServiceAction doesn't have ref/unref functions.
- Add a pkg-config file for gupnp-vala.
- Require latest vala, gssdp and gupnp.

Download from here: http://gupnp.org/sources/bindings/gupnp-vala-0.5.3.tar.gz

Tuesday, February 17, 2009

Writing Rygel plugins

While I had been trying my best to make sure writing Rygel plugins is easier than frying eggs before my FOSDEM presentation, I was quite disappointed about how the presentation actually went. I thought I simply lost everyone in there by the end of th presentation and didn't get to make a very good impression. But seems the ease of writing Rygel plugins didn't go unnoticed in that presentation after all since I happen to catch the attention of at least one developer, Jens Georg who is working on two plugins for Rygel and you can follow the progress on his blog.

Monday, February 2, 2009

Geek Humor

I was poked by a Salvatore Iovene, a very good friend and colleague from time to time to have a look at his comic series. I always thought I should have a look at it as it might be good but then I used to forget about it. Today he poked me again (this time when i was sitting in front of a computer) and I did have a look at it. Oh boy! this is some really great stuff. If you like Geek Humor, I strongly recommend it. Some trailor:

Saturday, January 31, 2009

XChat Guile 0.3

Changes in this release:

- Move/port to Guile-1.8.
- Get rid of all locking and thread stuff and in turn dep on gthread.
- Guile console. [Lionel Elie Mamane]
- Use alist instead of list where appropriate.
- Use XCHAT_EAT_* instead of hardcoded 0/1. [Lionel Elie Mamane]
- Fix memory leak in xchat_write. [Lionel Elie Mamane]
- We maintain this NEWS file from now on. :)
- Some other minor fixes.

Download release tarball from here:

What is it?

XChat-Guile is a plugin for XChat that enables XChat plugin writers to
write their plugins in Scheme language.


* XChat >= 2.4.1
* Guile >= 1.6.4

API Documentation: http://static.fi/~zeenix/xchat-guile/xchat-guile.txt

Tuesday, January 27, 2009

Regarding Mono project

Jeff explained to me on IRC how the mention of Mono in my last blog entry the way I put it, gives people the impression that I implied mono has anything to do with the issue. I really didn't mean to imply that so I am very sorry for causing this confusion. Now that I am writing this , I will make it very clear for the record that I do not have anything against the mono project. Quite on the contrary, I am extremely impressed by this great project and the service it has done for the Free Software world. Microsoft supporting the development of a Free Software project, never thought we'll ever achieve this but Miguel and his great team of hackers have made that possible.

Monday, January 26, 2009

Give Lennart a break

Even though Lennart has been working hard to make people lives easier, it seems some people are working hard to make his life harder by making discouraging comments not just about his ideas but the great work he has been putting up.

First of all, if you don't know why a sound server is needed on a modern desktop environment, you need to research about it (asking Lennart or anyone who knows *politely* might be a good start). Making a big fuzz of your ignorance and being proud of it won't help anyone, especially yourself. If you had asked this question from Lennart and he didn't give you a nice satisfactory answer at that time, it must have been because he must be getting really tired of answering this same exact question so many times, over and over again. That doesn't mean a sound server is not needed. No need to rush to conclusions. Ask someone else and/or research more. God is in the details.

Secondly, if Lennart's software breaks some proprietry shit, it's really not his fault and the last thing we need is some random mono-hacker who doesn't even know why a sound server is needed, to blog about Lennart being the guilty party.

Thirdly, there is nothing wrong with GNOME having a hard dependency on PA and there is no need to uninstall GNOME. This is as silly as saying "so if you don't want to have gtk installed on your machine, just stop using GUI apps or change desktop".

No really WTF do you guys want from him?

Thursday, January 22, 2009


Like many other Hacker fellows, I'll also be attending FOSDEM this year. I even have a talk at the GNOME devroom just like last year but this time I'll be mostly talking about Rygel rather than GUPnP. If you are coming to FOSDEM and happen to have any interest in Rygel, especially in how to write plugins for it don't forget to attend it.

Monday, January 19, 2009

Rygel 0.2 is out

Rygel 0.2 is out. Here is the release announcement:

The major change after last release (as gupnp-media-server) is the introduction
of a simple yet powerful plugin-based architecture/api: Everyone plugin:
- is loaded into a separate MediaServer instance.
- can implement any kind and number of resources (currently only services).
- can export an icon file.
- inherit it's ContentDirectory implementation from a base class that does most
of the UPnP-related work. More improvements on this planned for next release.
- use an intuitive API to easily export media from URIs and live GStreamer
source elements over HTTP.

Other changes:

- Relicense under LGPL to allow proprietary plugins and ease of moving code
from/to gupnp libraries.
- DVB Daemon integration though a plugin. Now you can watch live channels from
your PC on your PS3 for example.
- Test plugin that exports one audio and video item, streaming contents from
GStreamer's audiotestsrc and videotestsrc elements respectively.
- Better interoperability with Sony playstation 3.
- Announce unavailability to UPnP world on exit.
- Loads of other improvements.

Download source tarball from here:

Tuesday, January 6, 2009

GUPnP migrates to Git

Thanks to Ross and Richard Purdie, GUPnP moved to Git today. I already updated the jhbuild modulesets to reflect the new repos.