@@ -27,6 +27,7 @@ var argv = rc('peerflix', {}, optimist
2727 . alias ( 'q' , 'quiet' ) . describe ( 'q' , 'be quiet' ) . boolean ( 'v' )
2828 . alias ( 'v' , 'vlc' ) . describe ( 'v' , 'autoplay in vlc*' ) . boolean ( 'v' )
2929 . alias ( 's' , 'airplay' ) . describe ( 's' , 'autoplay via AirPlay' ) . boolean ( 'a' )
30+ . alias ( 'u' , 'dlna' ) . describe ( 'u' , 'autoplay via DLNA' ) . boolean ( 'u' )
3031 . alias ( 'm' , 'mplayer' ) . describe ( 'm' , 'autoplay in mplayer*' ) . boolean ( 'm' )
3132 . alias ( 'g' , 'smplayer' ) . describe ( 'g' , 'autoplay in smplayer*' ) . boolean ( 'g' )
3233 . describe ( 'mpchc' , 'autoplay in MPC-HC player*' ) . boolean ( 'boolean' )
@@ -289,6 +290,50 @@ var ontorrent = function (torrent) {
289290 } )
290291 browser . start ( )
291292 }
293+ if ( argv . dlna ) {
294+ var Browser = require ( 'nodecast-js' )
295+ var Client = require ( 'upnp-mediarenderer-client' )
296+ var xmlb = require ( 'xmlbuilder' )
297+
298+ var nodecast = new Browser ( )
299+
300+ // Apparently, the metadata constructed in
301+ // upnp-mediarenderer-client doesn't work
302+ var metadata = xmlb . create ( 'DIDL-Lite' , {
303+ 'headless' : true
304+ } ) . att ( {
305+ 'xmlns' : 'urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/' ,
306+ 'xmlns:dc' : 'http://purl.org/dc/elements/1.1/' ,
307+ 'xmlns:upnp' : 'urn:schemas-upnp-org:metadata-1-0/upnp/' ,
308+ 'xmlns:dlna' : 'urn:schemas-dlna-org:metadata-1-0/' ,
309+ 'xmlns:sec' : 'http://www.sec.co.kr/' ,
310+ 'xmlns:xbmc' : 'urn:schemas-xbmc-org:metadata-1-0/'
311+ } )
312+ . ele ( 'item' , {
313+ 'id' : '0' ,
314+ 'parentID' : '-1' ,
315+ 'restricted' : '1'
316+ } )
317+ . ele ( 'dc:title' , { } , filename )
318+ . insertAfter ( 'res' , { 'protocolInfo' : 'http-get:*:video/mp4:*' } , href )
319+ . insertAfter ( 'upnp:class' , { } , 'object.item.videoItem.movie' )
320+ . end ( { pretty : false } )
321+
322+ nodecast . onDevice ( function ( device ) {
323+ device . onError ( function ( err ) {
324+ throw err
325+ } )
326+
327+ new Client ( device . xml ) . load ( href , {
328+ autoplay : true ,
329+ metadata : metadata
330+ } , function ( err , result ) {
331+ if ( err ) throw err
332+ } )
333+ } )
334+
335+ nodecast . start ( )
336+ }
292337
293338 if ( argv [ 'on-listening' ] ) proc . exec ( argv [ 'on-listening' ] + ' ' + href )
294339
0 commit comments