Showing posts from 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 .

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 SO_REUSEPORT. - 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 disposed. - Enable silent build rules if they are

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, h

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

Some important definitions

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

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

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

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

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!

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

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 Dependenc

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. :)

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:

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: 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 corre

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 < > Zeeshan Ali (Khattak) < > Download tarball here: gupnp-tools/gupnp-tools-0.7.1. tar.gz

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: 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 .

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 =; const 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); ("0");

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: gupnp-av/gupnp-av-0.4.tar.gz -----------------------------

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, coul

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 .

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 Ryg

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

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:

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-

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: 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]

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 .

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:

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. Requirements: ============= * XChat >= 2.4.1 * Guile >= 1.6.4 API Documentation:

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.

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


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.

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 respect

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.