Streaming
Aus M740 WikiWeb
AV Streaming mit der Box
Eine WikiSeite um die benötigten Infos zum Streaming-Interface zusammenzutragen.
Funktion der Komunikation
Die Kommunikation wird über den Port 10001 per XML geführt. Darüber wird auch das Streaming aktiviert, welches dann über den Standard Port des VLC (1234) geführt wird. Diese Verbindung hat nichts mit dem UPNP Server zu tun.
Um eine Verbindung mit der Box herzustellen, wird zuerst der Connection Request (Verbindungs Request) gesendet. Auf die Antwort der Box mit einer Return Value, der aus einer 15-stelligen Zahl besteht, sendet der Rechner zur "Identifizierung" eine Sessionid (Verbindungs Identify).
Verbindungs Request
Connection Request: baut eine Verbindung zur Box
<Message><Command type="connection" subject="request"/></Message><//>
Antwort der Box:
<?xml version="1.0" encoding="ISO-8859-1"?> <Message> <Return value="386452781266304"/> </Message> <//>
Verbindungs Identify
Identifizierung nach dem Herstellen der Verbindung.
<Message><Command type="connection" subject="identify"><Parameter key="sessionId" value="38645"/></Command></Message><//>
Zum berechen der Sessionid
Antwort der Box:
Standard Antwort
Standard Antwort
<?xml version="1.0" encoding="ISO-8859-1"?> <Message> <Return value="0"/> -> 0 wenn kein Fehler aufgeteten ist -1 bei Fehlern </Message> <//>
Model der Box auslesen
<Message> <Command type="request" subject="model"/> </Message> <//>
Antwort:
<?xml version="1.0" encoding="ISO-8859-1"?> <ModelDescription> <Model>M740AV</Model> <Hardware> <Version>1</Version> <Tuner>2</Tuner> </Hardware> <Software> <Version> <Major>2</Major> <Minor>0</Minor> <Micro>36</Micro> </Version> </Software> </ModelDescription> <//>
Einstellungen auslesen
<Message> <Command type="request" subject="settings"/> </Message> <//>
Antwort:
<?xml version="1.0" encoding="ISO-8859-1"?> <Settings> <General> <Software>1</Software> <PowerSaveMode>0</PowerSaveMode> <LastClubClipsUpload>0</LastClubClipsUpload> <LastEpgUpload>0</LastEpgUpload> </General> <Osd> <Sound>1</Sound> <Transparency>30</Transparency> <DisplayDuration>4</DisplayDuration> <Skin>1</Skin> <MenuLanguage>0</MenuLanguage> <LedBrightness>0</LedBrightness> <TimeSelection>15</TimeSelection> </Osd> <Tv> <ImageFormat>0</ImageFormat> <VideoFormat>0</VideoFormat> <AudioLanguage>0</AudioLanguage> <AudioOutput>1</AudioOutput> <Volume>186</Volume> <Pip>2</Pip> </Tv> <Pvr> <RecordingFolder>/pvr/media/PC1/tmp</RecordingFolder> <Forerun>5</Forerun> <FollowUp>25</FollowUp> <TimeshiftBuffer>45</TimeshiftBuffer> <WarmupTime>3</WarmupTime> </Pvr> <Network> <Dhcp>0</Dhcp> <Name>M740AV</Name> <Ip>192.168.000.010</Ip> <Subnet>255.255.255.000</Subnet> <Gateway>192.168.000.001</Gateway> <Share id="0"> <UserName>User</UserName> <Password>Passwort</Password> <Workgroup>LinuxHeimnetz</Workgroup> <Pc>192.168.0.11</Pc> <Folder>musik</Folder> </Share> <Share id="1"> <UserName>user2</UserName> <Password>passwor2</Password> <Workgroup>LinuxHeimnetz</Workgroup> <Pc>192.168.0.12</Pc> <Folder>Filme</Folder> </Share> </Network> </Settings> <//>
Einstellungen setzten
Setzen vorbereiten:
<Message><Command type="order" subject="settings"/></Message><//>
Antwort der Box:
Standard Antwort
Setzen durchführen:
<?xml version="1.0" encoding="ISO-8859-1"?> <Settings> <General> <PowerSaveMode>0</PowerSaveMode> </General> <Osd> <Sound>1</Sound> <Transparency>30</Transparency> <DisplayDuration>4</DisplayDuration> <Skin>1</Skin> <MenuLanguage>0</MenuLanguage> <LedBrightness>0</LedBrightness> </Osd> <Tv> <ImageFormat>0</ImageFormat> <VideoFormat>0</VideoFormat> <AudioLanguage>0</AudioLanguage> <AudioOutput>1</AudioOutput> <Pip>2</Pip> </Tv> <Pvr> <RecordingFolder>/pvr/media/PC1/tmp</RecordingFolder> <Forerun>5</Forerun> <FollowUp>25</FollowUp> <TimeshiftBuffer>45</TimeshiftBuffer> <WarmupTime>2</WarmupTime> </Pvr> <Network> <Dhcp>0</Dhcp> <Name>M740AV</Name> <Ip>192.168.000.020</Ip> <Subnet>255.255.255.000</Subnet> <Gateway>192.168.000.001</Gateway> <Share id="0"> <UserName>xxx</UserName> <Password>xxx</Password> <Workgroup>123</Workgroup> <Pc>192.168.0.11</Pc> <Folder>Musik</Folder> </Share> <Share id="1"> <UserName>yyy</UserName> <Password>yyy</Password> <Workgroup>123</Workgroup> <Pc>192.168.0.98</Pc> <Folder>Filme</Folder> </Share> <Share id="2"> <UserName>---</UserName> <Password>---</Password> <Workgroup>---</Workgroup> <Pc>---</Pc> <Folder>---</Folder> </Share> <Share id="3"> <UserName>---</UserName> <Password>---</Password> <Workgroup>---</Workgroup> <Pc>---</Pc> <Folder>---</Folder> </Share> <Share id="4"> <UserName>---</UserName> <Password>---</Password> <Workgroup>---</Workgroup> <Pc>---</Pc> <Folder>---</Folder> </Share> </Network> </Settings> <//>
Antwort der Box:
Standard Antwort
Start des Streaming per XML
<Message> <Command type="order" subject="rtp_streaming"> <Parameter key="enable" value="1"/> <Parameter key="ip" value="192.168.0.10"/> <Parameter key="port" value="1234"/> <Parameter key="player" value="0"/> </Command> </Message> <//>
Streaming beenden
<Message> <Command type="order" subject="stop_crid"/> </Message> <//>
Antwort der Box:
Standard Antwort
Programm TV-Ausgabe umschalten
Umschalten der
<Message> <Command type="remote" subject="7"/> </Message> <//>
Antwort der Box:
Standard Antwort
Programm Stream umschalten
Das Umschalten für den Tuner der gerade nicht von der Box für TV-Ausgabe belegt ist.
Vorbereiten mit:
<Message> <Command type="order" subject="rtp_streaming"> <Parameter key="enable" value="1"/> <Parameter key="ip" value="192.168.0.98"/> <Parameter key="port" value="1234"/> <Parameter key="player" value="0"/> </Command> </Message> <//
Antwort der Box:
Standard Antwort
Nach der Antwort Sender Auswählen mit:
<Message> <Command type="order" subject="tune_live"/> <Parameter key="index" value="3"/> => Umschalten des Streams auf Programm 4 </Message> <//
Antwort der Box:
Standard Antwort
Programmliste Auslesen
<Message><Command type="request" subject="channel_list"/></Message><//>
Antwort:
<Message><Command type="request" subject="channel_list"/></Message><//> <?xml version="1.0" encoding="ISO-8859-1"?> <ChannelList> <Channel orderId="0" serviceId="10002" serviceName="Das Erste" /> <Channel orderId="1" serviceId="10037" serviceName=".ZDF" /> <Channel orderId="2" serviceId="10035" serviceName="VOX" /> <Channel orderId="3" serviceId="10027" serviceName="SAT.1" /> <Channel orderId="4" serviceId="10026" serviceName=".RTL Television" /> <Channel orderId="5" serviceId="10012" serviceName="KABEL1" /> <Channel orderId="6" serviceId="10022" serviceName="ProSieben" /> <Channel orderId="7" serviceId="10025" serviceName="RTL2" /> <Channel orderId="8" serviceId="10104" serviceName=".Super RTL" /> <Channel orderId="9" serviceId="10009" serviceName="Eurosport" /> <Channel orderId="10" serviceId="10016" serviceName="N24" /> <Channel orderId="11" serviceId="10013" serviceName=".Doku/KiKa" /> <Channel orderId="12" serviceId="10000" serviceName=".Info/3sat" /> <Channel orderId="13" serviceId="10003" serviceName="arte" /> <Channel orderId="14" serviceId="10109" serviceName="TERRA NOVA" /> <Channel orderId="15" serviceId="10014" serviceName="MDR FERNSEHEN" /> <Channel orderId="16" serviceId="10102" serviceName="WDR Dortmund" /> <Channel orderId="17" serviceId="10021" serviceName="Phoenix" /> <Channel orderId="18" serviceId="10023" serviceName="CNN Int." /> <Channel orderId="19" serviceId="10034" serviceName="VIVA" /> <Channel orderId="20" serviceId="10100" serviceName="NDR FS NDS" /> <Channel orderId="21" serviceId="10108" serviceName="WDR Wuppertal *" /> <Channel orderId="22" serviceId="10101" serviceName=".S.DWEST RP" /> <Channel orderId="23" serviceId="10103" serviceName="WDR Essen *" /> <Channel orderId="24" serviceId="10105" serviceName="NDR FS NDS" /> <Channel orderId="25" serviceId="10106" serviceName=".S.DWEST RP" /> <Channel orderId="26" serviceId="10107" serviceName=".WDR D.sseldorf" /> <Channel orderId="27" serviceId="10110" serviceName="EinsPlus" /> <Channel orderId="28" serviceId="10114" serviceName="MDR FERNSEHEN" /> </ChannelList> <//>
Dies Liste entspricht der Zuordnung in der "/var/etc/user_services.txt". Die "serviceId" findet dann in der "/var/etc/services.txt" die Zuordnung zum Sender (Letzte Spalte in der Datei).
Playlisten
Playlist Audio
<Message><Command type="request" subject="playlist"><Parameter key="playlistType" value="audio"/></Command></Message><//>
Antwort (ohne vorhandene Playlist):
<?xml version="1.0" encoding="ISO-8859-1"?> <Playlist> <Name>(null)</Name> <MimeType>(null)</MimeType> <Size>0</Size> <PlaybackMode>1</PlaybackMode> <Looping>1</Looping> </Playlist> <//>
Playlist Video
<Message><Command type="request" subject="playlist"><Parameter key="playlistType" value="video"/></Command></Message><//>
Antwort (ohne vorhandene Playlist)
<?xml version="1.0" encoding="ISO-8859-1"?> <Playlist> <Name>(null)</Name> <MimeType>(null)</MimeType> <Size>0</Size> <PlaybackMode>1</PlaybackMode> <Looping>1</Looping> </Playlist> <//>
Playlist Bilder
<Message><Command type="request" subject="playlist"><Parameter key="playlistType" value="photo"/></Command></Message><//>
Antwort (ohne vorhandene Playlist)
<?xml version="1.0" encoding="ISO-8859-1"?> <Playlist> <Name>(null)</Name> <MimeType>(null)</MimeType> <Size>0</Size> <PlaybackMode>1</PlaybackMode> <Looping>1</Looping> </Playlist> <//>
EPG auslesen
<Message> <Command type="request" subject="epg_channel"> <Parameter key="serviceId" value="10002"/> <Parameter key="startTime" value="1130558400"/> <Parameter key="endTime" value="1130644799"/> </Command> </Message> <//>
Antwort: (gekürzt)
<?xml version="1.0" encoding="ISO-8859-1"?> <CridList> <Crid id="113055810010002"> <Title>Blinky Bill</Title> <ServiceId>10002</ServiceId> <StartTime>1130558100</StartTime> <EndTime>1130559600</EndTime> <RecordingDuration>-1</RecordingDuration> <RecordingStatus>0</RecordingStatus> <RecordingType>32</RecordingType> <PermanentFlag>0</PermanentFlag> </Crid> <Crid id="113055960010002"> <Title>Fix & Foxi</Title> <ServiceId>10002</ServiceId> <StartTime>1130559600</StartTime> <EndTime>1130560800</EndTime> <RecordingDuration>-1</RecordingDuration> <RecordingStatus>0</RecordingStatus> <RecordingType>32</RecordingType> <PermanentFlag>0</PermanentFlag> </Crid> <Crid id="113056080010002"> <Title>Tom, Jerry & Co.</Title> <ServiceId>10002</ServiceId> <StartTime>1130560800</StartTime> <EndTime>1130562600</EndTime> <RecordingDuration>-1</RecordingDuration> <RecordingStatus>0</RecordingStatus> <RecordingType>32</RecordingType> <PermanentFlag>0</PermanentFlag> </Crid> <Crid id="113056260010002"> <Title>Gloria und ihre Familie</Title> <ServiceId>10002</ServiceId> <StartTime>1130562600</StartTime> <EndTime>1130564100</EndTime> <RecordingDuration>-1</RecordingDuration> <RecordingStatus>0</RecordingStatus> <RecordingType>32</RecordingType> <PermanentFlag>0</PermanentFlag> </Crid> . . . <Crid id="113064390010002"> <Title>Die sch.nsten Bahnstrecken Europas</Title> <ServiceId>10002</ServiceId> <StartTime>1130643900</StartTime> <EndTime>1130644500</EndTime> <RecordingDuration>-1</RecordingDuration> <RecordingStatus>0</RecordingStatus> <RecordingType>32</RecordingType> <PermanentFlag>0</PermanentFlag> </Crid> <Crid id="113064450010002"> <Title>Tagesschau</Title> <ServiceId>10002</ServiceId> <StartTime>1130644500</StartTime> <EndTime>1130644800</EndTime> <RecordingDuration>-1</RecordingDuration> <RecordingStatus>0</RecordingStatus> <RecordingType>32</RecordingType> <PermanentFlag>0</PermanentFlag> </Crid> </CridList> <//>
Timer
Timer Auslesen
<Message><Command type="request" subject="timer_list"/></Message><//>
Antwort ohne gesetzte Timer:
<?xml version="1.0" encoding="ISO-8859-1"?> <CridList> </CridList> <//>
Antwort mit zwei Timern wobei der erste eine Serie ist:
<?xml version="1.0" encoding="ISO-8859-1"?> <CridList> <Crid id="1131312060010001"> <Title>Stromberg</Title> <ServiceId>10001</ServiceId> <StartTime>1131312060</StartTime> <EndTime>1131314280</EndTime> <RecordingDuration>-1</RecordingDuration> <RecordingStatus>1</RecordingStatus> <RecordingType>8</RecordingType> <Series id="-1131296553" hdd="11" mo="0" tu="0" we="0" th="0" fr="0" sa="0" su="1" /> <PermanentFlag>0</PermanentFlag> </Crid> <Crid id="116275410010022"> => einzelne Aufnahme per EPG Programmiert <Title>(T)Raumschiff Surprise - Periode 1</Title> <ServiceId>10022</ServiceId> <StartTime>1162754100</StartTime> <EndTime>1162761660</EndTime> <RecordingDuration>-1</RecordingDuration> <RecordingStatus>1</RecordingStatus> <RecordingType>1</RecordingType> <PermanentFlag>0</PermanentFlag> </Crid> <Crid id="116286300010025"> => Keyword Timer <Title>24</Title> <ServiceId>10025</ServiceId> <StartTime>1162863000</StartTime> <EndTime>1162865700</EndTime> <RecordingDuration>-1</RecordingDuration> <RecordingStatus>1</RecordingStatus> <RecordingType>4</RecordingType> <Series id="-1162407203" hdd="48" mo="1" tu="1" we="1" th="1" fr="1" sa="1" su="1" /> <PermanentFlag>0</PermanentFlag> </Crid> <//>
Manuellen Timer setzen
Einzelaufnahme
<Message> <Command type="order" subject="define_timer_recording"> <Parameter key="description" value="Manueller timer"/> <Parameter key="serviceId" value="10022"/> <Parameter key="saveHdd" value="-1"/> <Parameter key="startTime" value="1135191600"/> <Parameter key="endTime" value="1135192500"/> <Parameter key="seriesFlags" value="0"/> </Command> </Message> <//>
Antwort der Box ist nicht "Normal"
<?xml version="1.0" encoding="ISO-8859-1"?> <Message> </Message> <//>
Serienaufnahme
<Message> <Command type="order" subject="define_timer_recording"> <Parameter key="description" value="test manuelle serie"/> <Parameter key="serviceId" value="10002"/> <Parameter key="saveHdd" value="7"/> <Parameter key="startTime" value="1135195200"/> -> 22.12.05 21:00 <Parameter key="endTime" value="1135198800"/> -> 22.12.05 22:00 <Parameter key="seriesFlags" value="85"/> -> Di, Do & Sa aufnehmen </Command> </Message> <//>
Antwort der Box ist nicht "Normal"
<?xml version="1.0" encoding="ISO-8859-1"?> <Message> </Message> <//>
EPG Timer setzen
Einzelaufnahme
Ablauf einer Timer Programmierung für eine Einzelaufnahme:
- Epg des Kanals Auslensen um die aktuellen Daten (cridId) zu kennen
- senden der zu speichernden Sendung
<Message> <Command type="order" subject="define_epg_recording"/> <Parameter key="cridId" value="113130462010022"/> <Parameter key="seriesFlag" value="0"/> </Message> <//>
- Danach wird nochmals das EPG ausgelesen
- und zum Schuß die Aktuelle Timerliste geladen
Serienaufnahme
Timer löschen
<Message> <Command type="order" subject="delete_planned_recording"> <Parameter key="cridId" value="1131312060010001"/> <Parameter key="seriesFlag" value="1"/> -> beimlöschen einer Serie 1 sonst 0 </Command> </Message> <//>
Antwort der Box:
Standard Antwort
Aufnahmen
Aufnahmen auslesen
<Message><Command type="request" subject="my_recordings"/></Message><//>
<?xml version="1.0" encoding="ISO-8859-1"?> <CridList> <Crid id="112570140010035"> <Title>SPIEGEL TV</Title> <- Name <ServiceId>10035</ServiceId> <- Service Id aus Sender Liste <StartTime>1125701400</StartTime> <- Startzeit als Unix Time Stamp <EndTime>1125718500</EndTime> <- Endzeit als Unix Time Stamp <RecordingDuration>13472</RecordingDuration> <- Aufnahme dauer in Sekunden <RecordingStatus>3</RecordingStatus> <- Status 3=Ok 2= 1= <RecordingType>1</RecordingType> <- Type 1=Normal 2=???Serie <PermanentFlag>0</PermanentFlag> <- Löschen gesperrt=1 erlaubt=0 </Crid> <Crid id="112836336010022"> <Title>Spy Kids 2 - Die R.ckkehr der Superspione</Title> <ServiceId>10022</ServiceId> <StartTime>1128363360</StartTime> <EndTime>1128370200</EndTime> <RecordingDuration>8938</RecordingDuration> <RecordingStatus>3</RecordingStatus> <RecordingType>1</RecordingType> <PermanentFlag>1</PermanentFlag> </Crid> <Crid id="112940022010022"> <Title>Mr. Nice Guy</Title> <ServiceId>10022</ServiceId> <StartTime>1129400220</StartTime> <EndTime>1129406400</EndTime> <RecordingDuration>7430</RecordingDuration> <RecordingStatus>3</RecordingStatus> <RecordingType>1</RecordingType> <PermanentFlag>0</PermanentFlag> </Crid> <Crid id="113043690010025"> <Title>MythBusters - Die Wissensj.ger</Title> <ServiceId>10025</ServiceId> <StartTime>1130436900</StartTime> <EndTime>1130440500</EndTime> <RecordingDuration>5400</RecordingDuration> <RecordingStatus>3</RecordingStatus> <RecordingType>1</RecordingType> <PermanentFlag>0</PermanentFlag> </Crid> <Crid id="113054280010035"> <Title>SPIEGEL TV</Title> <ServiceId>10035</ServiceId> <StartTime>1130542800</StartTime> <EndTime>1130557800</EndTime> <RecordingDuration>16139</RecordingDuration> <RecordingStatus>3</RecordingStatus> <RecordingType>1</RecordingType> <PermanentFlag>0</PermanentFlag> </Crid> </CridList> <//>
Tip Of Day
Sinn noch unbekannt - möglicherweise für M750S Komfort-EPG "TV Digital - Tip des Tages"
<Message><Command type="request" subject="tip_of_day"><Parameter key="date" value="2005-10-29"/></Command></Message><//>
Antwort:
<?xml version="1.0" encoding="ISO-8859-1"?> <TipOfDay> </TipOfDay> <//>
Fernbedienung
Sendet eine Fernbedienungstaste an die Box
<Message><Command type="remote" subject="1"/></Message><//> -> hier wird die Taste 1 gesendet
Antwort der Box: wie immer
Folgende "subject"s sind möglich
CURSOR_RIGHT CURSOR_UP CURSOR_DOWN CURSOR_RIGHT OK 0 1 2 3 4 5 6 7 8 9 CHANNEL_UP -> entspricht der PIP Taste der FB HELP EXIT DELETE -> entspricht der Mute Taste der FB MENU CHANNEL_DOWN -> entspricht der EPG Taste INFO REWIND FASTFORWARD STOP PLAY RED GREEN YELLOW BLUE
Offene Ports der Box
Orginal Firmware:
| Port | Benutzt von |
| 21 | FTP |
| 10001 | Unbekannt |
| 49152 | UPNP |
Lemmi Firmware Version 2.0.36:
| Port | Benutzt von |
| 21 | FTP |
| 23 | Telnet |
| 80 | HTTP |
| 8765 | LIRCD (Fernbedienung) |
| 10000 | Ausgabe der LEMMI-Konfiguration |
| 10001 | Die Ausgabe des Programmes 'wavebox' (pipe) (optional) |
| 10002 | Die Ausgabe der Datei /etc/kmsg (optional) |
| 10003 | Die Ausgabe der Datei /data/RECORDER_LOG (optional) |
| 10004 | Die Ausgabe von 'watchdir -m /data/.timer' (optional) |
| 10005 | Die Debug.Ausgabe von 'key-control' (optional) |
| 10101 | Die Ausgabe des Tools 'osd2tcp' (optional) |
| 49152 | UPNP |

