Page 1 of 2

HD Homerun streaming problem[SOLVED}

PostPosted: Tue Jun 15, 2010 8:54 pm
by PaulF
I read the VLC streaming thread so I thought I would try streaming from my HDHR. The HDHR is a stand alone multicast tuner box that is connected to my network. The HDHR has a setup program that generates an XML file with the list of unencrypted programs on my Comcast cable. I read in the XML and add an item for each program to the UMSP container. Everything works great except I get a "format not supported" message. I save the stream to a file and it plays fine. I snooped with tcpdump and there is a bunch of handshaking between the HDHR(192.168.1.2) and the WDTV(192.168.1.55). The HDHR then sends one video transport stream packet and that's all she wrote.

My proxy uses the hdhomerun_config program I complied from source. The program sends frequency and program number commands and then opens a stream to 192.168.1.55:5555.
Code: Select all
<?php
    include_once('funcs-misc.php');


    $itemProgram = $_GET['prog'];
    $itemFrequency = $_GET['freq'];
    $paramdump = array();

    $paramdump['command'] = 'hdhomerun_config FFFFFFFF set /tuner1/channel auto:' . $itemFrequency;
    $paramdump['commandresult'] = exec($paramdump['command']);
    _var_dump_to_file($paramdump);
    $paramdump['command'] = 'hdhomerun_config FFFFFFFF set /tuner1/program ' . $itemProgram;
    $paramdump['commandresult'] = exec($paramdump['command']);
    _var_dump_to_file($paramdump);
    $paramdump['command'] = 'hdhomerun_config FFFFFFFF set /tuner1/target 192.168.1.55:5555';
    $paramdump['commandresult'] = exec($paramdump['command']);
    _var_dump_to_file($paramdump);

?>


My hdhomerun.php reads the programs and makes a media item for each channel:
Code: Select all
<?php
    include_once('funcs-misc.php');


function _pluginMain($prmQuery) {
    $queryData = array();
    parse_str($prmQuery, $queryData);
    _var_dump_to_file($queryData);
    if ($queryData['channel_list'] !='') {
        $items = _pluginChannelList($queryData['channel_list']);
        return $items;
    }
    return NULL;
}

function cmp($a, $b)
{
    $anum = explode(' ', $a['dc:title']);
    $bnum = explode(' ', $b['dc:title']);
    return ( $anum[0] < $bnum[0] ? -1 : 1 ); #sort by title's unique guide number
}

function _pluginChannelList($prmFeedList) {
    $feedlistXML = file_get_contents($prmFeedList);
    $simplexml = new SimpleXMLElement($feedlistXML);
    foreach ($simplexml->Program as $program) {
        if((string)$program->Enabled == 'true'){
            $param_string = 'freq=' . (string)$program->Frequency. '&amp;prog=' . (string)$program->ProgramNumber;
            $MediaItems[] = array (
                'id'                => 'umsp://plugins/hdhomerun?' . (string)$program->GuideNumber,
                'dc:title'          =>  sprintf('%-4s%s',(string)$program->GuideNumber, (string)$program->Name),
                'res'               => 'http://127.0.0.1/umsp/plugins/hdhomerun-proxy.php?'. $param_string,
                'upnp:class'        => 'object.item.videoItem',
                'protocolInfo'      => 'multicast:*:video/mpeg2ts:*',
            );
        }
    }
    usort($MediaItems, "cmp");
    _var_dump_to_file($MediaItems);
    return $MediaItems;
} # end function

?>


My umsp.php snippet:
Code: Select all
        $myMediaItems[] = array(   
            'id'         => 'umsp://plugins/hdhomerun?channel_list=/tmp/stick/hdhomerun.xml',
            'parentID'   => '0',
            'restricted' => '1',
            'dc:title'   => 'HDHR Streams',
            'upnp:class' => 'object.container',
        );


