tiny-dlna 0.3.0__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tiny-dlna-0.3.0 → tiny-dlna-0.4.0}/PKG-INFO +1 -1
- {tiny-dlna-0.3.0 → tiny-dlna-0.4.0}/setup.py +1 -1
- {tiny-dlna-0.3.0 → tiny-dlna-0.4.0}/ssdp.py +18 -15
- {tiny-dlna-0.3.0 → tiny-dlna-0.4.0}/tiny_dlna.egg-info/PKG-INFO +1 -1
- {tiny-dlna-0.3.0 → tiny-dlna-0.4.0}/tiny_render.py +31 -43
- {tiny-dlna-0.3.0 → tiny-dlna-0.4.0}/README.md +0 -0
- {tiny-dlna-0.3.0 → tiny-dlna-0.4.0}/setup.cfg +0 -0
- {tiny-dlna-0.3.0 → tiny-dlna-0.4.0}/tiny_dlna.egg-info/SOURCES.txt +0 -0
- {tiny-dlna-0.3.0 → tiny-dlna-0.4.0}/tiny_dlna.egg-info/dependency_links.txt +0 -0
- {tiny-dlna-0.3.0 → tiny-dlna-0.4.0}/tiny_dlna.egg-info/entry_points.txt +0 -0
- {tiny-dlna-0.3.0 → tiny-dlna-0.4.0}/tiny_dlna.egg-info/requires.txt +0 -0
- {tiny-dlna-0.3.0 → tiny-dlna-0.4.0}/tiny_dlna.egg-info/top_level.txt +0 -0
|
@@ -1,24 +1,27 @@
|
|
|
1
|
+
import datetime
|
|
1
2
|
import logging
|
|
2
3
|
import socket
|
|
3
4
|
|
|
4
5
|
SSDP_MULTICAST = '239.255.255.250'
|
|
5
6
|
SSDP_PORT = 1900
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
RENDER_PORT = 55000
|
|
8
|
+
LOCATION = f'http://192.168.1.228:{RENDER_PORT}/description.xml'
|
|
9
|
+
UUID = 'd095ee0c-7bed-43d0-bf98-f815496e8383'
|
|
10
|
+
logger = logging.getLogger('ssdp')
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
'EXT:\r\n'
|
|
13
|
-
f'LOCATION: {LOCATION}\r\n'
|
|
14
|
-
'HOSTNAME: 192.168.1.228\r\n'
|
|
15
|
-
'SERVER: Custom/1.0 UPnP/1.0 DLNADOC/1.50\r\n'
|
|
16
|
-
f'ST: urn:schemas-upnp-org:service:AVTransport:1\r\n'
|
|
17
|
-
f'USN: {USN}\r\n'
|
|
18
|
-
'\r\n'
|
|
19
|
-
)
|
|
12
|
+
def build_m_search_response():
|
|
13
|
+
now = datetime.datetime.utcnow()
|
|
14
|
+
date_str = now.strftime("%a, %d %b %Y %H:%M:%S GMT")
|
|
20
15
|
|
|
21
|
-
|
|
16
|
+
text = 'HTTP/1.1 200 OK\r\n'
|
|
17
|
+
text += f'USN: uuid:{UUID}::urn:schemas-upnp-org:service:AVTransport:1\r\n'
|
|
18
|
+
text += f'Location: {LOCATION}\r\n'
|
|
19
|
+
text += 'ST: urn:schemas-upnp-org:service:AVTransport:1\r\n'
|
|
20
|
+
text += 'EXT: \r\n'
|
|
21
|
+
text += 'Server: Werkzeug/3.0.3 Python/3.11.0\r\n'
|
|
22
|
+
text += 'Cache-Control: max-age=70\r\n'
|
|
23
|
+
text += f'Date: {date_str}\r\n\r\n'
|
|
24
|
+
return text.encode('utf-8')
|
|
22
25
|
|
|
23
26
|
def ssdp_listener():
|
|
24
27
|
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
|
@@ -33,7 +36,7 @@ def ssdp_listener():
|
|
|
33
36
|
data, addr = sock.recvfrom(1024)
|
|
34
37
|
if b'M-SEARCH' in data and b'ssdp:discover' in data:
|
|
35
38
|
logger.info(f'Received M-SEARCH from {addr}, sending response...')
|
|
36
|
-
sock.sendto(
|
|
39
|
+
sock.sendto(build_m_search_response(), addr)
|
|
37
40
|
|
|
38
41
|
if __name__ == '__main__':
|
|
39
42
|
ssdp_listener()
|
|
@@ -7,11 +7,38 @@ import time
|
|
|
7
7
|
import xml.etree.ElementTree as ET
|
|
8
8
|
|
|
9
9
|
from flask import Flask, request, Response
|
|
10
|
-
from ssdp import ssdp_listener
|
|
10
|
+
from ssdp import ssdp_listener, RENDER_PORT, UUID
|
|
11
11
|
|
|
12
12
|
app = Flask(__name__)
|
|
13
13
|
logger = logging.getLogger('tiny_render')
|
|
14
14
|
|
|
15
|
+
|
|
16
|
+
XML_DESC_PTN = """<?xml version="1.0" encoding="UTF-8"?>
|
|
17
|
+
<root xmlns:dlna="urn:schemas-dlna-org:device-1-0" xmlns="urn:schemas-upnp-org:device-1-0">
|
|
18
|
+
<specVersion>
|
|
19
|
+
<major>1</major>
|
|
20
|
+
<minor>0</minor>
|
|
21
|
+
</specVersion>
|
|
22
|
+
<device>
|
|
23
|
+
<deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType>
|
|
24
|
+
<friendlyName>{}</friendlyName>
|
|
25
|
+
<manufacturer>mitnk</manufacturer>
|
|
26
|
+
<modelName>Tiny-Render</modelName>
|
|
27
|
+
<modelDescription>AVTransport Media Renderer</modelDescription>
|
|
28
|
+
<UDN>uuid:{}</UDN>
|
|
29
|
+
<dlna:X_DLNADOC xmlns:dlna="urn:schemas-dlna-org:device-1-0">DMR-1.50</dlna:X_DLNADOC>
|
|
30
|
+
<serviceList>
|
|
31
|
+
<service>
|
|
32
|
+
<serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType>
|
|
33
|
+
<serviceId>urn:upnp-org:serviceId:AVTransport</serviceId>
|
|
34
|
+
<SCPDURL>AVTransport/scpd.xml</SCPDURL>
|
|
35
|
+
<controlURL>AVTransport/control</controlURL>
|
|
36
|
+
<eventSubURL>AVTransport/event</eventSubURL>
|
|
37
|
+
</service>
|
|
38
|
+
</serviceList>
|
|
39
|
+
</device>
|
|
40
|
+
</root>"""
|
|
41
|
+
|
|
15
42
|
XML_AVSET_DONE = """
|
|
16
43
|
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
|
17
44
|
<s:Body>
|
|
@@ -95,47 +122,8 @@ _DATA = {
|
|
|
95
122
|
|
|
96
123
|
@app.route('/description.xml')
|
|
97
124
|
def description():
|
|
98
|
-
desc_ptn = """<?xml version="1.0"?>
|
|
99
|
-
<root xmlns="urn:schemas-upnp-org:device-1-0" xmlns:dlna="urn:schemas-dlna-org:device-1-0">
|
|
100
|
-
<specVersion>
|
|
101
|
-
<major>1</major>
|
|
102
|
-
<minor>0</minor>
|
|
103
|
-
</specVersion>
|
|
104
|
-
<device>
|
|
105
|
-
<deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType>
|
|
106
|
-
<friendlyName>{}</friendlyName>
|
|
107
|
-
<manufacturer>mitnk</manufacturer>
|
|
108
|
-
<modelName>T001</modelName>
|
|
109
|
-
<UDN>uuid:dlna-tiny-render-t001</UDN>
|
|
110
|
-
<dlna:X_DLNADOC xmlns:dlna="urn:schemas-dlna-org:device-1-0">DMR-1.50</dlna:X_DLNADOC>
|
|
111
|
-
<serviceList>
|
|
112
|
-
<service>
|
|
113
|
-
<serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType>
|
|
114
|
-
<serviceId>urn:upnp-org:serviceId:AVTransport</serviceId>
|
|
115
|
-
<SCPDURL>AVTransport/82d8-eb72-b097/scpd.xml</SCPDURL>
|
|
116
|
-
<controlURL>AVTransport/82d8-eb72-b097/control</controlURL>
|
|
117
|
-
<eventSubURL>AVTransport/82d8-eb72-b097/event</eventSubURL>
|
|
118
|
-
</service>
|
|
119
|
-
<service>
|
|
120
|
-
<serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
|
|
121
|
-
<serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
|
|
122
|
-
<SCPDURL>ConnectionManager/82d8-eb72-b097/scpd.xml</SCPDURL>
|
|
123
|
-
<controlURL>ConnectionManager/82d8-eb72-b097/control</controlURL>
|
|
124
|
-
<eventSubURL>ConnectionManager/82d8-eb72-b097/event</eventSubURL>
|
|
125
|
-
</service>
|
|
126
|
-
<service>
|
|
127
|
-
<serviceType>urn:schemas-upnp-org:service:RenderingControl:1</serviceType>
|
|
128
|
-
<serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId>
|
|
129
|
-
<SCPDURL>RenderingControl/82d8-eb72-b097/scpd.xml</SCPDURL>
|
|
130
|
-
<controlURL>RenderingControl/82d8-eb72-b097/control</controlURL>
|
|
131
|
-
<eventSubURL>RenderingControl/82d8-eb72-b097/event</eventSubURL>
|
|
132
|
-
</service>
|
|
133
|
-
</serviceList>
|
|
134
|
-
</device>
|
|
135
|
-
</root>"""
|
|
136
|
-
|
|
137
125
|
friendly_name = app.config['FRIENDLY_NAME']
|
|
138
|
-
xml =
|
|
126
|
+
xml = XML_DESC_PTN.format(friendly_name, UUID)
|
|
139
127
|
return Response(xml, mimetype="text/xml")
|
|
140
128
|
|
|
141
129
|
def to_track_time(seconds):
|
|
@@ -202,7 +190,7 @@ def get_metadata(request):
|
|
|
202
190
|
}
|
|
203
191
|
|
|
204
192
|
|
|
205
|
-
@app.route('/AVTransport/
|
|
193
|
+
@app.route('/AVTransport/control', methods=['POST'])
|
|
206
194
|
def control():
|
|
207
195
|
if is_setav(request):
|
|
208
196
|
metadata = get_metadata(request)
|
|
@@ -288,7 +276,7 @@ def main():
|
|
|
288
276
|
friendly_name = args.name
|
|
289
277
|
app.config['FRIENDLY_NAME'] = friendly_name
|
|
290
278
|
logging.info(f'Starting DLNA Receiver: {friendly_name}')
|
|
291
|
-
app.run(host="0.0.0.0", port=
|
|
279
|
+
app.run(host="0.0.0.0", port=RENDER_PORT, debug=False)
|
|
292
280
|
|
|
293
281
|
|
|
294
282
|
if __name__ == "__main__":
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|