Sonos Template gemeinsam Erweitern

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Gast

    #16
    Hier noch der Code zum Status-Auslesen von derzeit 5 Playern.
    Bitte entschuldigt den Saustall im Baustein, hab grad gesehen, dass viele nicht benutzte Funktionen enthalten sind... Vielleicht braucht die ja jemand...
    Einen Teil der Funktionen hab ich aus dem alten Forum, weiß nicht mehr von wem. Vielen Dank dafür!

    Status = -1 error, 0 - stopped, 1 - paused, 2 - playing
    Quelle = 1=Playlist, 2=Radio, 3=Input, 4=Slave, 5=8Tracks, 6=Spotify, 7=TV (nur Playbar), 8=Apple Music

    AQ1 = Player 1 Status
    AQ2 = Player 1 Quelle
    AQ3 = Player 2 Status
    AQ4 = Player 2 Quelle
    ...
    AQ9 = Player 5 Status
    AQ10 = Player 5 Quelle



    Code:
    // Sonos Status
    
    char* SonosAddress;
    
    //Player Wohnzimmer
        char* SonosAddress1 = "/dev/tcp/10.0.1.21/1400";
    // Player Bad
        char* SonosAddress2 = "/dev/tcp/10.0.1.23/1400";
    // Player WC
        char* SonosAddress3 = "/dev/tcp/10.0.1.24/1400";
    // Player Schlafzimmer
        char* SonosAddress4 = "/dev/tcp/10.0.1.25/1400";
    // Player Küche
        char* SonosAddress5 = "/dev/tcp/10.0.1.22/1400";
    
    
    
    #define BUFF_SIZE 40000
    #define RD_BLOCK_SIZE 128
    
    
    
    int nEvents, Event;
    int Running = 0;
    int curstate = -1;
    char* curinfo = "No info";
    
    // Function to decode chars
    //
    
    
    char* DecodeText(char* Text) {
    
    char *ptr = strstr(Text, "&");
    
    if (ptr!=NULL)
    do {    
    strcpy(Text+(strlen(Text)-strlen(ptr)), "&");
    strcpy(Text+(strlen(Text)-strlen(ptr)+1),ptr+9);
    ptr = strstr(Text, "&");    
    } while (ptr!=NULL);
    
    return Text;
    }
    // End Functon
    
    
    // Function witch returns the state off the player. -1 error, 0 - stopped, 1 - paused, 2 - playing
    int GetPlayerStatus(char* PlayerAddress) {
    
    int State = -1;
    char *pS;
    char* cstate;
    
    
    STREAM* pTcpStream = stream_create(PlayerAddress,0,0);
    char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 272\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetTransportInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetTransportInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:GetTransportInfo></s:Body></s:Envelope> ";
    
    stream_write(pTcpStream,Command,strlen(Command));
    stream_flush(pTcpStream);
    char szBuffer[BUFF_SIZE];
    char szTmpBuffer[RD_BLOCK_SIZE];
    int nCnt;
    int i = 0;
    
    do {
    nCnt = stream_read(pTcpStream,szTmpBuffer,RD_BLOCK_SIZE,4000);
    if(nCnt > 0)    
    strncpy((char*)szBuffer+i*RD_BLOCK_SIZE,szTmpBuffer,nCnt);
    i++;
    }
    while (nCnt > 0);
    
    pS = szBuffer;
    while(*pS) {
    cstate = strstr(pS, "STOPPED");
    if (cstate !=NULL) { State = 0; }
    cstate = strstr(pS, "PAUSED");
    if (cstate !=NULL) { State = 1; }
    cstate = strstr(pS, "PLAYING");
    if (cstate !=NULL) { State = 2; }
    pS += (strlen(pS) + 1); }
    
    stream_close(pTcpStream);
    
    return State;
    }
    // End Function
    
    // Function witch gets information on the current song
    
    char* GetPositionInfo(char* PlayerAddress) {
    char rInfo[BUFF_SIZE];
    
    
    STREAM* InfoStream = stream_create(PlayerAddress,0,0);
    char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 295\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetPositionInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetPositionInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetPositionInfo></s:Body></s:Envelope> ";
    stream_write(InfoStream,Command,strlen(Command));
    stream_flush(InfoStream);
    char InfoBuffer[4000];
    char InfoTmpBuffer[RD_BLOCK_SIZE];
    int iCnt;
    int i = 0;
    
    do {
    iCnt = stream_read(InfoStream,InfoTmpBuffer,RD_BLOCK_SIZE ,4000);
    if(iCnt > 0)
    strncpy((char*)InfoBuffer+i*RD_BLOCK_SIZE,InfoTmpBuffer,iCnt);
    i++;
    } while (iCnt > 0);
    stream_close(InfoStream);
    strcpy(rInfo,InfoBuffer);
    return rInfo;
    
    }
    // End Function    
    
    // Function witch gets information on the current song
    
    char* GetMediaInfo(char* PlayerAddress) {
    
    char sreturn[2000];
    
    STREAM* InfoStream = stream_create(PlayerAddress,0,0);
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 295\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetPositionInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetPositionInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetPositionInfo></s:Body></s:Envelope> ";
    char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 266\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetMediaInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetMediaInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:GetMediaInfo></s:Body></s:Envelope> ";
    
    stream_write(InfoStream,Command,strlen(Command));
    stream_flush(InfoStream);
    char InfoBuffer[BUFF_SIZE];
    char InfoTmpBuffer[RD_BLOCK_SIZE];
    int iCnt;
    int i = 0;
    
    do {
        iCnt = stream_read(InfoStream,InfoTmpBuffer,RD_BLOCK_SIZE ,4000);
        if(iCnt > 0)
        strncpy((char*)InfoBuffer+i*RD_BLOCK_SIZE,InfoTmpBuffer,iCnt);;
        i++;
    } while (iCnt > 0);
    
    stream_close(InfoStream);
    
    char* cURI = "<CurrentURI>";
    char* cURIMDend = "</CurrentURIMetaData>";
    int length;
    char URI[4000];
    char *pS;
    pS = InfoBuffer;
    p = strstrskip(pS, cURI);
    if (p!=NULL) {
        pp = strstr(p, cURIMDend);
        length = strlen(p)-strlen(pp);
        strncpy(URI, p, length);
    }
    
    strcpy(sreturn, URI);
    return URI;
    }
    // End Function    
    
    // Function witch gets information on the current song
    
    char* GetVolume(char* PlayerAddress) {
    
    STREAM* InfoStream = stream_create(PlayerAddress,0,0);
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 295\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetPositionInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetPositionInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetPositionInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 266\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetMediaInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetMediaInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:GetMediaInfo></s:Body></s:Envelope> ";
    char* Command = "POST /MediaRenderer/RenderingControl/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 290\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#GetVolume\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetVolume xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetVolume></s:Body></s:Envelope> ";
    
    
    stream_write(InfoStream,Command,strlen(Command));
    stream_flush(InfoStream);
    char InfoBuffer[BUFF_SIZE];
    char InfoTmpBuffer[RD_BLOCK_SIZE];
    int iCnt;
    int i = 0;
    
    do {
    iCnt = stream_read(InfoStream,InfoTmpBuffer,RD_BLOCK_SIZE ,4000);
    if(iCnt > 0)
    strncpy((char*)InfoBuffer+i*RD_BLOCK_SIZE,InfoTmpBuffer,iCnt);;
    i++;
    } while (iCnt > 0);
    
    stream_close(InfoStream);
    char *pS;
    char* p;
    char* pp;
    char strVol[4];
    
    pS = InfoBuffer;
    p = strstrskip(pS, "<CurrentVolume>");
    int length;    
    if (p!=NULL) {
    pp = strstr(p, "</CurrentVolume>");
    length = strlen(p)-strlen(pp);
    strncpy(strVol, p, length);
    }
    
    char* retVol = strVol;
    return retVol;
    }
    // End Function    
    
    
    // Function to set AV URI
    
    int SetAVuri(char* PlayerAddress, char* URICom) {
    
    STREAM* InfoStream = stream_create(PlayerAddress,0,0);
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 295\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetPositionInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetPositionInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetPositionInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 266\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetMediaInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetMediaInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:GetMediaInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/RenderingControl/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 290\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#GetVolume\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetVolume xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetVolume></s:Body></s:Envelope> ";
    
    char Command[2000];
    char* p = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:SetAVTransportURI ";
    strcpy(Command, "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:SetAVTransportURI ");
    strcat(Command, "xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><CurrentURI>");
    strcat(Command, URICom);
    strcat(Command, "</CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>");
    
    char Header[2000];
    strcpy(Header, "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\n");
    strcat(Header, "CONNECTION: close\r\nCONTENT-LENGTH: ");
    char* commLen;
    sprintf(commLen, "%d", 309 + strlen(URICom));
    strcat(Header, commLen);
    strcat(Header, "\r\nCONTENT-TYPE: text/xml; ");
    strcat(Header, "charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI\"\r\n\r\n");
    
    char Send[4000];
    strcpy(Send, Header);
    strcat(Send, Command);
    
    
    stream_write(InfoStream,Send,strlen(Send));
    stream_flush(InfoStream);
    //free(Send);
    //free(Header);
    //free(Command);
    
    char InfoBuffer[1000];
    char InfoTmpBuffer[RD_BLOCK_SIZE];
    int iCnt;
    int i = 0;
    
    do {
    iCnt = stream_read(InfoStream,InfoTmpBuffer,RD_BLOCK_SIZE ,4000);
    if(iCnt > 0)
    strncpy((char*)InfoBuffer+i*RD_BLOCK_SIZE,InfoTmpBuffer,iCnt);;
    i++;
    } while (iCnt > 0);
    
    int OK = 0;
    char *pS;
    
    pS = InfoBuffer;
    p = strstr(pS, "OK");
    if (p!=NULL) {
        OK = 1;
    }
    
    return OK;
    }
    // End Function
    
    // Function play
    
    int SetPlay(char* PlayerAddress) {
    
    STREAM* InfoStream = stream_create(PlayerAddress,0,0);
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 295\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetPositionInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetPositionInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetPositionInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 266\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetMediaInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetMediaInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:GetMediaInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/RenderingControl/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 290\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#GetVolume\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetVolume xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetVolume></s:Body></s:Envelope> ";
    char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 266\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#Play\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:Play xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Speed>1</Speed></u:Play></s:Body></s:Envelope> ";
    
    
    
    stream_write(InfoStream,Command,strlen(Command));
    stream_flush(InfoStream);
    char InfoBuffer[1000];
    char InfoTmpBuffer[RD_BLOCK_SIZE];
    int iCnt;
    int i = 0;
    
    do {
    iCnt = stream_read(InfoStream,InfoTmpBuffer,RD_BLOCK_SIZE ,4000);
    if(iCnt > 0)
    strncpy((char*)InfoBuffer+i*RD_BLOCK_SIZE,InfoTmpBuffer,iCnt);;
    i++;
    } while (iCnt > 0);
    
    stream_close(InfoStream);
    char *pS;
    char* p;
    char* pp;
    char strVol[4];
    int OK = 0;
    
    pS = InfoBuffer;
    p = strstr(pS, "OK");
    if (p!=NULL) {
        OK = 1;
    }
    
    
    return OK;
    }
    // End Function    
    
    // Function stop
    
    int SetStop(char* PlayerAddress) {
    
    STREAM* InfoStream = stream_create(PlayerAddress,0,0);
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 295\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetPositionInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetPositionInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetPositionInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 266\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetMediaInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetMediaInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:GetMediaInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/RenderingControl/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 290\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#GetVolume\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetVolume xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetVolume></s:Body></s:Envelope> ";
    char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 266\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#Stop\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:Stop xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Speed>1</Speed></u:Stop></s:Body></s:Envelope> ";
    
    
    
    stream_write(InfoStream,Command,strlen(Command));
    stream_flush(InfoStream);
    char InfoBuffer[1000];
    char InfoTmpBuffer[RD_BLOCK_SIZE];
    int iCnt;
    int i = 0;
    
    do {
    iCnt = stream_read(InfoStream,InfoTmpBuffer,RD_BLOCK_SIZE ,4000);
    if(iCnt > 0)
    strncpy((char*)InfoBuffer+i*RD_BLOCK_SIZE,InfoTmpBuffer,iCnt);;
    i++;
    } while (iCnt > 0);
    
    stream_close(InfoStream);
    char *pS;
    char* p;
    char* pp;
    char strVol[4];
    int OK = 0;
    
    pS = InfoBuffer;
    p = strstr(pS, "OK");
    if (p!=NULL) {
        OK = 1;
    }
    
    
    return OK;
    }
    // End Function    
    
    // Function to set Vol
    
    int SetVolume(char* PlayerAddress, char* Vol) {
    
    STREAM* InfoStream = stream_create(PlayerAddress,0,0);
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 295\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetPositionInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetPositionInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetPositionInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 266\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetMediaInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetMediaInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:GetMediaInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/RenderingControl/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 290\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#GetVolume\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetVolume xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetVolume></s:Body></s:Envelope> ";
    
    char Command[2000];
    char* p = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:SetVolume ";
    strcpy(Command, "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:SetVolume ");
    strcat(Command, "xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\"><InstanceID>0</InstanceID><Channel>Master</Channel><DesiredVolume>");
    strcat(Command, Vol);
    strcat(Command, "</DesiredVolume></u:SetVolume></s:Body></s:Envelope>");
    
    char Header[2000];
    strcpy(Header, "POST /MediaRenderer/RenderingControl/Control HTTP/1.1\r\n");
    strcat(Header, "CONNECTION: close\r\nCONTENT-LENGTH: ");
    char* commLen;
    sprintf(commLen, "%d", strlen(Command));
    strcat(Header, commLen);
    strcat(Header, "\r\nCONTENT-TYPE: text/xml; ");
    strcat(Header, "charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#SetVolume\"\r\n\r\n");
    
    char Send[4000];
    strcpy(Send, Header);
    strcat(Send, Command);
    
    stream_write(InfoStream,Send,strlen(Send));
    stream_flush(InfoStream);
    
    char InfoBuffer[1000];
    char InfoTmpBuffer[RD_BLOCK_SIZE];
    int iCnt;
    int i = 0;
    
    do {
    iCnt = stream_read(InfoStream,InfoTmpBuffer,RD_BLOCK_SIZE ,4000);
    if(iCnt > 0)
    strncpy((char*)InfoBuffer+i*RD_BLOCK_SIZE,InfoTmpBuffer,iCnt);;
    i++;
    } while (iCnt > 0);
    
    stream_close(InfoStream);
    char *pS;
    char* pp;
    char strVol[4];
    int fin = 0;
    
    pS = InfoBuffer;
    p = strstr(pS, "OK");
    if (p!=NULL) {
        fin = 1;
    }
    
    return fin;
    }
    // End Function    
    
    // Function Seek Track
    
    int Seek(char* PlayerAddress, char* Unit, char* Value) {
    
    STREAM* InfoStream = stream_create(PlayerAddress,0,0);
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 295\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetPositionInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetPositionInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetPositionInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 266\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetMediaInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetMediaInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:GetMediaInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/RenderingControl/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 290\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#GetVolume\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetVolume xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetVolume></s:Body></s:Envelope> ";
    
    char Command[2000];
    strcpy(Command, "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:Seek ");
    strcat(Command, "xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Unit>");
    strcat(Command, Unit);
    strcat(Command, "</Unit><Target>");
    strcat(Command, Value);
    strcat(Command, "</Target></u:Seek></s:Body></s:Envelope>");
    
    
    char Header[2000];
    strcpy(Header, "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\n");
    strcat(Header, "CONNECTION: close\r\nCONTENT-LENGTH: ");
    char* commLen;
    sprintf(commLen, "%d", strlen(Command));
    strcat(Header, commLen);
    strcat(Header, "\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#Seek\"\r\n\r\n ");
    
    
    char Send[4000];
    strcpy(Send, Header);
    strcat(Send, Command);
    
    
    stream_write(InfoStream,Send,strlen(Send));
    stream_flush(InfoStream);
    
    char InfoBuffer[1000];
    char InfoTmpBuffer[RD_BLOCK_SIZE];
    int iCnt;
    int i = 0;
    
    do {
    iCnt = stream_read(InfoStream,InfoTmpBuffer,RD_BLOCK_SIZE ,4000);
    if(iCnt > 0)
    strncpy((char*)InfoBuffer+i*RD_BLOCK_SIZE,InfoTmpBuffer,iCnt);;
    i++;
    } while (iCnt > 0);
    
    stream_close(InfoStream);
    char *pS;
    char* pp;
    char strVol[4];
    int fin = 0;
    
    pS = InfoBuffer;
    p = strstr(pS, "OK");
    if (p!=NULL) {
        fin = 1;
    }
    
    return fin;
    }
    // End Function    
    
    
    // Function Save Queue
    
    char* SaveQueue(char* PlayerAddress, char* Title, char* ID) {
    
    STREAM* InfoStream = stream_create(PlayerAddress,0,0);
    
    char Command[2000];
    strcpy(Command, "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:SaveQueue ");
    strcat(Command, "xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Title>");
    strcat(Command, Title);
    strcat(Command, "</Title><ObjectID>");
    strcat(Command, ID);
    strcat(Command,"</ObjectID></u:SaveQueue></s:Body></s:Envelope>");
    
    char Header[2000];
    strcpy(Header, "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\n");
    strcat(Header, "CONNECTION: close\r\nCONTENT-LENGTH: ");
    char* commLen;
    sprintf(commLen, "%d", strlen(Command));
    strcat(Header, commLen);
    strcat(Header, "\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#SaveQueue\"\r\n\r\n ");
    
    
    char Send[4000];
    strcpy(Send, Header);
    strcat(Send, Command);
    
    stream_write(InfoStream,Send,strlen(Send));
    stream_flush(InfoStream);
    
    char InfoBuffer[1000];
    char InfoTmpBuffer[RD_BLOCK_SIZE];
    int iCnt;
    int i = 0;
    
    do {
    iCnt = stream_read(InfoStream,InfoTmpBuffer,RD_BLOCK_SIZE ,4000);
    if(iCnt > 0)
    strncpy((char*)InfoBuffer+i*RD_BLOCK_SIZE,InfoTmpBuffer,iCnt);;
    i++;
    } while (iCnt > 0);
    
    stream_close(InfoStream);
    char* p;
    char* pp;
    char strSQ[10];
    char* pS = InfoBuffer;
    p = strstrskip(pS, "<AssignedObjectID>");
    int length;    
    if (p!=NULL) {
    pp = strstr(p, "</AssignedObjectID>");
    length = strlen(p)-strlen(pp);
    strncpy(strSQ, p, length);
    }
    
    char* retSQ = strSQ;
    return retSQ;
    }
    // End Function    
    
    // Function Load Playlist
    
    int LoadPlaylist(char* PlayerAddress, char* ID) {
    
    STREAM* InfoStream = stream_create(PlayerAddress,0,0);
    
    char Command[2000];
    strcpy(Command, "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:AddURIToQueue ");
    strcat(Command, "xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><EnqueuedURI>file:///jffs/settings/savedqueues.rsq#");
    char* IDNr;
    IDNr = strstrskip(ID, "SQ:");
    if (IDNr!=NULL) {
        strcat(Command, IDNr);
    }
    strcat(Command, "</EnqueuedURI><EnqueuedURIMetaData>&lt;DIDL-Lite xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:upnp=&quot;urn:schemas-upnp-org:metadata-1-0/upnp/&quot; xmlns:r=&quot;urn:schemas-rinconnetworks-com:metadata-1-0/&quot; xmlns=&quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&quot;&gt;&lt;item id=&quot;");
    strcat(Command, ID);
    strcat(Command, "&quot; parentID=&quot;SQ:&quot; restricted=&quot;true&quot;&gt;&lt;dc:title&gt;Temp&lt;/dc:title&gt;&lt;upnp:class&gt;object.container.playlistContainer&lt;/upnp:class&gt;&lt;desc id=&quot;cdudn&quot; nameSpace=&quot;urn:schemas-rinconnetworks-com:metadata-1-0/&quot;&gt;RINCON_AssociatedZPUDN&lt;/desc&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;</EnqueuedURIMetaData><DesiredFirstTrackNumberEnqueued>0</DesiredFirstTrackNumberEnqueued><EnqueueAsNext>1</EnqueueAsNext></u:AddURIToQueue></s:Body></s:Envelope>");
    
    //strcpy(Command, "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:AddURIToQueue xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><EnqueuedURI>file:///jffs/settings/savedqueues.rsq#19</EnqueuedURI><EnqueuedURIMetaData>&lt;DIDL-Lite xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:upnp=&quot;urn:schemas-upnp-org:metadata-1-0/upnp/&quot; xmlns:r=&quot;urn:schemas-rinconnetworks-com:metadata-1-0/&quot; xmlns=&quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&quot;&gt;&lt;item id=&quot;SQ:19&quot; parentID=&quot;SQ:&quot; restricted=&quot;true&quot;&gt;&lt;dc:title&gt;Temp&lt;/dc:title&gt;&lt;upnp:class&gt;object.container.playlistContainer&lt;/upnp:class&gt;&lt;desc id=&quot;cdudn&quot; nameSpace=&quot;urn:schemas-rinconnetworks-com:metadata-1-0/&quot;&gt;RINCON_AssociatedZPUDN&lt;/desc&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;</EnqueuedURIMetaData><DesiredFirstTrackNumberEnqueued>0</DesiredFirstTrackNumberEnqueued><EnqueueAsNext>0</EnqueueAsNext></u:AddURIToQueue></s:Body></s:Envelope> ");
    
    char Header[1000];
    strcpy(Header, "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\n");
    strcat(Header, "CONNECTION: close\r\nCONTENT-LENGTH: ");
    char* commLen;
    sprintf(commLen, "%d", strlen(Command));
    strcat(Header, commLen);
    strcat(Header, "\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#AddURIToQueue\"\r\n\r\n ");
    
    
    char Send[2000];
    strcpy(Send, Header);
    strcat(Send, Command);
    
    
    stream_write(InfoStream,Send,strlen(Send));
    stream_flush(InfoStream);
    
    char InfoBuffer[1000];
    char InfoTmpBuffer[RD_BLOCK_SIZE];
    int iCnt;
    int i = 0;
    
    do {
    iCnt = stream_read(InfoStream,InfoTmpBuffer,RD_BLOCK_SIZE ,4000);
    if(iCnt > 0)
    strncpy((char*)InfoBuffer+i*RD_BLOCK_SIZE,InfoTmpBuffer,iCnt);;
    i++;
    } while (iCnt > 0);
    
    stream_close(InfoStream);
    char *pS;
    char* pp;
    char strVol[4];
    int fin = 0;
    
    pS = InfoBuffer;
    p = strstr(pS, "OK");
    if (p!=NULL) {
        fin = 1;
    }
    
    return fin;
    }
    // End Function    
    
    
    // Function Clear Queue
    
    int ClearQueue(char* PlayerAddress) {
    
    STREAM* InfoStream = stream_create(PlayerAddress,0,0);
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 295\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetPositionInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetPositionInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetPositionInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 266\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetMediaInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetMediaInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:GetMediaInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/RenderingControl/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 290\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#GetVolume\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetVolume xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetVolume></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 266\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#Play\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:Play xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Speed>1</Speed></u:Play></s:Body></s:Envelope> ";
    
    char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 290\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#RemoveAllTracksFromQueue\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:RemoveAllTracksFromQueue xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:RemoveAllTracksFromQueue></s:Body></s:Envelope> ";
    
    stream_write(InfoStream,Command,strlen(Command));
    stream_flush(InfoStream);
    char InfoBuffer[1000];
    char InfoTmpBuffer[RD_BLOCK_SIZE];
    int iCnt;
    int i = 0;
    
    do {
    iCnt = stream_read(InfoStream,InfoTmpBuffer,RD_BLOCK_SIZE ,4000);
    if(iCnt > 0)
    strncpy((char*)InfoBuffer+i*RD_BLOCK_SIZE,InfoTmpBuffer,iCnt);;
    i++;
    } while (iCnt > 0);
    
    stream_close(InfoStream);
    char *pS;
    char* p;
    char* pp;
    char strVol[4];
    int OK = 0;
    
    pS = InfoBuffer;
    p = strstr(pS, "OK");
    if (p!=NULL) {
        OK = 1;
    }
    
    
    return OK;
    }
    // End Function    
    
    //Funciton Destroy Object
    int destroyObject(char* PlayerAddress, char* ID) {
    
    STREAM* InfoStream = stream_create(PlayerAddress,0,0);
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 295\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetPositionInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetPositionInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetPositionInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 266\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetMediaInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetMediaInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:GetMediaInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/RenderingControl/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 290\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#GetVolume\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetVolume xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetVolume></s:Body></s:Envelope> ";
    
    char Command[2000];
    strcpy(Command, "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:DestroyObject ");
    strcat(Command, "xmlns:u=\"urn:schemas-upnp-org:service:ContentDirectory:1\"><ObjectID>");
    strcat(Command, ID);
    strcat(Command, "</ObjectID></u:DestroyObject></s:Body></s:Envelope>");
    
    char Header[2000];
    strcpy(Header, "POST /MediaServer/ContentDirectory/Control HTTP/1.1\r\n");
    strcat(Header, "CONNECTION: close\r\nCONTENT-LENGTH: ");
    char* commLen;
    sprintf(commLen, "%d", strlen(Command));
    strcat(Header, commLen);
    strcat(Header, "\r\nCONTENT-TYPE: text/xml; ");
    strcat(Header, "charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:ContentDirectory:1#DestroyObject\"\r\n\r\n");
    
    char Send[4000];
    strcpy(Send, Header);
    strcat(Send, Command);
    
    stream_write(InfoStream,Send,strlen(Send));
    stream_flush(InfoStream);
    
    char InfoBuffer[1000];
    char InfoTmpBuffer[RD_BLOCK_SIZE];
    int iCnt;
    int i = 0;
    
    do {
    iCnt = stream_read(InfoStream,InfoTmpBuffer,RD_BLOCK_SIZE ,4000);
    if(iCnt > 0)
    strncpy((char*)InfoBuffer+i*RD_BLOCK_SIZE,InfoTmpBuffer,iCnt);;
    i++;
    } while (iCnt > 0);
    
    stream_close(InfoStream);
    char *pS;
    char* pp;
    char strVol[4];
    int fin = 0;
    
    pS = InfoBuffer;
    p = strstr(pS, "OK");
    if (p!=NULL) {
        fin = 1;
    }
    
    return fin;
    }
    // End Function    
    
    // Function Ramp to Volume
    
    int RampToVolume(char* PlayerAddress, char* Vol, char* Type) {
    
    STREAM* InfoStream = stream_create(PlayerAddress,0,0);
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 295\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetPositionInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetPositionInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetPositionInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 266\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetMediaInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetMediaInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:GetMediaInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/RenderingControl/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 290\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#GetVolume\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetVolume xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetVolume></s:Body></s:Envelope> ";
    
    char Command[2000];
    
    strcpy(Command, "<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><u:RampToVolume ");
    strcat(Command, "xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\"><InstanceID>0</InstanceID><Channel>Master</Channel><RampType>");
    char* strType = Type;
    if (strlen(Type) == 0) {
        strType = "AUTOPLAY_RAMP_TYPE";
    }
    strcat(Command, strType);
    strcat(Command, "</RampType><DesiredVolume>");
    strcat(Command, Vol);
    strcat(Command, "</DesiredVolume><ResetVolumeAfter>false</ResetVolumeAfter><ProgramURI></ProgramURI></u:RampToVolume></s:Body></s:Envelope>");
    
    
    char Header[2000];
    strcpy(Header, "POST /MediaRenderer/RenderingControl/Control HTTP/1.1\r\n");
    strcat(Header, "CONNECTION: close\r\nCONTENT-LENGTH: ");
    char* commLen;
    sprintf(commLen, "%d", strlen(Command));
    strcat(Header, commLen);
    strcat(Header, "\r\nCONTENT-TYPE: text/xml; ");
    strcat(Header, "charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#RampToVolume\"\r\n\r\n");
    
    char Send[4000];
    strcpy(Send, Header);
    strcat(Send, Command);
    
    stream_write(InfoStream,Send,strlen(Send));
    stream_flush(InfoStream);
    
    char InfoBuffer[1000];
    char InfoTmpBuffer[RD_BLOCK_SIZE];
    int iCnt;
    int i = 0;
    
    do {
    iCnt = stream_read(InfoStream,InfoTmpBuffer,RD_BLOCK_SIZE ,4000);
    if(iCnt > 0)
    strncpy((char*)InfoBuffer+i*RD_BLOCK_SIZE,InfoTmpBuffer,iCnt);;
    i++;
    } while (iCnt > 0);
    
    stream_close(InfoStream);
    char *pS;
    char* pp;
    char strVol[4];
    int fin = 0;
    
    pS = InfoBuffer;
    p = strstr(pS, "OK");
    if (p!=NULL) {
        fin = 1;
    }
    
    return fin;
    }
    // End Function    
    // Function becomeAlone
    
    int becomeAlone(char* PlayerAddress) {
    
    STREAM* InfoStream = stream_create(PlayerAddress,0,0);
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 295\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetPositionInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetPositionInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetPositionInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 266\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetMediaInfo\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetMediaInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:GetMediaInfo></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/RenderingControl/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 290\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#GetVolume\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:GetVolume xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetVolume></s:Body></s:Envelope> ";
    //char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 266\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#Play\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:Play xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Speed>1</Speed></u:Play></s:Body></s:Envelope> ";
    
    char* Command = "POST /MediaRenderer/AVTransport/Control HTTP/1.1\r\nCONNECTION: close\r\nCONTENT-LENGTH: 310\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nSOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#BecomeCoordinatorOfStandaloneGroup\"\r\n\r\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:BecomeCoordinatorOfStandaloneGroup xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:BecomeCoordinatorOfStandaloneGroup></s:Body></s:Envelope> ";
    
    stream_write(InfoStream,Command,strlen(Command));
    stream_flush(InfoStream);
    char InfoBuffer[1000];
    char InfoTmpBuffer[RD_BLOCK_SIZE];
    int iCnt;
    int i = 0;
    
    do {
    iCnt = stream_read(InfoStream,InfoTmpBuffer,RD_BLOCK_SIZE ,4000);
    if(iCnt > 0)
    strncpy((char*)InfoBuffer+i*RD_BLOCK_SIZE,InfoTmpBuffer,iCnt);;
    i++;
    } while (iCnt > 0);
    
    stream_close(InfoStream);
    char *pS;
    char* p;
    char* pp;
    char strVol[4];
    int OK = 0;
    
    pS = InfoBuffer;
    p = strstr(pS, "OK");
    if (p!=NULL) {
        OK = 1;
    }
    
    return OK;
    }
    // End Function    
    
    while(1==1) {
    
    char* actURI;
    char* actTime;
    char* actTrack;
    int actM;
    int Step;
    int read = 0;
    int readOK;
    
    // Status der Sonos player ermitteln
    // Sonos Status ermitteln
    int state;
    
    if (Step == 0){
    SonosAddress = SonosAddress1;
    read = 1;
    Step = 1;
    }
    
    if (Step == 1){
        if (readOK == 1){
            setoutput(0,state);
            setoutput(1,actM);
            read = 0;
            readOK = 0;
            Step = 2;
        }
    }
    
    if (Step == 2){
        sleeps(1);
        Step = 4;
    }
    
    if (Step == 4){
    SonosAddress = SonosAddress2;
    read = 1;
    Step = 5;
    }
    
    if (Step == 5){
        if (readOK == 1){
            setoutput(2,state);
            setoutput(3,actM);
            read = 0;
            readOK = 0;
            Step = 6;
        }
    }
    
    if (Step == 6){
        sleeps(1);
        Step = 8;
    }
    
    if (Step == 8){
    SonosAddress = SonosAddress3;
    read = 1;
    Step = 9;
    }
    
    if (Step == 9){
        if (readOK == 1){
            setoutput(4,state);
            setoutput(5,actM);
            read = 0;
            readOK = 0;
            Step = 10;
        }
    }
    
    if (Step == 10){
        sleeps(1);
        Step = 11;
    }
    
    if (Step == 11){
    SonosAddress = SonosAddress4;
    read = 1;
    Step = 12;
    }
    
    if (Step == 12){
        if (readOK == 1){
            setoutput(6,state);
            setoutput(7,actM);
            read = 0;
            readOK = 0;
            sleeps(1);
            Step = 13;
        }
    }
    
    if (Step == 13){
    SonosAddress = SonosAddress5;
    read = 1;
        Step = 14;
    }
    if (Step == 14){
        if (readOK == 1){
            setoutput(8,state);
            setoutput(9,actM);
            read = 0;
            readOK = 0;
            Step = 15;
        }
    }
    if (Step == 15){
    sleeps(5);
        Step = 0;
    }
    
    
    
    
    
    if (read == 1){
    state = GetPlayerStatus(SonosAddress);
    
    char* info = GetPositionInfo(SonosAddress);
    char* cURIend = "</TrackURI>";
    char* cURI = "<TrackURI>";
    char* cTrack = "<Track>";
    char* cTrackend = "</Track>";
    char* cTime = "<RelTime>";
    char* cTimeend = "</RelTime>";
    char TrURI[2000];
    char Track[3];
    char Time[20];
    char* p;
    char* pp;
    char rString;
    
    char* tempin = strstr(info, "Envelope");
    
    p = strstrskip(info, cURI);
    int length;    
    if (p!=NULL) {
    pp = strstr(p, cURIend);
    length = strlen(p)-strlen(pp);
    strncpy(TrURI, p, length);
    }
    
    setoutputtext(0,TrURI);
    
    p = strstrskip(tempin, cTrack);
    if (p!=NULL) {
    pp = strstr(p, cTrackend);
    length = strlen(p)-strlen(pp);
    strncpy(Track, p, length);
    }
    p = strstrskip(tempin, cTime);
    if (p!=NULL) {
    pp = strstr(p, cTimeend);
    length = strlen(p)-strlen(pp);
    strncpy(Time, p, length);
    }
    
    actM = -1;
    
    // Aktuelles Medium ist Playlist
    p = strstr(TrURI, "file");
    if (p!=NULL) {
    actM = 1;
    }
    // Aktuelles Medium ist Radio
    p = strstr(TrURI, "radio");
    if (p!=NULL) {
    actM = 2;
    }
    // Aktuelles Medium ist Input
    p = strstr(TrURI, "rincon-stream:");
    if (p!=NULL) {
    actM = 3;
    }
    // Aktuelles Medium ist Slave
    p = strstr(TrURI, "rincon:");
    if (p!=NULL) {
    actM = 4;
    }
    // Aktuelles Medium ist 8-Tracks
    p = strstr(TrURI, "sonosprog");
    if (p!=NULL) {
    actM = 5;
    }
    // Aktuelles Medium ist Spotify
    p = strstr(TrURI, "spotify");
    if (p!=NULL) {
    actM = 6;
    }
    // Aktuelles Medium ist TV
    p = strstr(TrURI, "x-sonos-htastream");
    if (p!=NULL) {
    actM = 7;
    }
    // Aktuelles Medium ist Apple Music
    p = strstr(TrURI, "x-sonos-http");
    if (p!=NULL) {
    actM = 8;
    }
    
    
    
    char* Vol = GetVolume(SonosAddress);
    int iVol = atoi(Vol);
    
    readOK = 1;
    }
    
    sleep(100);
    //sleeps(100000);
    
    
    }
    Edit:
    Hier noch der Befehl für Beats 1 (nur mit Apple Music):

    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><CurrentURI>x-sonosapi-hls:hls%3ara.978194965?sid=204&amp;flags=8224&amp; sn=2</CurrentURI><CurrentURIMetaData>&lt;DIDL-Lite xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:upnp=&quot;urn:schemas-upnp-org:metadata-1-0/upnp/&quot; xmlns:r=&quot;urn:schemas-rinconnetworks-com:metadata-1-0/&quot; xmlns=&quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&quot;&gt;&lt;item id=&quot;00092020hls%3ara.978194965&quot; parentID=&quot;00082064view%3aradio&quot; restricted=&quot;true&quot;&gt;&lt;dc:title&gt;Bea ts 1&lt;/dc:title&gt;&lt;upnp:class&gt;object.item.audioIte m.audioBroadcast&lt;/upnp:class&gt;&lt;desc id=&quot;cdudn&quot; nameSpace=&quot;urn:schemas-rinconnetworks-com:metadata-1-0/&quot;&gt;SA_RINCON52231_X_#Svc52231-0-Token&lt;/desc&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;</CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>
    Zuletzt geändert von Gast; 11.01.2016, 19:57.

    Kommentar

    • Gast

      #17
      Nightmode bei Playbar einschalten:
      /MediaRenderer/RenderingControl/Control
      SOAPACTION: "urn:schemas-upnp-org:service:RenderingControl:1#SetEQ"
      <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:SetEQ xmlns:u="urn:schemas-upnp-org:service:RenderingControl:1"><InstanceID>0</InstanceID><EQType>NightMode</EQType><DesiredValue>1</DesiredValue></u:SetEQ></s:Body></s:Envelope>

      ausschalten = <DesiredValue>0</DesiredValue>

      Sprachverbesserung einschalten wie oben nur <EQType>DialogLevel</EQType> ersetzen


      Kommentar

      • Matthias
        Extension Master
        • 06.09.2015
        • 199

        #18
        Kannst du bei Gelegheit auch noch ein Bild der Config machen wie das zusammengebaut ist?

        Kommentar


        • geko
          geko kommentierte
          Kommentar bearbeiten
          Hallo, ja das währe super ! Danke

        • LoxBer
          LoxBer kommentierte
          Kommentar bearbeiten
          Oh ja das wäre Klasse mit ner Beispielconfig.

        • Smart
          Smart kommentierte
          Kommentar bearbeiten
          Mich würde das auch interessieren
      Lädt...