Snoop:
Code: Select all
21:14:13.361428 IP 192.168.1.55.34477 > 192.168.1.255.65001: UDP, length 20
21:14:13.361789 IP 192.168.1.2.65001 > 192.168.1.55.34477: UDP, length 20
21:14:13.511565 IP 192.168.1.55.34481 > 192.168.1.255.65001: UDP, length 20
21:14:13.511691 IP 192.168.1.2.65001 > 192.168.1.55.34481: UDP, length 20
21:14:13.545371 IP 192.168.1.55.34483 > 192.168.1.255.65001: UDP, length 20
21:14:13.545496 IP 192.168.1.2.65001 > 192.168.1.55.34483: UDP, length 20
21:14:13.588791 IP 192.168.1.55.34485 > 192.168.1.255.65001: UDP, length 20
21:14:13.588916 IP 192.168.1.2.65001 > 192.168.1.55.34485: UDP, length 20
21:14:13.623043 IP 192.168.1.55.34487 > 192.168.1.255.65001: UDP, length 20
21:14:13.623168 IP 192.168.1.2.65001 > 192.168.1.55.34487: UDP, length 20
21:14:13.657201 IP 192.168.1.55.34489 > 192.168.1.255.65001: UDP, length 20
21:14:13.657327 IP 192.168.1.2.65001 > 192.168.1.55.34489: UDP, length 20
21:14:13.702476 IP 192.168.1.55.34491 > 192.168.1.255.65001: UDP, length 20
21:14:13.702601 IP 192.168.1.2.65001 > 192.168.1.55.34491: UDP, length 20
21:14:13.739232 IP 192.168.1.55.34493 > 192.168.1.255.65001: UDP, length 20
21:14:13.739358 IP 192.168.1.2.65001 > 192.168.1.55.34493: UDP, length 20
21:14:13.773688 IP 192.168.1.55.34495 > 192.168.1.255.65001: UDP, length 20
21:14:13.773814 IP 192.168.1.2.65001 > 192.168.1.55.34495: UDP, length 20
21:14:14.198350 IP 192.168.1.2.5004 > 192.168.1.55.5555: UDP, length 1316


Is there a way to get a better diagnostic message? Run DMARender from the command line, maybe??? Any suggested changes? I tried the _freeviewGet function and I am not sure I or my HDHR knows what it is doing. Both my brain and the HDHR say "connection refused"

Re: HD Homerun streaming problem[SOLVED}

PostPosted: Fri Jun 18, 2010 10:45 am
by PaulF
I gave up on streaming the UDP video stream directly to the WD. I used the udpxy method from the IPTV thread to convert to an "HTTP get" stream. I simply added the hdhr commands to mikel's udpxy proxy code. If anyone is interested, I can post the changes. I don't know how to post the compiled hdhomrun_config program, though.

Re: HD Homerun streaming problem[SOLVED}

PostPosted: Fri Aug 06, 2010 1:29 am
by james910
Hi I am interested could you post the changes or email me on jamesmitchell910@yahoo.com.au with the hd compiled hdhomrun_config programchange or do you have a rapidshare account,ect that it is available on :D s

Re: HD Homerun streaming problem[SOLVED}

PostPosted: Fri Aug 06, 2010 6:06 am
by b-rad.cc
privately emailing changes is ridiculous, it helps no one. :roll: IMHO.

If you've done something beneficial then it should be posted for documentation to help anyone else out there.

Re: HD Homerun streaming problem[SOLVED}

PostPosted: Fri Aug 06, 2010 11:42 am
by PaulF
The problem is that I have ho file sharing account. Can I do a binary file attachment on this site?

Re: HD Homerun streaming problem[SOLVED}

PostPosted: Fri Aug 06, 2010 8:05 pm
by zoster
If everything else fails you could encode it to base64 and post it, eg with Total Commander. But it's probably too large. How about a diff?

Re: HD Homerun streaming problem[SOLVED}

PostPosted: Fri Aug 06, 2010 8:11 pm
by b-rad.cc
Can you not post attachments in this forum? You should be able to. You (PaulF) also have svn rights, as I stated in the pm to you ;)

Re: HD Homerun streaming problem[SOLVED}

PostPosted: Sat Aug 07, 2010 10:19 pm
by PaulF
I must be tired. I posted a reply in the wrong thread. Here is a copy.

@b-rad I can not attach, but I can manage posted attachments in my control panel.

Here is a b64 file of hdhomerun_config.zip

