1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 from relay import *
40 import time
41
42
44 """A file streaming iterator"""
45
46 - def __init__(self, stream_type='icecast'):
47 if stream_type == 'icecast':
48 self.main_buffer_size = 0x100000
49 self.relay_queue_size = 0x100000
50 self.sub_buffer_size = 0x10000
51 elif stream_type == 'stream-m':
52 self.main_buffer_size = 0x100000
53 self.relay_queue_size = 0x100000
54 self.sub_buffer_size = 0x10000
55
58
66
69
71 """Read media and stream data through a generator."""
72 m = open(self.media, 'r')
73 while True:
74 __main_chunk = m.read(self.sub_buffer_size)
75 if not __main_chunk:
76 break
77 yield __main_chunk
78 m.close()
79
81 """Read a bigger part of the media and stream the little parts
82 of the data through a generator"""
83 m = open(self.media, 'r')
84 while True:
85 self.main_chunk = m.read(self.main_buffer_size)
86 if not self.main_chunk:
87 break
88 i = 0
89 while True:
90 start = i * self.sub_buffer_size
91 end = self.sub_buffer_size + (i * self.sub_buffer_size)
92 self.sub_chunk = self.main_chunk[start:end]
93 if not self.sub_chunk:
94 break
95 yield self.sub_chunk
96 i += 1
97 self.main_chunk = 0
98 self.sub_chunk = 0
99 m.close()
100
102 """Read a distant media through its URL"""
103 while True:
104 self.sub_chunk = self.queue.get(self.sub_buffer_size)
105 if not self.sub_chunk:
106 break
107 yield self.sub_chunk
108 self.queue.task_done()
109 self.sub_chunk = 0
110
111
113
115 self.fp = open(fp, 'r')
116
118 return self.fp.read(size)
119
120
122
124 self.__relayparam = relay
125 self.relay = urllib.urlopen(self.__relayparam)
126 self.rec_mode = 0
127
131
133 chunk = None
134
135 try:
136 chunk = self.relay.read(size)
137 except:
138 while True:
139 try:
140 self.relay = urllib.urlopen(self.__relayparam)
141 chunk = self.relay.read(size)
142 break
143 except:
144 time.sleep(0.5)
145 continue
146
147 if self.rec_mode == 1 and chunk:
148 self.recorder.write(chunk)
149 return chunk
150