Security: Context filtering in dLeyna
by Ludovic Ferrandis
Following email about context filtering in GUPnP, see message
<https://mail.gnome.org/archives/gupnp-list/2013-June/msg00011.html>
What would be the impacts on dLeyna?
There will be more development for this component.
First, there will be a white list by servers using GUPnP, that means one
for dleyna-server and one for dleyna-renderer.
That implies all applications using the same dLeyna component (server or
renderer) will share the same white list.
We need to provide APIs, so applications could manage their own white list.
We need also to provide a signal, so applications using the same dLeyna
component, will be warned when another application is making change to
the white list.
How to manage the white list?
dLeyna won't store any white list. It will just provide APIs, so
applications are going to be able to manage their own white list.
dLeyna won't provide a default white list, nor store a default white
list in its preferences.
dLeyna dbus API:
interface: com.intel.dLeynaServer.Manager
Methods:
WhiteListEnable(b enable) -> void
WhiteListAddInterface(s interface) -> b
WhiteListRemoveInterface(s interface) -> b
WhiteListGetInterface() -> as
WhiteListResetInterface() -> void
s interface: a semi colon separated string list
Signal:
WhiteListChanged(s)
Return the list of interface currently in the white list.
interface: a semi colon separated string list
Property:
WhiteListEnabled -> b (read only)
Any comments are welcome.
Thanks,
Ludovic
--
Ludovic Ferrandis
Open Source Technology Center
Intel Corporation
8 years, 12 months
New stable release of the dLeyna components
by Mark Ryan
Hi All,
I'd like to announce the first stable release of dLeyna. The release
was actually made 3 weeks ago but it's taken me a really long time to
get around to sending the announcement. Apologies for this.
The release is stable in that we have created a separate branch for this
release in the various repos and we will only make critical bug fixes on
these branches. No API changes will be allowed in the 0.1 branches.
The releases can be downloaded from 01.org
https://01.org/dleyna/downloads/2013/dleyna-0.1.0
The following components form part of this release:
dleyna-connector-dbus-0.1.0
dleyna-core-0.1.0
dleyna-renderer-0.1.1
dleyna-server-0.1.1
dleyna-control-0.1.0
There have been quite a few changes to the dLeyna APIs since we moved to
the new repositories in March. A summary of what is new in the various
components can be found below:
dLeyna-server
-----------------
A brief overview of the changes that have been made to the various
interfaces is given below. Please refer to the API.txt file for more
detailed information about the new signals, methods and properties.
Several new methods have been introduced.
- com.intel.dLeynaServer.Manager.Rescan() -> void
Forces a rescan for DMSs on the local area network. This is useful to
discard DMSs which have shut down without sending BYE messages or to
discover new DMSs which for some reason were not detected when either
they or the device on which dLeyna-server runs was started or joined the
network.
- com.intel.UPnP.MediaDevice.GetIcon(s RequestedMimeType, s Resolution)
-> (ay Bytes, s MimeType)
Returns an in memory copy of the DMS's icon. This is a helper function
for client applications as it prevents them from having to issue a HTTP
request to retrieve the icon. The URL is still available so they are
free to continue doing so if they wish.
- org.gnome.MediaObject2.GetMetaData() -> s
Returns the object meta data information in DIDL-Lite XML format. This
method is needed to create certifiable DMCs. When a DMC instructs a DMR
to play a file hosted on a DMS it should pass the DMR the meta data of
the file, in addition to its URL. The DMR can not retrieve this
information by itself and it needs this information to retrieve the DLNA
flags for the file, e.g., to discover if the DMS supports server side
trick modes when streaming this file.
- org.gnome.UPnP.MediaContainer2.GetCompatibleResources(s protocol_info,
as filter) -> a{sv}
dLeyna-server now supports the retrieval of resources for containers.
Sometimes a container will have one or more resources, typically when
a container provides playlist files, e.g., M3U or DIDL-S for its
contents. These playlist files are useful for DMCs, which can retrieve
the playlist, hand it to a DMR and then exit. The DMR can continue to
play the playlist even though the DMC has exited as it has the playlist
file which contains the URLs. A container may have multiple resources,
for example if it supports multiple playlist formats. This method would
be called a by DMC using the protocol info of a renderer. The method
will then return the resource compatible with the renderer if such a
resource exists.
- org.gnome.UPnP.MediaContainer2.CreateReference(o ObjectPath) -> o
ObjectPath
The CreateReference method creates a reference in the container to the
object identified by the ObjectPath parameter. This method returns the
d-Bus path of the newly created reference. This is useful for creating
playlists.
Two methods have been removed
- com.intel.UPnP.MediaDevice.CreatePlayListInAnyContainer
- org.gnome.UPnP.MediaContainer2.CreatePlayList
Playlists should be created with the CreateContainer methods and
populated with the CreateReference method.
The following changes have been made to properties:
- com.intel.UPnP.MediaDevice.SearchCaps and
com.intel.UPnP.MediaDevice.SortCaps now support the wildcard '*'. This
means that the DMS supports searching and sorting on all fields.
Previously, this information was not propagated to clients.
- The following new properties have been added to org.gnome.UPnP.MediaItem2
- DLNAConversion a{sb} Indicates whether the resource exposed
directly in the item object has been transcoded.
- DLNAFlags a{sb} Provides loads of information about resource
exposed directly in the item object
- DLNAOperation a{sb} Indicates whether HTTP Range seek or TimeSeek
or both are supported.
- A number of new groups of properties have been added to the
org.gnome.UPnP.MediaContainer2 interface.
- In the first group there is single property called Resources:
- Resources aa{sv} Returns the set of resources associated with a
container. As explained above these resources are typically playlists.
Not all containers have resources.
- The second group of properties contain the same value as one of the
resources.
The following new properties have been added.
- DLNAProfile s
- MIMEType s
- Size x
- UpdateCount u
- URLs as
This is either the first resource or the first resource that is
compatible with the protocol info passed to SetProtocolInfo. Typically,
these properties will correspond to a playlist.
- A third group of properties have been added. These are:
- DLNAConversion a{sb}
- DLNAFlags a{sb}
- DLNAOperation a{sb}
Their values are mostly meaningless for containers, apart from
perhaps the DLNA conversion filag property which indicates whether or
not a resource, e.g., a playlist has been transcoded.
dLeyna-renderer:
----------------
Four new methods have been introduced.
- com.intel.dLeynaRenderer.Manager.Rescan() -> void
Forces a rescan for DMRs on the local area network. This is useful to
discard DMRs which have shut down without sending BYE messages or to
discover new DMRs which for some reason were not detected when either
they or the device on which dLeyna-server runs was started or joined the
network.
- com.intel.dLeynaRenderer.RendererDevice.GetIcon(s RequestedMimeType, s
Resolution) -> (ay Bytes, s MimeType)
Returns an in memory copy of the DMR's icon. This is a helper function
for client applications as it prevents them from having to issue a HTTP
request to retrieve the icon. The URL is still available so they are
free to continue doing so if they wish.
- org.mpris.MediaPlayer2.Player.GotoTrack(u TrackNumber) -> void
Performs a seek operation to the specified track number.
- org.mpris.MediaPlayer2.Player.OpenUriEx(s Uri, s Metadata) -> void
Identical to the org.mpris.MediaPlayer2.Player OpenUri method with one
exception. OpenUriEx takes an additional parameter, Metadata, to specify
the DIDL-Lite XML description of the item to be opened. This is needed
for DMCs.
NOTE: The GetServers method has been renamed to GetRenderers
NOTE: The signals FoundServer and LostServer have been renamed to
FoundRenderer and LostRenderer
The following new properties have been added to the
org.mpris.MediaPlayer2.Player interface:
- CurrentTrack u
The the sequence number of the currently selected track.
- NumberOfTracks u
The number of tracks in the currently selected media.
- Mute b
The mute setting of the master audio channel. This property is read/write
dLeyna-core:
-------------
A number of bug fixes where made to prevent the dLeyna services from
crashing under certain circumstances during shutdown.
dLeyna-connector-dbus:
---------------------
No significant changes
dLeyna-control:
-----------------
A number of improvements have been made to dLeyna-control.
- A lot of work has been done to make dLeyna-control more asynchronous.
Previously, dleyna-control called dLeyna functions synchronously which
meant the UI was blocked until these functions returned. Everything is
now asynchronous.
- The model that implements the search and browse views has been
re-written. It is now much simpler and copes with servers that do not
provide information about the total amount of items that match a search
query.
- dLeyna-control now uses GTK+ 3.x and GStreamer 1.x. Previously, it
was using GStreamer 0.10 and pygtk. Unfortunately, this change seems to
be causing compatibility problems with older distros. We are investigation.
- dLeyna-control now respects the SortCaps property. Columns in the
views are now clickable only if the server supports sorting by these
properties.
- The player window has been redesigned and seeking can now be done
while a track is playing.
Best Regards,
Mark
9 years
non-compliant MediaObject2.Type values
by Jussi Kukkonen
Hi,
First, doc/API.txt seems to be missing from dleyna-server repo. If the
idea is that only web page is updated, we should probably include a
url in docs/.
API.txt from media-service-upnp says this (looking at code, it seems
to accurately describe dleyna-server):
> Additional Values for the Type Property:
> ----------------------------------------
>
> The Type property tells what kind of object we are dealing with and
> which can take the below values in addition to those described
> in MediaServer2Spec specification (3).
> in case of Items:
> 'video.musicclip', 'video.broadcast'
> 'audio.broadcast', 'audio.book',
> 'playlist', 'item'
> and in case of Containers:
> 'album', 'album.music', 'album.photo'
> 'person', 'person.musicartist'
> 'genre', 'genre.music', 'genre.movie'
I think this is a mistake and makes the implementation non-compliant
with the org.gnome.MediaObject2 spec in a way that is harmful to
client developers. I realise there are other places where
dleyna-server does not implement some things or implements additional
things, but this is more problematic, basically an API break: The
MediaObject2 spec clearly says containers _must_ have type
"container", and applications will rely on that. Adding new types will
break clients.
As an example of this, dleyna-control makes this mistake -- I can't
browse by artist or genre:
https://github.com/01org/dleyna-control/issues/8. As another example
even the same document (API.txt) includes this example:
> def tree(server_path, level=0):
> bus = dbus.SessionBus()
> container = dbus.Interface(bus.get_object(
> 'com.intel.media-service-upnp', server_path),
> 'org.gnome.UPnP.MediaContainer2')
> objects = container.ListChildren(0, 0, ["DisplayName", "Path", "Type"])
> for props in objects:
> print " " * (level * 4) + ( props["DisplayName"] +
> " : (" + props["Path"]+ ")")
> if props["Type"] == "container":
> tree(props["Path"], level + 1)
I believe this will not work for all containers.
If the additional container types are required, could we add another
property for them instead?
- Jussi
9 years
Question regards dleyna-server
by Guanhua Wang
Dear Sir,
Thanks for the great work of dleyna!! And I have some questions to ask
about it, any help would be most appreciated.
I am trying to use the dleyna-server's test code, the mediaconsole.py to
discover the media files on media servers within the LAN and I run into
some other problems. I can not directly browse the folders by using the
listChildren() method, I use the search() method instead and I found some
sub containers there, and I defined new container by using the sub
container's path and do this recursively until I got into the folders that
directly have the media.
As for "Music" which also means "audio", I could find out the properties of
each item now by using search() method, but as for the image and video,
when I try to use search() method to read the properties of the items, the
problem shows up like this:
>>> root.search('Type derivedfrom "image"', 0, 5, ["DisplayName",
... "Path", "URLs"], "-DisplayName")
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "mediaconsole.py", line 117, in search
count, fltr, sort)
File "/usr/lib/python2.7/dist-packages/dbus/proxies.py", line 70, in
__call__
return self._proxy_method(*args, **keywords)
File "/usr/lib/python2.7/dist-packages/dbus/proxies.py", line 145, in
__call__
**keywords)
File "/usr/lib/python2.7/dist-packages/dbus/connection.py", line 651, in
call_blocking
message, timeout)
dbus.exceptions.DBusException: com.intel.dleyna.OperationFailed: Unable to
parse results of search: Could not parse DIDL-Lite XML
Could you tell me how to deal with this one? Any help would be most
appreciated!!!
Thank you,
Regards,
Guanhua
9 years
dLeyna granted DLNA software certification
by Oueslati, Hatem
Dear dLeyna community members,
A lot of activities are going on, leveraging on our joint committed efforts and development progresses.
We thank you for your contributions.
We'd like to share with you some news and updates, and we're looking forward to continuing doing so on a regular basis:
We're really excited, and proud to announce that the Digital Media Controller application, named Cloud-dLeyna, has been granted DLNA software certification (see the official document<http://certification.dlna.org/certs/REG21002848.pdf>). Cloud-dLeyna<https://github.com/01org/cloud-dleyna> is the open source HTML5 application built using the dLeyna APIs.
The certification of this application demonstrates the maturity of the client side DLNA APIs and should enable the community that uses dLeyna to easily obtain DLNA certification for their own media controller applications and DLNA capable products.
This has been the first time ever, an open source stack has obtained DLNA software certification. For our first try, it has been a great learning experience and a very exciting path from the initial implementation to raising the stack to this level of features completeness and industrial quality.
Furthermore, the dLeyna stack has been presented and demoed by Mark Ryan to the Genivi "Connectivity Expert Group" in Barcelona on April 25th. Genivi is an industry alliance committed to driving the broad adoption of an In-Vehicle Infotainment (IVI) open-source development platform. The alliance aims to align requirements, deliver reference implementations, offer certification programs, and foster a vibrant open-source IVI community (including to name just a few: BMW, Jaguar-LandRover, Nissan, PSA, Intel, Harman, ...etc).
In addition, Mark gave a talk about dLeyna and Rygel at Automotive Linux Summit in Tokyo at the end of May. Check out the slides (http://events.linuxfoundation.org/sites/events/files/alss13_ryan.pdf) and the video of the talk (http://www.youtube.com/watch?v=FJZAEF3ngPY).
We welcome Emanuele Aina and Reynaldo Verdejo Pinochet from Collabora to the team. Emanuele helps us to package the stack for Debian, and integrate DLNA features leveraging on dLeyna's API into Gnome applications GNOME Photos and Totem (through Grilo).
Reynaldo helps us to port dLeyna and Rygel on the Android operating system.
Part of the interesting work ongoing with dLeyna too, Mirsal Ennaime, who is one of the VLC maintainers based in France, is currently integrating DLNA capabilities into VLC thanks to the dLeyna's API.
For people who are using Yocto, Ross Burton integrated dLeyna services into meta-oe/meta-multimedia.
Last, we will definitely attend the DLNA plugfest #35 from July 15-19, occurring in Montpellier, where the dLeyna team will be checking the interoperability of the latest developments against the other attendees' implementations. If you happen to be there, please stop by and talk with us (especially with a beer in hands which Mark, very respectful of his Irish traditions, won't refuse :)).
Once again, we thank you for your contributions and look forward to more exciting news.
The dLeyna team
PS: if they are any other activity going on, making use of dLeyna, that you are aware of and would like to see mentioned here, please contact us. We'll be glad to send such updates on a regular basis.
---------------------------------------------------------------------
Intel Corporation SAS (French simplified joint stock company)
Registered headquarters: "Les Montalets"- 2, rue de Paris,
92196 Meudon Cedex, France
Registration Number: 302 456 199 R.C.S. NANTERRE
Capital: 4,572,000 Euros
This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
9 years
Re: [dLeyna] [rygel] building rygel error
by Auro Tripathy
Thanks Mark and Jens,
I have a version running with a minor problem.
For every item indexed, I see the message below. Can you please give me guidance on getting rid of this.
(rygel:2648): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
(rygel:2648): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
My build steps below...
#Get the PPAs as suggested by the Rygel team
sudo add-apt-repository ppa:gstreamer-developers/ppa
sudo apt-get update
sudo add-apt-repository ppa:vala-team
sudo apt-get update
sudo add-apt-repository ppa:yg-jensge/gupnp-unstable
sudo apt-get update
#install gstreamer 1.0
sudo apt-get install gstreamer1.0-tools gir1.2-gstreamer-1.0 gir1.2-gst-plugins-base-1.0 gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad gstreamer1.0-libav
#get specific versions of vala components
sudo apt-get install valac-0.18 vala-0.18-doc valac-0.18-dbg
#check the version (should be 0.18)
valac --version
#now get everything but valac; you already have that
sudo apt-get install tracker libgee-dev libsqlite3-dev libsoup2.4-dev uuid-dev xsltproc docbook-xsl gnome-common gtk-doc-tools
#install some dependencies, we're installing binaries for now, source later
sudo apt-get install dpkg-dev
sudo apt-get install gupnp-1.0
sudo apt-get install gee-0.8
sudo apt-get install gupnp-av-1.0
sudo apt-get install gupnp-dlna-2.0
#### The following package could not be found and is not needed since we're using sqlite db
#### sudo apt-get install tracker-sparql-0.16 *** needs to be investigated
$now install the rygel source
sudo apt-get source rygel
#source should be in rygel-0.19.1
cd rygel-0.19.1/
sudo ./configure --disable-tracker-plugin
sudo make
sudo make install
________________________________________
From: rygel-list [rygel-list-bounces(a)gnome.org] on behalf of Jens Georg [mail(a)jensge.org]
Sent: Thursday, June 06, 2013 3:30 AM
To: dleyna(a)lists.01.org
Cc: rygel-list(a)gnome.org
Subject: Re: [dLeyna] [rygel] building rygel error
On Thu, 2013-06-06 at 12:03 +0200, Mark Ryan wrote:
> Hi Auro,
>
> On 06/05/2013 07:02 PM, Auro Tripathy wrote:> [cross-posted on
> rygel-list as well since I’m blocked by this issue]
>
>
> I don't see this email on the Rygel mailing list
Auro apparently used the wrong mail address to send to the rygel list.
it's rygel-list(a)gnome.org.
> > Hi rygel devs:
> >
> > I’m building rygel with the instructions in
> > https://live.gnome.org/Rygel/Building on unbuntu 12.04
>
> Actually, I can't find this page so I'm not sure what the instructions
> recommend.
Build instructions for Ubuntu 10.10 and Rygel < 0.17 :)
> > checking for gupnp-dlna-2.0 gstreamer-1.0 gstreamer-pbutils-1.0 vala
> > bindings... configure: error: Package requirements were not met:
> > gupnp-dlna-2.0 gstreamer-1.0
> >
> > gstreamer-pbutils-1.0
> >
> > error: Package `gupnp-dlna-2.0' not found in specified Vala API
> > directories or GObject-Introspection GIR directories
>
>
> AFAIK, the Ubuntu 12.04 does not have the gupnp-dlna-2.0 package. It
> also probably ships with versions of the other GUPnP libraries that are
> too old, e.g., GUPnP, GSSDP, and GUPnP-AV to build the latest version of
> Rygel. So you will need to download and compile these libraries
> yourself. Before building these libraries you first need to make sure
> that you have gobject introspection installed.
>
> sudo apt-get install libgirepository1.0-dev
That document is a bit outdated for recent Rygel. For 12.04, it's
probably easier to use this PPA
https://launchpad.net/~yg-jensge/+archive/gupnp-unstable and the
dependent PPAs listed there which give you the needed vala for rygel git
and gstreamer 1.0.
_______________________________________________
rygel-list mailing list
rygel-list(a)gnome.org
https://mail.gnome.org/mailman/listinfo/rygel-list
9 years
[rygel] building rygel error
by Auro Tripathy
[cross-posted on rygel-list as well since I'm blocked by this issue]
Hi rygel devs:
I'm building rygel with the instructions in https://live.gnome.org/Rygel/Building on unbuntu 12.04
At the autogen step (./autogen.sh --enable-uninstalled), I get the following error.
-----------------------
checking for gupnp-dlna-2.0 gstreamer-1.0 gstreamer-pbutils-1.0 vala bindings... configure: error: Package requirements were not met: gupnp-dlna-2.0 gstreamer-1.0
gstreamer-pbutils-1.0
error: Package `gupnp-dlna-2.0' not found in specified Vala API directories or GObject-Introspection GIR directories
------------------------
I have done one change to get this far.
1. Pointed all the vala-related executables to vala-0.18 in usr/local/. What was built in /home/rygel was vala-0.16.
Please give guidance.
-Auro
9 years
[dleyna-renderer] d-bus API changes
by Merlino, Regis
Hi all,
The following commit https://github.com/01org/dleyna-renderer/commit/e95c135e09a86196d55a8e54a...
changed the com.intel.dLeynaRenderer.Manager interface:
* GetServers() renamed GetRenderers()
* FoundServer renamed FoundRenderer
* LostServer renamed LostRenderer
Please update you applications accordingly if needed.
Regards,
Regis
---------------------------------------------------------------------
Intel Corporation SAS (French simplified joint stock company)
Registered headquarters: "Les Montalets"- 2, rue de Paris,
92196 Meudon Cedex, France
Registration Number: 302 456 199 R.C.S. NANTERRE
Capital: 4,572,000 Euros
This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
9 years