Code: Select all
begin-base64 644 hdhomerun_config.zip
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
H1Xwsdx/T1n9ugb8fco8qUZ8A62auGcJ/3m+7rLydTNfoF9CPaW9k9DfrOjf
AvlTCUv+M/b3fzSxsSbaL6ZK2GtS+Bvhj6bg90N/rYLfx/NRweeB36HgLtCP
vGzlv5H7U6HzXXfwHeU85S9cD2s0KOvZzPEq9Ia870yzFJy/C5WgsPuVefUr
xHVUkX8N9N0HNXGPZfqr0H8U83WfxC9CvjTMg2qJb0e8bsxLTeJ/gP/VB61+
/wzx7gtZ9UrzfN+kie92jM9Gvx3pt+bJa3x/UvyZBv5eBecZUPu21Z8/xEuP
Zt1n2ng+K/wbIa/1Wfepn/C8Veh3gV52jUYJmc8beR79VqNzJWZ/nuV+VPiP
Id5Fz1j1uhnxRRU6f89pzNTL+2Y5zYO+ZoWe4f3SYvXjX5HPzU9b94/X4F+T
wk9ebyi43O/1x5PeYDiYUPEWLGTxeMIXS3jbfcEwVlrbI2G54iXvDR3eW/XW
YDyhx+aHfPG4Hqd4IuZvj4IzGI/45871xuN+X7gFywE9FqO2QFukXY8lw95A
MO6PdOgxNhXwBvSOoF+Pe/3JeCLSTi0rY8GEDm5VQLB443rC2+GLUUdLNBYM
J1qopSWUjLexgUgyUZg/kQyzoVikHa7HhvOY9FDEv2KFvtob0+9O6vFRVSH+
Vr0AR+sQh7/NFw7roXZfVOGyFgWngnKSvK2xSDI6XKlkEyyiTi2RqB6eM5vi
wdawLzS6gC/Q4Qv79dGZAnpC9yfOn5eQ7ovr1OIPReJ64eA7ggE9wv2REJ0Q
87cVSLc/pvsS+ij1YE3yNRjI1kMPFOqeDl8oGGBtQ/yF1bVHAnpIWAMkIsnQ
+aJNxnVWnhwpUF8BvwNwMxZZzb2IzYIoQ9BGLXgJ8L8FVIFf97WbG4qg15+M
xfRwIhFsH5k5pvs7qCWaTPipPR7S9ajXF43GIqtG0R4p0FbJaGvMF9CzOtrR
Wu3J9hGi1WPxYCTMuQvp4sGFxYMT6jfDjMv9OKzdvQgothrl5jqG/asLcIQw
QrzRmN4x2qaTzMNZVvqCCW9LxKzdaJuS+zIZH52DMxYMt0SoXW+HbQ4y7I+u
ZtScazHfSn7PaezcSMO+nOrlBGn2/khUzFB1G2KCrhhqqgLNH4x7g6hcMpQI
+gtIyn2W8EeHUSKw6R8mgDywBxjUkdzuXp5s9Q4rb3RFAtXxhVDZ3ICFrrge
DuQxx/S4Psym6OZcPh5vw5QyQZwK3uSsmQXXUZVhBn0BbyLUUVhNXcFlbGwv
erw10VYgO/zk6mKsBmLUbjY+wBcSOxaFahEv0USbsN2eTOirzLbMXUqGxWJH
PCzT6uXWC2D8Z/m+G8EIyRUSwz+7JBuJ50C8gKfsILex6alFNwc0N7w5pJVG
jKB5IyFv/sHGtdfDvuWhnAFs6lE6Y0R9uTXPrmanj3oMsVcYZK3okzjlnk/m
FlDXhm0k0yPzMpC/mtdkSqheUb38LCm+e1cGE23ZU2GYYpyIHbq1A4cd4Va6
TTvRSEyOlPbhbCOExJ0wigk1mOwhGC14aBbiDHxhzmiB6udPpqzcyJT4kMbz
OVaALhOktLc4VoeQgoM9bxoPG/mj3eXMorX7/G3BsJ7fJOqMTQaGzdjlwXDg
fJcMHFp+/Tz3n1F8pxaeSRSM+BOhQvM3ESk0bfneVWhQ8lz1IpJgRyA4i5Li
WkD+kBwoYq7xwYez0OvFERGOiPQk+F4AMVywWCyOS6JfXGWiuh4TuVfmJvEL
kt3iD8PjuEmIRBOjjVqxZQq5O2MO4fuJnIf8K24teRfcsbj+poXzvYsWLr5x
4eLr4ditixZ4b6pvYtZYwvyt1+v1h76Hui/nRT+vzSHvwpu94trGF78AXb9o
YcN878xpM4feaofevi5//bbRWPkskU+7gCLxtFbMp13B+d8iya3yFRXkNtft
Q5C1kqWPGbJm6ixR7NsUT7KSJUMeqFptef7Z8mKw53hmU/y1y5hNPcXyl38a
pic/sqKc2LK6zNzyb+QO+f8MpcHgBP51smICDel9VdJrh+hjBZ3XHAIvosoh
/iLxW7sj+5uwoJcM8V8m8GKqzZG3D8nbqcJz7M7NVa6BTUUDmQNVFXQo7aC+
dKCz07hqnBOaNAc/A52bBH7BGWcRP200sZifDZCPrtlcVZYy6bOvnFvVJGn5
PBWSZ/DtuVWf1pg02BNr42igyEkH+KdpcuE9X9Z1hqgu1WUQ7TCKaWfVmYzN
7T79pPC5ee0DxsbOdUKPg3alJ9HWdBkdSBfn+ZzJkIjlKGSq6fl0A13iacos
f7QGMbtpb9pJz6XLSZtUQb2glXoaaKJn1dlbK9ecnVF55bqZ9gZyeO5bN5GW
ZOzdmcyMyq+U3cL/k+SwUYM7VWYnV9l8lHj1+qxN8O1hXsaZ99NM8yTmRY3d
sLsVdg34YcC2AdsG7Bqch1rkoYGKPamznes5/rGoAeegWcZTRM5LzJw5i1Jn
u9wsw3gW0BPuBrJ7mjPzd2dp2bWAssa6OX+iNshBGeLm2veiTvWwzzFsf7/L
jTWDY1+2dpPRlinpztJ2SxqvMS273jfC+tER1k+PsD7ug8LrNSOsN2Gd+ymT
sbvLZC6dIpcVnuMyTjfi5DpXyFiXIFZXKiXq5Vq3hVjvpcj3V5Ev7I5OztNY
mi/6xuXg390P5dSqGvqRW8H3l8zySZgRlUtSVt+5qp32P6PvUPcaluXa58uz
f/vPmf4tKDqU1oqeT3uK9qbrip5Lzy7qRV360ssp5WA/q2lr1RL0gQM9Xk8l
nhrg3O/RD3ZA784qtummp6qK4T/kjInS9w1rO40y5IpowXqWS4HfVUt25s9k
St2wa7gcmh22Ddg2YNuAbeFjY9GBKidtR59uNaiymAhRXuXsJNgWcfJ7tXyn
UpP2b5mUsFsBmxpiZn8xvd2ZzBg326yFj+zfNNKKXT0aXY6c12M/vvlBvLKO
eqtc64jOZMZ0Y5Z128vHUIZeqeVaZ8hfa/eMQZ22iX1un8O0j2ptNKNS5NvZ
bL/aMdPOuv87o00aT47K88Wm9vt+9ND5+P8J9XQhVM6pU+T0+vUsvxGyHCPr
mUpj3M+Aj3PL9T0q+69G7LO+dH/nfbCRogVCPrDeSduqXLVbRFyuas3snTr+
W5A+oxQ5Yv1cA87phegF7qPeVO584/6sUeYpz5F8XPX5nOJvHfwdFP7ah/lb
jf3ilvulDv3GfVhHO9MeegqxbE1P4N7E3ulR+75WE3uJ8f61yrqT7EPrqR6j
jHYaLIczqju7X5jOuCrHT3NePoc+VOdkhef0KdPXSVNwdk05mB4/5aX0uCkv
pounvJCmKfvS58qfT58p35v+pPy59GB5r8z/j0X+NTP/3a7UFrlfNZHzN0kr
45zvlnSmOWmH6NleQSvxNCq0thM7xH5jPKTkwS1lnpD6QpBxo47ZmJj2S9H7
JZ4BRV/Wj5elHLZDKfN4oPs4bGVzKXkcvIdCnbzXHJ7olSViL0ygYuET4yHl
LLTL9Xqa7Kmnyz3HUNP+zseMMyfeqRz/4UnUl38PmeRBrqt66KWqgfKt6eZM
pzjHvoHzUZyhKdVXp/BjNnx1pfg3vZ2Gy6nZXdX99o8vcIx31Zl0ou3dx/Nm
I69XSrl+zJA+ekrMtsN4lzrQSwNCD+/3Y+VbDWlrEufjqJw772agA/0/UL7N
4HVXbTOxvOfDHe7T8J/lT5VvS+PdOIr88zkM3LjauUDk+c+Z1KQ28ruzcb6e
Me89CaUm2XqNIa2U3zfm9LUmYrkUlzneU+hF9Bd6fcpBA/1ooB8N9KOBfjTQ
jwb60UA/GuhH0ctlUw5UHS/f+TjrYV9rPjT76XV5Z8mfNbx3s/v2lOS5l+dS
T+5cip6w9ngVeN8Te9zh3rC2R/KMFef5paA1nTB1Mj/OEpHnIuoX9X5DyvG+
LBNnbomYlxtwjhwe0mnZrVPssu6XFZ7sOeSGDaZvRD8/X0DHPkXHFUPzNFeH
WWvzHDsBPU9KHnGmyhm2QJz5vOc7jY+lHPNXY29iHTNlp6Hq5HOtTvZhLd7Z
BvfebLw3fmjuPZ57C5TZ2ihnUUraXAObq+hgOkEvpaP0YjpEL6TbaF86gHtn
M+6ayzBTl8qZStS7/gxsu3q2kGtjiqbLmLOz0i7v4DZqcgs+pxnvMvAxrYGK
PEzLZJZXTgbelonuLqZbutnvXvjr5D3odNovlntmv7LG+j/PxCsrIDeOlkC+
udyMaUF3I3j4nX96tdEt1f8+zsT5HfGhv512xGggRgMxGojRQIwGYjQQo4EY
jaVyVqeQn0Zhk//+1tS3tJNjcdrNWUDWedHZY7xl07Cb7XtSuXtM8PDznLq+
y1xfLOfooDxP+jsfGZqzTP+1jenFnmsRI/ONo9u693+czcUWkYtierRyIvRk
Mh2Vdnrn6unUP5l9Wwd7xdRlzrta01fcBruPdKrzjP9e7rbuv0J2PPSwjf7/
yNU/Tfp4OfWX8n3N2cm+XtedPf8qcC9ivpXyzK+QZ36IzPuUeubjO5I7m7M+
5Qxl/HE5E7I1Y75PM7l15LU/ybUNax+R/e/uPiF7HPcR4fOzUlfZydxYLpax
cJ7+M9M/uR7fL4oRS8XJ+ZhC2wFLuifTfY6Kkw3ufiGXEnLHpM1aRV+T1PW7
TH8p322us71SavYe52ZB92UXWj4flvKY4T022tbD6x/h7s2zbyCFcx2H5TKl
t6j4ukqW41nSxXkqHuN2rePf4nFuOvmvkluH8kbF82sc4u7YjFnaYHf1zLTz
OcW+cwxE2lazB532o0oPLsE8ABhM2yz941o55VnPPjHtsQLzPP8exnwPCR0T
3flz33nSnNEXgY/vasybkvbq8uozzWbV5/uoD9s17ztmv/GMUPfHVLt5r+Hv
L9rJ7B3DnBGbhC67x6yt+1GW+ZHNrK0nZZ4H/8va1QfHdV31s29X8jZZk2d5
Y28SJdm1nlc7lSAbV2QURiEbaeN6gsvIH2k9IQyq4lAzZIob28FNPcNaVjJm
ELvKB9QDHVhkK9YEsesP2THBcTStC2ZIwcM4JUAau25SO+CCyRhq0tjL75x7
7urtaqWkM/yReat777v33PP99ZxVde8EHOC3mKF9O2t5k+ceCWRiGcTX7Jds
blte9Vdc8VeWz/JXeJx9qXod3ktLe6wMHAMczMdmfEnPxeDDXoc7Bhr2yZns
u8boRHs/sT9zXuz8V9WfOVbnS2+snMzzO6OUiyb2ZCg9ZO6QZPzARy8uH+8y
MjId5HUYK/wd+AkawItQroV1FNON/Vteb+mb6M7BT9hXsO+kA9ko07XDfZIe
VFhC1LfkYnAs2eFuczIYk98TD1Ni9JDTEX8SuhkwQecFsa7DHXRC+t7F4LZk
x+hhvq9zSXHeT+NVHSj2C2fy2R1uHz2u73Hs1oNxyVNg/AkdZzuY8Y2P6Djb
xKxv/HfUPl0SHbRc6LxFaQacF6bF5x1DvDAm+gXnlTPqt3WKHTW/sW95FX7z
+4C17KernzZtuHOGsrL/71dyMfHTfPzyrbtCxPTl+d9VP24BaDLbZ8tVY5HJ
3Gwe5btc8p19g96JqD0f17zDnndmZHcpZPL2G2f01B9dNzJs8cJ8YPfxr9tY
mS4xL/y66gY/Hn9Lz/wLnbO60NrLndeN7Pvf+bK+U/Tpmlp/yejFk9DzC6/P
1jNXvzdzp1bVR0y343W25/q12fD+nJ69s8Fdturc0zq3tcZ2mvvconMH6nTZ
19Q+9F+fljiIaGWe9U4iPk3rEYtK7I53jFy9VPiQdTt0vD+2P/POsGdjy4s7
a+MQHn8PcYjYObYdgEdyVgsMzLyH3/a2njV7Ze5ELNXgHvXru7Ce7VMrTYl9
5/beO2mx92u0rqWTTE7E8gM/t6v8JlI5x+9zBGhtks+7GAwhXs+E+DzOi7RC
zu09typsH15rbEM21fGs2LtruRZeO50zeV9EgJLHfP/a0Jxyc173t/KQe6fW
5+c1/6xrjK1uE7ux5fpg1MT/9qz1I09dV57AM1EkYroz/YtnDU3/8Zqhf1z1
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
Hw1vU95b7v4NLVZ7ZPC4KGlht2cJv+tZfA8+i8/hNbW0M3dJLJ3p+/03hWUu
GjfyOVYobBOSAx4eMfUP1bMp7oEystE8j1wwfvj3fGu21q1pxMOGfx3ElkNz
5HeNPpur/2fm7/lzd/4em5zmwu9QX3G16CD+DoL7aYyt3656KIWx1Ttn9+Zm
5hxv7ukEnT8aZDtNjt0P/q6jecOo/TcL2E/0w366rm7C39qY7yhbeyb0Tutx
p346UV6NGHUV/KMs/KMM7FAP7FA3ZLgLPJjWGJW/y+QeUqb1mQvvtJ++cCTJ
+jlDLyBej3pu+xIvcYx75IwM3OPj0/pvEq2uZn1udXVc/EbulTayGddcWSA0
2Gn7TWv3GnA2S66U8arfRqr+eEj1x2kf/cPkSd5ya4PveGM+++jf/4sqU2E9
5w2V6/WafwXu4HO9gpjsKGKyI6DXFPzDw/APD8E/PAj7Z+ixAfTYjrjVyPlW
N0zLk8Paw+NpLjQFO2LyansLnC9NSY31KGIdrnUPVL9h5jVvqo21Mj8X/DGf
fa+vw//BHLXAJ/h7SrHvG+nfK6a/sZl2yXOTymBHPIv40Pho6W0P8jctJL3v
sT5iWd5ETaJzbD+bxvb0x4B7K2ThzU9w9hu+s9Pbsp7/7G/jbB7jmiXXPPhc
zMt5fC7vcbyy3mW52+jrQeFvd3nuoNKR9UVE4j7Fs37n3nunqZXvr64L5l8A
zEw368N5NIQ1M3FHa01f7szv/mr9p6/T9uOuoN7OoPIsr4O+6OEnQW+Q/T3d
27Ve393YYL1/navrbK9BnJ752H9TIzTTc+tybS83NBMrMr6sTuR4LQy9bmP4
Sxe4j1n+tyOlkOa/2Kf5ON0pdV89k/t5E91F7meVfKHUuur+3ZVW3CFGz0r/
Fq/ZfNH0Bng07F3R/J6FTcYx/x++fG/92bYO16x43KT3ne+uOy6OV//9jvnu
Zffmnkb+NxP4ff/+57AP5yjmOmfi/+kc7/35z7kyxzm1cfJMfcieyTpf+phG
i3Rcznv2/2i7+uCorut+9ulJyETAk5DxgmX8VlrtCq9C1lSk23qbrsWCcYwz
ssNk3NbtKEI4mtrpyA2Teqb8sQjsyp2N3jZhMrRlWllIQDtbLR8CMy2pVZsQ
ZuLp0Jn84SaMLTu0NgbbAgOmX3k9v/ux+/ZpJeSx/MfO7r6P+849795zz+fv
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
KcbH19T8/n0VPw8yf+U4WTeua0jfKLYn825qlS0CXlRROnyhOP5J5docc/S9
F333Psj3VvM9uNemeoEtesEzf3CvkkfGt22r7oqQSaPi2DT/xrEtolZGHrul
jnV5jtE1eWyr51itOvYEH9tCVSK35Iu0rR25QgHalsA1yAlLqZwXjYUNm6JN
YN1LbPwV1CNkWpqvRTyf3x2Py2Nl9iXi9luVHTTb+bM8PtF/9HdMyQr4fTZz
u/7xvJf7eHHW8Xy8uOeDzvsJemov/3seeXln7vh6GDmAooYgLvNFvs+8Av6i
9x5bjZWU0vO1Lz6t/reoNW6z+n+v+l+W/xf/42JewXIfzoR+vni2j953FLbE
XHtN6FzCy67GfXxF6SGz7U0xe+5UWtlQvynmXkbklNn0F6L2yrpWHl/QeMSP
8Jq3jvu1hfReGRsIODMxK01rhX5hJCvlSO1Hjua1kt1uqHl9xU1ZaHO/8j81
Vbjml75rcN5W9OGan/P53+XzwD7rYtpEHQryACY7OyphKWGMVTpObuX9Hir5
vLS/qFrxzu+3uij8DHv21lLN0BZtIzwy1oH+XOd3ZxbngLTFoOuIWP01me99
2bO2VspROBOS+eymyiFbSxlL5lbJPJ+7VJ7P9TKcf1J5lCXsxJRv7qC9/hn7
x8gcBG8OA2juZVofWF3KratWMvOSGsc6Z73Pd93b6rzOqfO3bSm/Hvxf6Le2
wXU86mcVfGpy7s1937lZfHG3vW9X5efNhb2l/aE1FfyhWk6Yvry9XAXfLqlr
tF81lfl0eXu3s6EEjjnTWyVw1SbpaZZX/tprbeM1K1mnaXpM0XQdz45rbHDk
rndGfuV2tgfVWihiiAM6ZkTjjUSsLzWMNwk/NI0jfwU2YpjMSCnWSiMlfXqm
XaZpQE6xsap+Bl+kz4/GcQ77kEh/S/M6I1lPkg69J0m9qm03I5IuKtGldH3s
WfIgVSWHr/WETUpnh69tz6apKpIWtW69+VpK75W5nb2js9F70YdZK/aSEPX7
KeoWcqBmyJuDBlvl71hOkE9OCBv5Wql+0+tDfOaaxuavZDtUzqFPCrvmkKzx
UHUtvRr/OCfrWoCpzNeg9l5gRFcRrailh/IrlD4lazdtY0dzCTd8FfaJ4LEg
7Qx57G4ldzqEzthtzJUDz+sbsNyN+Vzrxw97F3xlvd9//G11XPKshD95hfn2
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
s8N8dpjPUq7ZlXAFSzWX0OHNQC4MbCC293jeHCpIWa/GVE7q8/ifLdsHR+rV
OO7Hv5H6/yFnp4ghTZXpaf52jNu0g32cynF0Su3QQHk7tYHoUF2geQjnW6yH
CPYr9KTBjNw3WODuWIhhYq/ZSdJ+YuARSjzF8nrKlJK15Xl4/1zI0su39WUI
WZORsmY/24/DzNtFLG9Gmb+wk8X639ZDjZTJ/6873GixLPnHiPTrUqBK9MGg
nvbvBoC1AUyi+kiAlvN9q8PXXYlL0MPzfNoNR+6g78u6VbdlaNptHbrlhoeI
No5DDrF+N15HG8bRpsU6U4DejCIuG7O2GVg/LV6ngkvqI9hPmQKrx5+g4cJm
/gDrGXjW99FJthlO8Lo5AkwptumPRbu4n/tV3ezDKsfAoDe/FKHJu9C30DTP
K55L0CNCKaL9zNca6EGZbpZJzVIPtQwD+TAW0xOkV1nWvOZEWAcLsyy/CV/d
GouANS0we9taVawpZfTR4UJzFLhaB9gmP+ygrdYUizH13tHuZdGvN6NY4zcQ
3RnK2MZ+sTeriFUZo7y+oV3ZzojIMwMeNrDMNvO72ivya0YcftcOv+vb+l72
KdnI72JIzo3vRNAmeH4QeL/Ma/DHZf6AH8DoQiwfeN7D3N5W5hPeK3jG+m+g
iSJDQdZfaM1qisZrhBwItVVLvKhEtyHpPlFA+3ifseBrVXhea65T6PZ4p6FU
ygB20xbZvvM2UT3uP1U291aHz1EJkxdtPEmjBezXRYFijE76ypleFZssQO9h
OgVGXBk+2JJFQ+ElRnH+Ye517IIfrjT3QDfmnZyDCvsrPinm9N0Cj/T+iH42
9Kb/FO/y8UhKxUX9scitLB9shQe+V+G5fI8OSAxmGnXgi8M6/efugMX/uV+r
h7qUbmMvqRrC3nDAWoT+lkZbSzR2S7eg6YKbCgLzu13hE7/hblAxy1HnMPYu
WAl0IFPtNQO/FbAQ4Vc44GC/ONDM88U5JXALelhn7+b1tDsvce5SRRwvW+Dm
sE4ZxP6MIz+Q/pGt3LIZ/i36A4nntaTKg5FXfu816MJ877Dwm1WF9d7tKTGH
Rnkdl3jtL7ppQf8o0y4xDEbUdaOO3hdI7qm7UfVTzvOHqDsosB543mxhGdfN
46FXjIUpvkbiP1apOf4bLBPq+D3u1XVfKn+mjmrCmK+23Kul8b7gcoPbcrgt
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
====


