]> git.sesse.net Git - vlc/blob - python/vlrs/sap.py
* Fixed URLs here and there.
[vlc] / python / vlrs / sap.py
1 #!/usr/bin/python -O
2 #
3 # VideoLAN RTSP Server
4 #
5 # Author: Cyril Deguet <asmax@via.ecp.fr>
6
7
8 import cfg,socket,struct,time,threading
9
10
11 def ntpTime():
12     "return the current time in NTP decimal format"
13     return "%d" % (int(time.time()) + 2208988800L)
14
15
16
17 class SdpMessage:
18     "Build a SDP message"
19  
20     uri = "http://www.videolan.org/"
21
22     def __init__(self, sessionName, address, uri):
23         "Build the message"
24         self.sessionName = sessionName
25         self.address = address
26         self.uri = uri
27         
28     def getMessage(self):
29         "Return the SDP message"
30         msg = "v=0\r\n" + \
31               "o=asmax " + ntpTime() + " " + ntpTime() + \
32                   " IN IP4 sphinx.via.ecp.fr\r\n" + \
33               "s=" + self.sessionName + "\r\n" + \
34               "u=" + self.uri + "\r\n" + \
35               "t=0 0\r\n" + \
36               "c=IN IP4 " + self.address + "/1\r\n" + \
37               "m=video 1234 RTP/MP2T 33\r\n" + \
38               "a=control:" + self.uri + "\r\n"
39         return msg
40
41
42
43 class SapServer(threading.Thread):
44     "SAP server class"
45
46     PORT = 9875
47     GROUP = "224.2.127.254"
48     TTL = 1
49
50     def __init__(self):
51         # Open the socket
52         self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
53         self.sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, self.TTL)
54         self.sock.connect((self.GROUP, self.PORT))
55
56     def sendMessage(self, message):
57         "Message must be a SdpMessage"
58         # FIXME
59         header = " " + struct.pack("!BH", 12, 4212) + socket.inet_aton('138.195.156.214') 
60         data = header + message.getMessage()
61         self.sock.send(data)
62
63     def announce(self):
64         for id, session in cfg.announceList.multicastList.items():
65             message = SdpMessage(session.name, session.dest, session.uri)
66             self.sendMessage(message)
67
68     def run(self):
69         while 1:
70             self.announce()
71             time.sleep(1)