blob: 7e73e93a3aab7c95aa8cb94fd01a30d7856d756a [file] [log] [blame]
Holger Hans Peter Freyther3fab3fd2012-05-18 18:54:11 +02001"
2Simple UDP replay from the state files
3"
4
5PackageLoader fileInPackage: #Sockets.
6
Holger Hans Peter Freyther4552d802012-08-05 09:25:25 +02007Object subclass: RTPReplay [
8 | filename |
9 RTPReplay class >> on: aFile [
10 ^ self new
11 file: aFile; yourself
12 ]
Holger Hans Peter Freyther3fab3fd2012-05-18 18:54:11 +020013
Holger Hans Peter Freyther4552d802012-08-05 09:25:25 +020014 file: aFile [
15 filename := aFile
16 ]
Holger Hans Peter Freyther3fab3fd2012-05-18 18:54:11 +020017
Holger Hans Peter Freyther4552d802012-08-05 09:25:25 +020018 streamAudio: aHost port: aPort [
19 | file last_time last_image udp_send socket dest |
Holger Hans Peter Freyther3fab3fd2012-05-18 18:54:11 +020020
Holger Hans Peter Freyther4552d802012-08-05 09:25:25 +020021 last_time := nil.
22 last_image := nil.
23 file := FileStream open: filename.
Holger Hans Peter Freyther3fab3fd2012-05-18 18:54:11 +020024
Holger Hans Peter Freyther4552d802012-08-05 09:25:25 +020025 "Send the payload"
26 dest := Sockets.SocketAddress byName: aHost.
27 socket := Sockets.DatagramSocket new.
28 udp_send := [:payload | | datagram |
29 datagram := Sockets.Datagram data: payload contents address: dest port: aPort.
30 socket nextPut: datagram
Holger Hans Peter Freyther3fab3fd2012-05-18 18:54:11 +020031 ].
32
Holger Hans Peter Freyther4552d802012-08-05 09:25:25 +020033 [file atEnd] whileFalse: [
34 | lineStream time data now_image |
35 lineStream := file nextLine readStream.
Holger Hans Peter Freyther3fab3fd2012-05-18 18:54:11 +020036
Holger Hans Peter Freyther4552d802012-08-05 09:25:25 +020037 "Read the time, skip the blank, parse the data"
38 time := Number readFrom: lineStream.
39 lineStream skip: 1.
Holger Hans Peter Freyther3fab3fd2012-05-18 18:54:11 +020040
Holger Hans Peter Freyther4552d802012-08-05 09:25:25 +020041 data := WriteStream on: (ByteArray new: 30).
42 [lineStream atEnd] whileFalse: [
43 | hex |
44 hex := lineStream next: 2.
45 data nextPut: (Number readFrom: hex readStream radix: 16).
46 ].
47
48 last_time isNil
49 ifTrue: [
50 "First time, send it right now"
51 last_time := time.
52 last_image := Time millisecondClockValue.
53 udp_send value: data.
54 ]
55 ifFalse: [
56 | wait_image new_image_time |
57
58 "How long to wait?"
59 wait_image := last_image + ((time - last_time) * 1000).
60 [ wait_image > Time millisecondClockValue ] whileTrue: [].
61
62 udp_send value: data.
63 last_time := time.
64 last_image := wait_image.
65 ]
66 ]
67 ]
68]
69
70Eval [
71 | replay |
72
73 replay := RTPReplay on: 'rtp_ssrc6976010.240.240.1_to_10.240.240.50.state'.
74
75 Transcript nextPutAll: 'Going to stream now'; nl.
76 replay streamAudio: '127.0.0.1' port: 4000.
Holger Hans Peter Freyther3fab3fd2012-05-18 18:54:11 +020077]