Enhetsprofiler – anpassning till varje enhet
Verklig UPnP-hårdvara är inkonsekvent med vad den accepterar: en streamer vill ha 24-bitars FLAC, en annan spelar bara 16-bitars PCM, en tredje ljuger om vilka codecs den stöder. En enhetsprofil är hur du lär plugin-programmet en enhets begränsningar och egenheter.
Hur en profil väljs. Varje enhet identifierar sig med en User-Agent-sträng när den ansluter. En profil säger "tillämpa mig när user-agenten innehåller detta fragment." När en enhet ansluter hittar plugin-programmet den matchande profilen; om ingen matchar är en inbyggd Generisk enhet-profil reserven. Du kan lista flera fragment separerade med | (till exempel Linn|ChorusDS|BubbleDS) så att en profil täcker en familj av relaterade enheter.
Vad en profil kontrollerar. De gränser en enhet inte kan överskrida – maximal bildstorlek för albumomslag, tillåtet samplingsfrekvensområde, maximalt bitdjup, endast stereo-nedmixning – plus, när ett spår behöver konverteras, vilket utdataformat och samplingsfrekvens det ska konverteras till. En separat grupp av "problem-enhet"-omkopplare löser specifika hårdvarufel (rå-PCM-hantering, byteordning, HTTP-huvudet för innehållslängd). Dessa finns eftersom UPnP-efterlevnaden i praktiken är bristfällig; de flesta rör dem aldrig.
När man ska ändra en profil. Endast när en specifik enhet beter sig felaktigt. Direkt ur lådan täcker den generiska profilen, plus de förinställda enhetsspecifika inställningarna för vanlig hårdvara, de flesta fall. För att hitta en enhets user-agent så att du kan rikta in dig på den, aktivera felsökningsloggning (se Diagnostik), spela något från enheten och läs raden useragent= i loggen.
Profilens mest betydelsefulla omkopplare – tvinga fram inbyggd ström – handlar egentligen inte alls om begränser; den avgör om något av ovanstående gäller. Det är nästa koncept.


Inställningar
| Kontroll | Vad den gör |
|---|---|
| Namn | Profilens visningsnamn. |
| Gäller när user-agent innehåller | De user-agent-fragment en enhet måste innehålla för att matcha denna profil; separera alternativ med |. Enheter som inte matchar faller tillbaka till den generiska profilen. |
| Maximal bildstorlek | Maximal pixelstorlek för albumomslag som skickas till denna enhet (160 px är DLNA-standarden; större stöds inte universellt). |
| Utgångssamplingsfrekvens / till | Samplingsfrekvensområdet som enheten accepterar; källor utanför det konverteras (tvingar fram transkodning). |
| Kanaler / endast stereo | Nedmixar flerkanaligt till stereo för enheter som bara hanterar två kanaler. |
| Maximal bitdjup | Högsta bitdjup som enheten accepterar; djupare källor konverteras. |
| Utgångsformat | När en transkodning behövs, formatet att konvertera till (PCM, FLAC, MP3, AAC, Ogg). |
| Utgångssamplingsfrekvens | Samplingsfrekvensen att använda vid transkodning; "samma som källa" bevarar originalet. |
| Använd inte RAW PCM | Kapslar in PCM i en WAV-behållare istället för att skicka rå L16/L24. För enheter som förvränger rå PCM (vissa Marantz). |
| Tvinga little endian för PCM-strömmar | Skickar PCM little-endian istället för specifikationens big-endian. Botar uppspelning av vitt brus på enheter som förväntar sig little-endian. |
| Innehållslängd | Hur HTTP Content-Length-huvudet ska fyllas: Standard (korrekt värde), Ingen (utelämna), Endast PCM, eller Fast (ett "enormt" sentinelvärde). För enheter som hanterar huvudet felaktigt. |