Save to a <file> on the WD and do "busybox uudecode <file>"

Instructions: http://www.silicondust.com/hdhomerun/hdhomerun_development.pdf

Re: HD Homerun streaming problem[SOLVED}

PostPosted: Fri Aug 20, 2010 9:52 am
by parnott100
Don't know if you are still interested in a direct php+hdhomerun_config proxy option but I may have some ideas for you.

I have been working on something similar to run on a HP MediaVault NAS with thttpd. It will be basically a HTTP proxy written in PHP that will get a video stream from a HDHOMERUN and stream via HTTP to a client. I want to replace a shell script version that I cobbled together some time ago.

I now have a working command-line test-only version of the code that will get a video stream from a HDHR and send the video stream to a file (either stdout or file on a disk). Much more work needs to be done, but if you are still interested the code is below.

Code: Select all
<?php
// Begin test parameters
$HDHR_DEVICE = 'FFFFFFFF';
$HDHR_TUNER = 'tuner0';
$HDHR_CHANNEL = '8vsb:28';
$HDHR_PROGRAM = '3';
// End test parameters

// Define how to execute the hdhomerun_config program (program execution method and location)
$HDHR_CMD = 'exec /opt/local/bin/hdhomerun_config';

// Set the channel on the selected tuner (discard all output)
$HDHR_SET_CHANNEL = "$HDHR_CMD $HDHR_DEVICE set /$HDHR_TUNER/channel $HDHR_CHANNEL 1>/dev/null 2>&1";
$cmd_output = array();
exec($HDHR_SET_CHANNEL, $cmd_output);

