Re-Arch: Rename and split components
by Ferrandis, Ludovic
Discussion open: <https://github.com/01org/media-service-upnp/issues/156>
*Summary:*
We have currently 3 components, MSU, RSU and Media-Service-Deo (MSD)
To optimize code, to make dLeyna more modular and as much as possible techo
independent (like dbus) or easily integrated in other techo (like
websocket) we need to reorganize the source.
In the same time, we are going to rename the components as
media-service-upnp or renderer-service-upnp are not really relevant.
The project should be split in various components described below:
- dleyna-core (The dLeyna common library)
- dleyna-server (Current MSU libray, without dbus)
- dleyna-renderer (Current RSU, without dbus)
- dleyna-dbus-server (dbus dameon that publish the dbus interface and
rely on dleyna-server)
- dleyna-dbus-renderer (dbus dameon that publish the dbus interface and
rely on dleyna-renderer)
- dleyna-demo (We could add various applications in sub-folders, DMP,
DMC).
In near future, see other TODO:
- dleyna-websocket-server
- dleyna-websocket-renderer
We have 2 choices to implement this architecture change.
1 - Create a single *dleyna* repository on github and then each library
will be manged in a sub folder
2 - Create a github repository by library
--
Ludovic Ferrandis
Open Source Technology Center
---------------------------------------------------------------------
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
8 years, 2 months
Announcing version 0.3.0 of renderer-service-upnp
by Mark D Ryan
Hi All,
Version 0.3.0 of renderer-service-upnp has been released.
The source can be downloaded from github
( https://github.com/01org/renderer-service-upnp/tarball/v0.3.0 )
The main changes are
- Added a rendererconsole.py test script that allows
renderer-service-upnp to be tested from the command
line.
- Renderer-service-upnp's command processing architecture has been
re-worked.
- Only commands executed by a client on a specific server
are now executed sequentially. All other commands can be executed
in parallel.
- It is now possible for clients to cancel commands.
https://github.com/01org/renderer-service-upnp/issues/35
- Renderer-service-upnp now correctly computes the DLNA profile of
files it pushes to renderers
https://github.com/01org/renderer-service-upnp/issues/50
- The test tool cap.py now allows users to chose a file from a
file chooser dialog to push to renderers.
The following people contributed to the release
Sébastien Bianti <sebastien.bianti(a)linux.intel.com>
Ludovic Ferrandis <ludovic.ferrandis(a)intel.com>
Regis Merlino <regis.merlino(a)intel.com>
Christophe Guiraud <christophe.guiraud(a)intel.com>
Mark Ryan <mark.d.ryan(a)intel.com>
Regards,
Mark
8 years, 4 months
[media-service-upnp] Availability of a Download Synchronization Controller test application
by Regis Merlino
Hi All,
I want to announce the availability of a new python test application for
media-service-upnp, located in its test sub-directory.
The application implements a Download Synchronization Controller as
described in the DLNA guidelines. For now, only the off-line mode is
managed and the LastChange notifications are not yet supported.
Basically, the application obtains a list of changes that occurred on
one or more media servers since the last synchronization and transfers
the relevant content from the server(s) to a local storage.
To start and use the Download Sync Controller do the following:
/$ ./dsc.sh//
//Running servers: //
//Regis's media Tracked(False)
uuid:fd4204a1-fdef-4eba-bc31-a96eccf089d1
/com/intel/MediaServiceUPnP/server/0 //
////
//"controller" instance is ready for use. //
//Type "help(DscController)" for more details and usage samples. //
//>>> /
The first thing to do is to add some servers to the tracked list:
/>>> controller.track('/com/intel/MediaServiceUPnP/server/0')//
//>>> controller.servers() //
//Running servers: //
//Regis's media Tracked(True)
uuid:fd4204a1-fdef-4eba-bc31-a96eccf089d1
/com/intel/MediaServiceUPnP/server/0 /
The list is persisted across sessions so that you don't have to add the
same servers each time the controller is launched.
Then perform your first synchronization:
/>>> controller.sync() //
//Syncing... //
////
//Server uuid:fd4204a1-fdef-4eba-bc31-a96eccf089d1 needs *full* sync: //
//Resetting local contents for server
uuid:fd4204a1-fdef-4eba-bc31-a96eccf089d1 //
//Syncing container Pictures... //
//Syncing container Videos... //
//Syncing container All... //
// New media "blob.png" tracked //
// Downloading contents from
"http://127.0.0.1:49321/Tracker/i/QWxsUGljdHVyZXMsdXJuOnV1aWQ6NDI3NzZjYWEt..."
//
// into
"/home/rmerlino/download-sync-controller/uuid:fd4204a1-fdef-4eba-bc31-a96eccf089d1/0-blob.png"...
//
// New media "icon.png" tracked //
// Downloading contents from
"http://127.0.0.1:49321/Tracker/i/QWxsUGljdHVyZXMsdXJuOnV1aWQ6NDRjYjlmN2Mt..."
//
// into
"/home/rmerlino/download-sync-controller/uuid:fd4204a1-fdef-4eba-bc31-a96eccf089d1/1-icon.png"...
//
// New media "product_logo.png" tracked //
// Downloading contents from
"http://127.0.0.1:49321/Tracker/i/QWxsUGljdHVyZXMsdXJuOnV1aWQ6NGNiOTMzZTIt..."
//
// into
"/home/rmerlino/download-sync-controller/uuid:fd4204a1-fdef-4eba-bc31-a96eccf089d1/2-product_logo.png"...
//
// New media "product_logo_48a.png" tracked //
// Downloading contents from
"http://127.0.0.1:49321/Tracker/i/QWxsUGljdHVyZXMsdXJuOnV1aWQ6YjQ3YWU4MzQt..."
//
// into
"/home/rmerlino/download-sync-controller/uuid:fd4204a1-fdef-4eba-bc31-a96eccf089d1/3-product_logo_48a.png"...
//
//Syncing container Titles... //
//Syncing container Year... //
//Syncing container B... //
// New media "blob.png" tracked //
//Syncing container I... //
// New media "icon.png" tracked //
//Syncing container P... //
// New media "product_logo.png" tracked //
// New media "product_logo_48a.png" tracked //
//Syncing container 2012... //
// New media "blob.png" tracked //
// New media "icon.png" tracked //
// New media "product_logo.png" tracked //
// New media "product_logo_48a.png" tracked //
//Syncing container All... //
// New media "VIDEO0006.mp4" tracked //
// Downloading contents from
"http://127.0.0.1:49321/Tracker/i/QWxsVmlkZW9zLHVybjp1dWlkOjkzYjMwMmExLWVm..."
//
// into
"/home/rmerlino/download-sync-controller/uuid:fd4204a1-fdef-4eba-bc31-a96eccf089d1/4-VIDEO0006.mp4"...
//
//Syncing container Titles... //
//Syncing container Year... //
//Syncing container V... //
// New media "VIDEO0006.mp4" tracked //
//Syncing container 2012... //
// New media "VIDEO0006.mp4" tracked //
////
//Done. /
The controller discovers what changed on the servers (new files, deleted
files) and synchronizes the contents locally. The first synchronization
for a particular server is always a full synchronization.
To get more details on available commands, do the following:
/>>> help(controller)//
/
Enjoy!
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.
8 years, 4 months
[dleyna] RendererConsole
by Sébastien bianti
Hello All,
There is a python file in the test directory of renderer-service-upnp called rendererconsole.py.
It contains some python classes that make it easy to invoke the various renderer-service-upnp methods from python.
It is very close to mediaconsole.py (in media-service-upnp directory) in its use.
If renderer-service-upnp is well installed, you can launch this script as following to have a quick overview of what you can do :
$ python rendererconsole.py
The main function prints the list of renderers currently available in the local networks.
It also prints for each renderers the list of the DBus interfaces and the properties of the com.intel.UPnP.RendererDevice interface.
In interactive mode, you can do this as following :
$ python
>>> from rendererconsole import *
>>> manager_renderers = Manager()
>>> manager_renderers.renderers() # prints the renderers available
/com/intel/RendererServiceUPnP/server/0 : Audio/Video playback on MyLapTop
/com/intel/RendererServiceUPnP/server/1 : XBMC server
>>> renderer = Renderer("/com/intel/RendererServiceUPnP/server/0")
If mediaconsole is not accessible add temporarily its path :
>>> import sys
>>> sys.path.append("<dleyna_source_path>/media-service-upnp/test/")
So you can load its classes:
>>> from mediaconsole import *
>>> manager_media = UPNP()
>>> manager_media.servers()
My media /com/intel/MediaServiceUPnP/server/0
>>> root = Container("/com/intel/MediaServiceUPnP/server/0")
>>> root.search('Type derivedfrom "video"', 0, 5, ["DisplayName", "Path", "URLs"], "-DisplayName")
Total Items: 2346
…
{
"DisplayName": "movie_1.avi",
"Path": "/com/intel/MediaServiceUPnP/server/0/6633636233386339623830303338383838646661323366663938616666636536",
"URLs": [
"http://10.200.22.138:34941/MediaExport/i/ZjNjYjM4YzliODAwMzg4ODhkZmEyM2Zm..."
]
}
{
"DisplayName": "movie_2.avi",
"Path": "/com/intel/MediaServiceUPnP/server/0/6635346532303663343639363065323139626438306330616531326464633537",
"URLs": [
"http://10.200.22.138:34941/MediaExport/i/ZjU0ZTIwNmM0Njk2MGUyMTliZDgwYzBh..."
]
}
{
"DisplayName": "Avatar.mkv",
"Path": "/com/intel/MediaServiceUPnP/server/0/3262356661623662636563666365333535363933356563643165356135623737",
"URLs": [
"http://10.200.22.138:34941/MediaExport/i/MmI1ZmFiNmJjZWNmY2UzNTU2OTM1ZWNk..."
]
}
And finally play a file :
>>> renderer.open_uri("http://10.200.22.138:34941/MediaExport/i/MmI1ZmFiNmJjZWNmY2UzNTU2OTM1ZWNk...")
>>> renderer.play()
For two box push use case:
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
>>> renderer.host_file("<local_file_path>")
>>> renderer.play()
Enjoy,
Sébastien Bianti
8 years, 4 months