+ Antworten
Ergebnis 1 bis 2 von 2
  1. #1
    Registriert seit
    Mar 2012
    Ort
    Machern/Sachsen
    Beiträge
    342

    Standard UPNP: content directory eines Media-Servers per SOAP-Request auslesen

    Hallo Gemeinde,

    bei der Weiterentwicklung meines Ansatzes UPNP unter IPS lauffähig zu bekommen (siehe auch die UPNP-functions in einem vorherigen POST) hänge ich derzeit beim Auslesen der content directory meines Media-Servers (Twonky) per SOAP.
    Ziel ist, dass ich durch den bereitgestellten Inhalt browsen und dabei den Inhalt der container (genauer Pfad, AlbumArtURI, Length, etc.) an die Devices weitergeben möchte.

    Ein getElementsByTagName('container') brachte nichts.

    Vielleicht kann mir jemand von den Sonos-Leuten weiterhelfen ? Ihr seid da ja schon weit vorraus (mein ausdrücklicher Respekt !!!).

    Nun zu den Details: Im Ansatz tätige ich folgenden Aufruf:

    PHP-Code:
    <?

    //------------------------------------------------------------------------------
    //UPNP_ContentDirectory_Browse.ips.php------------------------------------------
    //------------------------------------------------------------------------------
    //IN:   $ObjectID
    //IN:   $BrowseFlag
    //IN:   $Filter
    //IN:   $StartingIndex
    //IN:   $RequestedCount
    //IN:   $SortCriteria
    //------------------------------------------------------------------------------

    //IPAdresse und Port des Servers------------------------------------------------

    $address "127.0.0.1";
    $port "9000";


    //max_execution_time auf 10 Minuten erhöhen-------------------------------------

    ini_set('max_execution_time'600);


    //Suchvariablen-----------------------------------------------------------------

    $ObjectID "0"//GetValue();
    $BrowseFlag "BrowseDirectChildren"//GetValue();
    $Filter "*"//GetValue();
    $StartingIndex "0"//GetValue();
    $RequestedCount "100"//GetValue();
    $SortCriteria "+dc:title"//GetValue();

    //ContentDirectory_Search-------------------------------------------------------

    $header='POST /TMSContentDirectory/Control HTTP/1.1
    HOST: '
    .$address.':'.$port.'
    SOAPACTION: "urn:schemas-upnp-org:service:ContentDirectory:1#Browse"
    CONTENT-TYPE: text/xml; charset="utf-8"
    connection: close'
    ;

    $xml='<?xml version="1.0" encoding="utf-8"?>
    <s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
       <s:Body>
          <u:Browse xmlns:u="urn:schemas-upnp-org:service:ContentDirectory:1">
             <ObjectID>'
    .$ObjectID.'</ObjectID>
             <BrowseFlag>'
    .$BrowseFlag.'</BrowseFlag>
             <Filter>'
    .$Filter.'</Filter>
             <StartingIndex>'
    .$StartingIndex.'</StartingIndex>
             <RequestedCount>'
    .$RequestedCount.'</RequestedCount>
             <SortCriteria>'
    .$SortCriteria.'</SortCriteria>
          </u:Browse>
       </s:Body>
    </s:Envelope>'
    ;

    $content_ContentDirectory_Browse $header '
    Content-Length: '
    strlen($xml) .'

    '
    $xml;


    //content_ContentDirectory_Browse Senden----------------------------------------

    $fp fsockopen ($address$port$errno$errstr10);

    fputs ($fp$content_ContentDirectory_Browse);

            
    $buffer stream_get_contents($fp, -1);

            echo 
    $buffer;

            
    $vars explode("\r\n\r\n"$buffer);             //Header abtrennen
            
    $header $vars[0];                                //Header
            
    $message $vars[1];                               //Message
            
    //$message = trim($xml);
            
            
    $browse = new SimpleXMLElement($message);

            
    $handle fopen('ContentDirectory_Browse.xml'"w");     //XML schreiben
            
    $xml=$browse->asXML();
            
    fwrite($handle$xml);
            
    fclose($handle);
            

    fclose($fp);


     
    $dom = new DomDocument;
     
    $dom->loadXML($xml);
     
    $node $dom->getElementsByTagName('Result');
                                                echo 
    "\r\n";
    foreach (
    $node as $Result) {
        echo 
    $Result->nodeValuePHP_EOL;
        echo 
    "\r\n";
    }
                                                echo 
    "\r\n";


    ?>
    und bekomme dann auch den Post zurück, den ich dann aber weiter verarbeiten möchte

    HTML-Code:
    HTTP/1.1 200 OK
    Content-Type: text/xml; charset="utf-8"
    Content-Length: 1873
    Date: Wed, 01 May 2013 20:24:11 GMT
    Accept-Ranges: bytes
    Connection: close
    EXT:
    Server: Windows NT/5.0, UPnP/1.0, pvConnect UPnP SDK/1.0,  Twonky UPnP SDK/1.1
    
    &lt;DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/" xmlns:arib="urn:schemas-arib-or-jp:elements-1-0/" xmlns:dtcp="urn:schemas-dtcp-com:metadata-1-0/" xmlns:pv="http://www.pv.com/pvns/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"&gt;&lt;container id="0$2" parentID="0" restricted="1" childCount="2" searchable="1"&gt;&lt;dc:title&gt;Bilder&lt;/dc:title&gt;&lt;pv:childCountContainer&gt;2&lt;/pv:childCountContainer&gt;&lt;pv:modificationTime&gt;70918272&lt;/pv:modificationTime&gt;&lt;pv:lastUpdated&gt;70918272&lt;/pv:lastUpdated&gt;&lt;upnp:class&gt;object.container&lt;/upnp:class&gt;&lt;/container&gt;&lt;container id="0$1" parentID="0" restricted="1" childCount="2" searchable="1"&gt;&lt;dc:title&gt;Musik&lt;/dc:title&gt;&lt;pv:childCountContainer&gt;2&lt;/pv:childCountContainer&gt;&lt;pv:modificationTime&gt;70918272&lt;/pv:modificationTime&gt;&lt;pv:lastUpdated&gt;70918272&lt;/pv:lastUpdated&gt;&lt;upnp:class&gt;object.container&lt;/upnp:class&gt;&lt;/container&gt;&lt;container id="0$3" parentID="0" restricted="1" childCount="2" searchable="1"&gt;&lt;dc:title&gt;Videos&lt;/dc:title&gt;&lt;pv:childCountContainer&gt;2&lt;/pv:childCountContainer&gt;&lt;pv:modificationTime&gt;70918272&lt;/pv:modificationTime&gt;&lt;pv:lastUpdated&gt;70918272&lt;/pv:lastUpdated&gt;&lt;upnp:class&gt;object.container&lt;/upnp:class&gt;&lt;/container&gt;&lt;/DIDL-Lite&gt;333
    
    Bilder27091827270918272object.containerMusik27091827270918272object.containerVideos27091827270918272object.container
    Der in die Datei zur Kontrolle geschriebene XML-Teil sieht richtig aus:

    HTML-Code:
    <?xml version="1.0" encoding="utf-8"?>
    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:BrowseResponse xmlns:u="urn:schemas-upnp-org:service:ContentDirectory:1"><Result>&lt;DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/" xmlns:arib="urn:schemas-arib-or-jp:elements-1-0/" xmlns:dtcp="urn:schemas-dtcp-com:metadata-1-0/" xmlns:pv="http://www.pv.com/pvns/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"&gt;&lt;container id="0$2" parentID="0" restricted="1" childCount="2" searchable="1"&gt;&lt;dc:title&gt;Bilder&lt;/dc:title&gt;&lt;pv:childCountContainer&gt;2&lt;/pv:childCountContainer&gt;&lt;pv:modificationTime&gt;70918272&lt;/pv:modificationTime&gt;&lt;pv:lastUpdated&gt;70918272&lt;/pv:lastUpdated&gt;&lt;upnp:class&gt;object.container&lt;/upnp:class&gt;&lt;/container&gt;&lt;container id="0$1" parentID="0" restricted="1" childCount="2" searchable="1"&gt;&lt;dc:title&gt;Musik&lt;/dc:title&gt;&lt;pv:childCountContainer&gt;2&lt;/pv:childCountContainer&gt;&lt;pv:modificationTime&gt;70918272&lt;/pv:modificationTime&gt;&lt;pv:lastUpdated&gt;70918272&lt;/pv:lastUpdated&gt;&lt;upnp:class&gt;object.container&lt;/upnp:class&gt;&lt;/container&gt;&lt;container id="0$3" parentID="0" restricted="1" childCount="2" searchable="1"&gt;&lt;dc:title&gt;Videos&lt;/dc:title&gt;&lt;pv:childCountContainer&gt;2&lt;/pv:childCountContainer&gt;&lt;pv:modificationTime&gt;70918272&lt;/pv:modificationTime&gt;&lt;pv:lastUpdated&gt;70918272&lt;/pv:lastUpdated&gt;&lt;upnp:class&gt;object.container&lt;/upnp:class&gt;&lt;/container&gt;&lt;/DIDL-Lite&gt;</Result><NumberReturned>3</NumberReturned><TotalMatches>3</TotalMatches><UpdateID>3</UpdateID></u:BrowseResponse></s:Body></s:Envelope>

    Wie kann ich nun die container Bilder, Musik, Videos in Variablen umsetzen, bzw. auch weiter in die Tiefe browsen ?

    Für ein paar Denkanstösse wäre ich dankbar. Oder hat da jemand schon etwas Fertiges ?


    Viele Grüsse

    André


    PS: ich fände es nach wie vor schön auf meinem Server einen zentralen UPNP Control Point laufen zu haben, den ich per Webfront von verschiedenen Tablets aus ansteuern kann. Das erspart mir auf jedem Gerät einen separaten Control Point laufen zu haben, die sich dann untereinander ins Gehege kommen.

  2. #2
    Registriert seit
    Mar 2012
    Ort
    Machern/Sachsen
    Beiträge
    342

    Standard durch Server-content browsen und selektieren - wie umsetzen ?

    Hallo Gemeinde,

    ich habe jetzt in einem script functions und in dem Steuer-script das setzen der Variablen etc. as funktioniert nun auch. Ich hänge jedoch bei der Umsetzung einer Logik vorwärts und rückwärts zu browsen bzw. ein Musikfile (item) zu selektieren. Kann mir eventuell jemand Erfahrenerer helfen ?

    Das funktioniert so: mit dem Browse-Befehl kann ich mir die ID´s der Unterordner auslesen bzw. erkenne zwischen container (weitere Unterordner) oder item (Musikfile).

    $Result ist die Antwort auf meine Anfrage
    $liste ist das Array mit den Titeln bzw. containern

    Essentiell dabei ist die ausgegebene ID --> damit browse ich vorwärts und die ParentID --> damit komme ich dann rückwärts. Bei einem item ist das Array wie unten, bei containern fehlen die entsprechende Einträge bis auf Titel. Die ID im Array (zu selektieren mit $scroll) lässt mich die einzelnen Unterpunkte aufrufen.

    Die functions:

    PHP-Code:
    <?

    //------------------------------------------------------------------------------
    //Browse024 - function----------------------------------------------------------
    //------------------------------------------------------------------------------

    //------------------------------------------------------------------------------
    //function ContentDirectory_Browse----------------------------------------------
    //------------------------------------------------------------------------------
    //IN:   $ObjectID
    //IN:   $BrowseFlag
    //IN:   $Filter
    //IN:   $StartingIndex
    //IN:   $RequestedCount
    //IN:   $SortCriteria
    //------------------------------------------------------------------------------
    //OUT:  $Result
    //OUT:  $NumberReturned
    //OUT:  $TotalMatches
    //OUT:  $TotalMatches
    //------------------------------------------------------------------------------

    function ContentDirectory_Browse ($addressServ$portServ$ObjectID$BrowseFlag$Filter$StartingIndex$RequestedCount$SortCriteria)
    {
    $header='POST /TMSContentDirectory/Control HTTP/1.1
    HOST: '
    .$addressServ.':'.$portServ.'
    SOAPACTION: "urn:schemas-upnp-org:service:ContentDirectory:1#Browse"
    CONTENT-TYPE: text/xml; charset="utf-8"
    connection: close'
    ;

    $xml='<?xml version="1.0" encoding="utf-8"?>
    <s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
       <s:Body>
          <u:Browse xmlns:u="urn:schemas-upnp-org:service:ContentDirectory:1">
             <ObjectID>'
    .$ObjectID.'</ObjectID>
             <BrowseFlag>'
    .$BrowseFlag.'</BrowseFlag>
             <Filter>'
    .$Filter.'</Filter>
             <StartingIndex>'
    .$StartingIndex.'</StartingIndex>
             <RequestedCount>'
    .$RequestedCount.'</RequestedCount>
             <SortCriteria>'
    .$SortCriteria.'</SortCriteria>
          </u:Browse>
       </s:Body>
    </s:Envelope>'
    ;

    $content_ContentDirectory_Browse $header '
    Content-Length: '
    strlen($xml) .'

    '
    $xml;

    $fp fsockopen ($addressServ$portServ$errno$errstr10);

    fputs ($fp$content_ContentDirectory_Browse);

            
    $buffer stream_get_contents($fp, -1);

            echo 
    $buffer;

            
    $vars explode("\r\n\r\n"$buffer);                         //Header abtrennen
            
    $header $vars[0];                                        //Header
            
    $message $vars[1];                                       //Message

            
    $handle fopen('ContentDirectory_Browse.xml'"w");     //XML schreiben
            
    fwrite($handle$message);
            
    fclose($handle);

    fclose($fp);

    //XML cutten und Variablen schreiben--------------------------------------------

            
    $vars1 explode("<Result>"$message);
            
    $cutted1 $vars1[0];
            
    $cutted2 $vars1[1];
            
    $vars2 explode("</Result>"$cutted2);
          
    $cutted3 $vars2[1];
            
    $Result $vars2[0];

            echo 
    $Result;

        
    SetValue(42199 /*[Audio\Browse\Return\Result]*/$Result);

            
    $vars1 explode("<NumberReturned>"$message);
          
    $cutted1 $vars1[0];
            
    $cutted2 $vars1[1];
            
    $vars2 explode("</NumberReturned>"$cutted2);
            
    $cutted3 $vars2[1];
            
    $NumberReturned $vars2[0];

            echo 
    $NumberReturned;

        
    SetValue(26946 /*[Audio\Browse\Return\NumberReturned]*/$NumberReturned);

            
    $vars1 explode("<TotalMatches>"$message);
            
    $cutted1 $vars1[0];
            
    $cutted2 $vars1[1];
            
    $vars2 explode("</TotalMatches>"$cutted2);
            
    $cutted3 $vars2[1];
            
    $TotalMatches $vars2[0];

            echo 
    $TotalMatches;

        
    SetValue(52875 /*[Audio\Browse\Return\TotalMatches]*/$TotalMatches);

            
    $vars1 explode("<UpdateID>"$message);
          
    $cutted1 $vars1[0];
            
    $cutted2 $vars1[1];
            
    $vars2 explode("</UpdateID>"$cutted2);
          
    $cutted3 $vars2[1];
            
    $UpdateID $vars2[0];

            echo 
    $UpdateID;

        
    SetValue(53319 /*[Audio\Browse\Return\UpdateID]*/$UpdateID);

    Return (
    $Result);
    }

    //------------------------------------------------------------------------------
    //function BrowseList($Result) --> $Results in Arrays ausgeben------------------
    //------------------------------------------------------------------------------
    //Sortierung:-------------------------------------------------------------------
    //------------------------------------------------------------------------------
    //01: container/item
    //02: id
    //03: refID
    //04: parentid
    //05: restricted
    //06: artist
    //07: album
    //08: title
    //09: resource
    //10: duration
    //11: size
    //12: bitrate
    //13: albumArtURI
    //14: genre
    //15: date
    //16: originalTrackNumber
    //17: class
    //18: extension
    //------------------------------------------------------------------------------

    function BrowseList($Result)
    {
    $xmlParser xml_parser_create();
    $Result substr($Resultstripos($Result'&lt;'));
    $Result substr($Result0strrpos($Result'&gt;') + 4);
    $Result str_replace(array("&lt;""&gt;""&quot;""&amp;""%3a""%2f""%25"), array("<"">""\"""&"":""/""%"), $Result);

    $xml = new SimpleXMLElement($Result);
    $liste = array();

    for(
    $i=0,$size=count($xml);$i<$size;$i++)
        {
        if(isset(
    $xml->container[$i])){
            
    //Wenn Container vorhanden, dann ist es ein Browse Element
            //Wenn Item vorhanden, dann ist es ein Song
            
    $aktrow $xml->container[$i];
               
    $attr $xml->container[$i]->attributes();
                  
    $liste[$i]['typ'] = "container";

        }else if(isset(
    $xml->item[$i])){
            
    //Item vorhanden also nur noch Musik
                  
    $aktrow $xml->item[$i];
                  
    $attr $xml->item[$i]->attributes();
                  
    $liste[$i]['typ'] = "item";

        }else{
            
    //Fehler aufgetreten
           
    return;
        }

    $id $attr['id'];
    $refid $attr['refID'];
    $parentid $attr['parentID'];
    $restricted $attr['restricted'];
    $albumart $aktrow->xpath("upnp:albumArtURI");
    $titel $aktrow->xpath("dc:title");
    $interpret $aktrow->xpath("dc:creator");
    $date $aktrow->xpath("dc:date");
    $album $aktrow->xpath("upnp:album");
    $genre $aktrow->xpath("upnp:genre");
    $originalTrackNumber $aktrow->xpath("upnp:originalTrackNumber");
    $class $aktrow->xpath("upnp:class");
    $extension $aktrow->xpath("pv:extension");

        if(isset(
    $id) && !empty($id)){
                
    $liste[$i]['id']=(string)$id;
            }else{
                
    $liste[$i]['id']="";
            }
        if(isset(
    $refid) && !empty($refid)){
                
    $liste[$i]['refid']=(string)$refid;
            }else{
                
    $liste[$i]['refid']="";
            }
        if(isset(
    $parentid) && !empty($parentid)){
                
    $liste[$i]['parentid']=(string)$parentid;
            }else{
                
    $liste[$i]['parentid']="";
            }
        if(isset(
    $restricted) && !empty($restricted)){
                
    $liste[$i]['restricted']=(string)$restricted;
            }else{
                
    $liste[$i]['restricted']="";
            }
        if(isset(
    $interpret[0])){
                
    $liste[$i]['artist']=(string)$interpret[0];
            }else{
                
    $liste[$i]['artist']="";
            }
        if(isset(
    $album[0])){
                
    $liste[$i]['album']=(string)$album[0];
            }else{
                
    $liste[$i]['album']="";
            }
    $liste[$i]['title']=(string)$titel[0]; //immer vorhanden

        
    if(isset($aktrow->res)){
                   
    $res = (string)$aktrow->res;
                   
    $liste[$i]['resource'] = $res;
            }else{
                   
    $liste[$i]['resource'] = "";
             }
        
    $resattr $aktrow->res->attributes();
        
    //wenn name ‘res’ und attribute ‘duration’ vorhanden
        
    if(isset($aktrow->res) and isset($resattr['duration'])){
                
    $liste[$i]['duration']=(string)$resattr['duration'];
            }else{
                
    $liste[$i]['duration']="";
            }
        
    //wenn name ‘res’ und attribute ‘size’ vorhanden
        
    if(isset($aktrow->res) and isset($resattr['size'])){
                
    $liste[$i]['size']=(string)$resattr['size'];
            }else{
                
    $liste[$i]['size']="";
            }
        
    //wenn name ‘res’ und attribute ‘bitrate’ vorhanden
        
    if(isset($aktrow->res) and isset($resattr['bitrate'])){
                
    $liste[$i]['bitrate']=(string)$resattr['bitrate'];
            }else{
                
    $liste[$i]['bitrate']="";
            }
        if(isset(
    $albumart[0])){
                
    $liste[$i]['albumArtURI']=(string)$albumart[0];
            }else{
                
    $liste[$i]['albumArtURI'] ="";
            }
        if(isset(
    $genre[0])){
                
    $liste[$i]['genre']=(string)$genre[0];
            }else{
                
    $liste[$i]['genre']="";
            }
        if(isset(
    $date[0])){
                
    $liste[$i]['date']=(string)$date[0];
            }else{
                
    $liste[$i]['date']="";
            }
        if(isset(
    $originalTrackNumber[0])){
                
    $liste[$i]['originalTrackNumber']=(string) $originalTrackNumber[0];
            }else{
                
    $liste[$i]['originalTrackNumber']="";
            }
        if(isset(
    $class[0])){
                
    $liste[$i]['class']=(string)$class[0];
            }else{
                
    $liste[$i]['class']="";
            }
        if(isset(
    $extension[0])){
                
    $liste[$i]['extension']=(string)$extension[0];
            }else{
                
    $liste[$i]['extension']="";
            }
    }
    return (
    $liste);
    }

    ?>
    Das Steuerscript:

    PHP-Code:
    <?

    //------------------------------------------------------------------------------
    //Browse024-Testteil------------------------------------------------------------
    //--------------------------------------------------------------------------------

    //functions einbinden-----------------------------------------------------------

    include ("UPNP_Functions_V1.8.ips.php");
    include (
    "15256.ips.php"); //Browse024 - function

    //IPAdresse und Port des Servers------------------------------------------------

    $addressServ "192.168.178.22"//Twonky/VAIO
    $portServ "9000";

    //IPAdresse und Port des primären Device (Host)---------------------------------

    $address "192.168.178.151";
    $port "8080";

    //max_execution_time auf 10 Minuten erhöhen-------------------------------------

    ini_set('max_execution_time'600);

    //Suchvariablen-----------------------------------------------------------------

    $ObjectID "0$1$13$77$78$1639$1640"//GetValue();
    //$BrowseFlag = "BrowseMetadata"; //GetValue();
    $BrowseFlag "BrowseDirectChildren"//GetValue();
    $Filter "*"//GetValue();
    $StartingIndex "0"//GetValue();
    $RequestedCount "0"//GetValue();
    $SortCriteria "0"//GetValue();
    //------------------------------------------------------------------------------

    $Result ContentDirectory_Browse ($addressServ$portServ$ObjectID$BrowseFlag$Filter$StartingIndex$RequestedCount$SortCriteria);
    echo (
    $Result);
    echo 
    "\r\n\r\n";

    $liste BrowseList($Result);
    echo (
    $liste);
    echo 
    "\r\n\r\n";
    echo 
    "Liste:";
    print_r ($liste);

    echo 
    "\r\n\r\n";
    $size count ($liste);
    echo 
    "\r\n\r\n";
    echo (
    $size);
    echo 
    "\r\n\r\n";

    //Files selectieren-------------------------------------------------------------


    $scroll "12"//Logik zum scrollen einbauen

    $TitelList $scroll;




    //Array $liste auslesen und Variablen setzen------------------------------------


    $typ $liste[$TitelList]['typ']; // gibt typ des 1. Array aus
    echo $typ;
    setvalue(11601 /*[Audio\Browse\DIDL-lite\Container/Item [typ]]*/, (string)$typ);
    echo 
    "\r\n";

    $id $liste[$TitelList]['id']; // gibt id des 1. Array aus
    echo $id;
    setvalue(38469 /*[Audio\Browse\DIDL-lite\ID [id]]*/, (string)$id);
    echo 
    "\r\n";

    $refid $liste[$TitelList]['refID'];
    echo 
    $refid;
    setvalue(43495 /*[Audio\Browse\DIDL-lite\ID [id]]*/, (string)$refid);
    echo 
    "\r\n";

    $parentid $liste[$TitelList]['parentid'];
    echo 
    $parentid;
    setvalue(41353 /*[Audio\Browse\DIDL-lite\ParentID [parentID]]*/, (string)$parentid);
    echo 
    "\r\n";

    $restricted $liste[$TitelList]['restricted'];
    echo 
    $restricted;
    setvalue(27617 /*[Audio\Browse\DIDL-lite\ParentID [parentID]]*/, (string)$restricted);
    echo 
    "\r\n";

    $artist $liste[$TitelList]['artist'];
    echo 
    $artist;
    setvalue(42599 /*[Audio\Browse\DIDL-lite\Artist [dc:creator]]*/, (string)$artist);
    echo 
    "\r\n";

    $album $liste[$TitelList]['album'];
    echo 
    $album;
    setvalue(48998 /*[Audio\Browse\DIDL-lite\Album [upnp:album]]*/, (string)$album);
    echo 
    "\r\n";

    $title $liste[$TitelList]['title'];
    echo 
    $title;
    setvalue(31924 /*[Audio\Browse\DIDL-lite\Titel [dc:title]]*/, (string)$title);
    echo 
    "\r\n";

    $res $liste[$TitelList]['resource'];
    echo 
    $res;
    setvalue(46947 /*[Audio\Browse\DIDL-lite\URI [resource]]*/, (string)$res);
    echo 
    "\r\n";

    $duration $liste[$TitelList]['duration'];
    echo 
    $duration;
    setvalue(56480 /*[Audio\Browse\DIDL-lite\Duration [duration]]*/, (string)$duration);
    echo 
    "\r\n";

    $size $liste[$TitelList]['size'];
    echo 
    $size;
    setvalue(58375 /*[Audio\Browse\DIDL-lite\Size [size]]*/, (string)$size);
    echo 
    "\r\n";

    $bitrate $liste[$TitelList]['bitrate'];
    echo 
    $bitrate;
    setvalue(27089 /*[Audio\Browse\DIDL-lite\Bitrate [bitrate]]*/, (string)$bitrate);
    echo 
    "\r\n";

    $albumart $liste[$TitelList]['albumArtURI'];
    echo 
    $albumart;
    SetValue(27682 /*[Audio\Browse\DIDL-lite\AlbumArtURI [upnp:albumArtURI]]*/, (string)$albumart);

            
    //AlbumArt abholen und speichern------------------------------------------
            
    $imageContent = @Sys_GetURLContent($albumart);
            
    $fileHandle fopen(IPS_GetKernelDir()."media/AlbumArt.jpg""w");
            @
    fwrite($fileHandle$imageContent);
            
    fclose($fileHandle);

    echo 
    "\r\n";

    $genre $liste[$TitelList]['genre']; // gibt album des 1. Array aus
    echo $genre;
    setvalue(48901 /*[Audio\Browse\DIDL-lite\Genre [upnp:genre]]*/, (string)$genre);
    echo 
    "\r\n";

    $date $liste[$TitelList]['date']; // gibt album des 1. Array aus
    echo $date;
    setvalue(35740 /*[Audio\Browse\DIDL-lite\Date [dc:date]]*/, (string)$date);
    echo 
    "\r\n";

    $originalTrackNumber $liste[$TitelList]['originalTrackNumber']; // gibt album des 1. Array aus
    echo $originalTrackNumber;
    setvalue(32295 /*[Audio\Browse\DIDL-lite\TrackNumber [upnp:originalTrackNumber]]*/, (string)$originalTrackNumber);
    echo 
    "\r\n";

    $class $liste[$TitelList]['class']; // gibt album des 1. Array aus
    echo $class;
    setvalue(52846 /*[Audio\Browse\DIDL-lite\Class [upnp:class]]*/, (string)$class);
    echo 
    "\r\n";

    $extension $liste[$TitelList]['extension']; // gibt album des 1. Array aus
    echo $extension;
    setvalue(12802 /*[Audio\Browse\DIDL-lite\Extension [pv:extension]]*/, (string)$extension);
    echo 
    "\r\n";



    //Play--------------------------------------------------------------------------

    //include ("UPNP_Functions_V1.8.ips.php");
    $file GetValue(46947 /*[Audio\Browse\DIDL-lite\URI [resource]]*/);
    $MetaData GetValue(27682 /*[Audio\Browse\DIDL-lite\AlbumArtURI [upnp:albumArtURI]]*/);
    SetAVTransportURI($address$port$file$MetaData);
    Play_AV($address$port);

    ?>
    Ein Array für items hat folgende Struktur:

    Array
    (
    [0] => Array
    (
    [typ] => item
    [id] => 0$1$13$77$78$1639$1640R69645
    [refid] => 0$1$8I69645
    [parentid] => 0$1$13$77$78$1639$1640
    [restricted] => 1
    [artist] => Chris Rea
    [album] => The Best Of
    [title] => Auberge
    [resource] => http://192.168.178.22:9000/disk/DLNA-PNMP3-OP01-FLAGS01700000/O0$1$8I69645.mp3
    [duration] => 0:04:46
    [size] => 9165839
    [bitrate] => 256
    [albumArtURI] => http://192.168.178.22:9000/disk/DLNA-PNJPEG_TN-OP01-CI1-FLAGS00f00000/defaultalbumart/a_u_d_i_o.jpg/O0$1$8I69645.jpg?scale=160x160
    [genre] => Pop
    [date] => 1994-01-01
    [originalTrackNumber] => 5
    [class] => object.item.audioItem.musicTrack
    [extension] => mp3
    )
    etc.
    in container-Array sieht so aus:

    Array
    (
    [0] => Array
    (
    [typ] => container
    [id] => 0$1$13$77$78$108
    [refid] =>
    [parentid] => 0$1$13$77$78
    [restricted] => 1
    [artist] =>
    [album] =>
    [title] => Annie Lennox
    [resource] =>
    [duration] =>
    [size] =>
    [bitrate] =>
    [albumArtURI] =>
    [genre] =>
    [date] =>
    [originalTrackNumber] =>
    [class] => object.container.storageFolder
    [extension] =>
    )
    etc.
    Die vielen Echo´s sind nur zur Gegenkontrolle bei der Entwicklung.

    Wenn ich die Werte per Hand kopiere bzw. unter $scroll den gewünschten Titel (z.B. 1) eingebe funktioniert das auch ganz gut.

    Wie setze ich das aber in eine Logik für die Schaltflächen und später besser noch HTML (-> dann als iframe einzubinden) um ?

    Für Hilfe hierbei wäre dankbar


    Viele Grüsse

    André

Ähnliche Themen

  1. UPNP functions - Skript aller A/V UPNP Befehle - Tester gesucht
    Von DigiHouse im Forum Audio & Video, TK-Anlagen, ISDN
    Antworten: 23
    Letzter Beitrag: 04.06.13, 16:00
  2. Java SOAP-Request
    Von saschahb im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 2
    Letzter Beitrag: 27.01.10, 21:38
  3. WSDL - SOAP Call eines Scripts
    Von ratzefumm im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 1
    Letzter Beitrag: 21.06.09, 21:35
  4. Hilfe zum Bau eines Media Players
    Von Ralf L. im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 10
    Letzter Beitrag: 29.04.09, 14:08