// Set the program stream filter on the selected tuner (discard all output)
$HDHR_SET_PROGRAM = "$HDHR_CMD $HDHR_DEVICE set /$HDHR_TUNER/program $HDHR_PROGRAM 1>/dev/null 2>&1";
$cmd_output = array();
exec($HDHR_SET_PROGRAM, $cmd_output);

// Get the video stream from the selected tuner and passthru to stdout (discard stderr)
$HDHR_GET_STREAM = "$HDHR_CMD $HDHR_DEVICE save /$HDHR_TUNER - 2>/dev/null";
$proc_descspec = array( 1 => array('pipe', 'wb') );      // only interested in stdout (must use binary mode because the output will be a video stream)
$proc_pipes = array();                           // will be filled with the resource handles corresponding to $proc_descspec
$proc_options = array( 'binary_pipes' => TRUE );      // need binary option because the output is a video stream

$proc_res = proc_open($HDHR_GET_STREAM, $proc_descspec, $proc_pipes, NULL, NULL, $proc_options);
if ( is_resource($proc_res) ) {
   fpassthru($proc_pipes[1]);         // $proc_pipes[1] is stdout from the $HDHR_GET_STREAM command
   proc_close($proc_res);            // this probably never gets executed because the program is SIGTERMed
}

exit;
?>


Next step obviously is to get this working within a web server.

Re: HD Homerun streaming problem[SOLVED}

PostPosted: Sun Sep 12, 2010 9:29 am
by Kurtois
I see that it says HDHR problem "solved". Really? I don't really see instructions or anything that indicates how to do this. Would really appreciate this capability.