Setup DLNA Streaming for Dish Hopper and Joey

I recently got setup with the Dish Hopper/Joey whole home DVR system and was thrilled to see the Joey units could work as DLNA clients and stream movies and music from my PC.  Unfortunately this didn’t work with Windows Media Player 12 sharing, which is the default way Windows 8 shares media, and the answer was not readily available on the interwebs.

I looked at a few options for a media server and settled on Tversity since it had been mentioned by others as working with the Dish units and was the cheapest.  It did not work out of the box but I was able to quickly create a profile that is working great so far. For the record none of the ones I tested worked out of the box (XBMC, Mezzmo, Tversity).  As far as I can tell so far the hopper units can natively handle mp4 and mkv containers with mpeg2, and h264 video and AAC/MPEG audio — The rest (such as Xvid, wmv, etc) must be transcoded. I can now stream the kids shows or the latest episode of Dexter to any TV in the house.

I am putting this here for anyone that wants to setup Tversity to work with Hopper/Joey. I am using Tversity 2.3. All you need to do is install Tversity, add your movies/music selecting to transcode “only when necessary” then edit the profiles.xml file which is found under c:\ProgramData\Tversity\ and add the below profile to the END of the file (just before the </profileList> tag). After saving the file click restart sharing on the settings tab and your Joey should be able to see and play media from your PC.

	<profile id="joey">
		<modelName>Joey 1.0</modelName>
		<!-- inUAFullStr is unclear for the Joey and Hopper units.  Attempting to set here based on tcp sniffed traffic
			inUASubstr - ????
			Joey User-Agent: Linux/#1_SMP UPnP/1.0 DLNADOC/1.50 XiP_110/0000
			Hopper User-Agent: User-Agent: Linux/#1_SMP UPnP/1.0 DLNADOC/1.50 XiP813_DVR/0000 (wow yay for naming conventions)
		<HTTPHeader  inUASubstr="XiP_110/0000|XiP813_DVR/0000" inUAFullStr="Linux/#1_SMP UPnP/1.0 DLNADOC/1.50 XiP_110/0000 XiP813_DVR/0000"/> 
		<!-- List of ip addresses corresponding to devices that TVersity should always map to this profile. This is provided as a manual workaround for device models that cannot be auto-detected otherwise.
		<devicesIP value="ip1|ip2|ip3..."/>
        <!-- The Name of the media serverdevice description file that should be used in conjunction with a player that
             corresponds to this profile -->
        <deviceDescription name="UPNP_AV_MediaServer_1.0.default.xml"/>
        <!-- The container identifier media players of this profile expect --> <!-- Use 1, 2, 3 as identifiers for audio, images, video since some players may require for binding to the remote -->
        <contentDirectory audio="1" photo="2" video="3"/>
        <!-- When transcoding is needed to which format should we transcode -->
        <!-- When transcoding is needed to which format should we transcode -->
        <transcodeTarget audio="audio/mpeg" video="video/mpeg16" photo="image/jpeg"
                         onlineAudio="audio/mpeg" onlineVideo="video/mpeg16" onlinePhoto="image/jpeg"/>

        <maxVideoInfo width="1920" height="1080" bitrate="22000000" fps="60"></maxVideoInfo>
        <minVideoInfo width="0" height="0" bitrate="0" fps="0"></minVideoInfo>
        <maxImageInfo width="1920" height="1080"></maxImageInfo>
        <minImageInfo width="0" height="0"></minImageInfo>
        <maxAudioInfo sampleRate="48000" bitsperSample="16" nchannels="6" bitrate="1536000"></maxAudioInfo>
        <minAudioInfo sampleRate="11025" bitsperSample="16" nchannels="1" bitrate="32000"></minAudioInfo>

			<!-- MP3 audio format-->			
            <mimetype value="audio/mpeg"/>
            <mimetype value="audio/mp3"/>

			<!-- jpeg image format-->
			<mimetype value="image/jpeg"/>
			<mimetype value="video/mpeg"/><!-- MPEG (1 or 2 program or transport stream) video format-->
			<mimetype value="video/mp1s" rename="video/mpeg"/><!-- MPEG1 system stream video format-->			
			<mimetype value="video/mpeg2" rename="video/mpeg"/><!-- MPEG2 (program or transport stream) video format-->
			<mimetype value="video/mp2p" rename="video/mpeg"/><!-- MPEG2 program stream (VOB) video format-->
			<mimetype value="video/dvd" rename="video/mpeg"/><!-- MPEG2 program stream (VOB) video format-->
			<mimetype value="video/mp2t"/><!-- MPEG2 transport stream video format-->
            <mimetype value="video/mp4"><!-- MPEG4 video format-->
				<codec name="MPEG4"/><!-- XVID, h263, DIVX version 4/5 and any mpeg4 ASP (layer 5) compliant stream (H264, AKA MPEG4 AVC or MPEG4 layer 10 or MPEG4.10, is not included here)-->
                <codec name="H263"/><!-- h263-->
                <codec name="H264"/> <!-- H264, AKA MPEG4 AVC or MPEG4 layer 10 or MPEG4.10 -->

                <codec name="MP2" maxBitrate="320000"/><!-- MPEG2 Audio--><!-- never tested-->
                <codec name="PCM_S16LE"/><!-- Uncompressed PCM Audio-->
                <codec name="PCM_S16BE"/><!-- Uncompressed DVD PCM Audio--><!-- never tested-->
                <codec name="AC3"/><!-- Dolby Digital AC3 Audio-->
                <codec name="DTS"/><!-- DTS Audio-->
                <codec name="AAC"/><!-- MPEG4 AAC / WORKS FOR SURE-->
                <codec name="MP3" maxBitrate="320000"/><!-- MPEG1 Layer 3 Audio-->
            <mimetype value="video/MP4V-ES" rename="video/mp4"/><!-- MPEG4 video format-->
            <mimetype value="video/h264" rename="video/mp4"/><!-- MPEG4 video format-->
            <mimetype value="video/mp4v" rename="video/mp4"/><!-- MPEG4 video format-->
			<mimetype value="video/x-matroska" rename="video/mp4"/>
			<mimetype value="video/mkv" rename="video/mp4"/>


I’m sure there are plenty of mistakes but the important part is there, which is the user-agent so the devices are properly detected. If anyone needs any help or works out some changes for the better please let me know.