| """ |
| Create a SIP connection and then stream... |
| """ |
| |
| PackageLoader |
| fileInPackage: #OsmoSIP. |
| |
| "Load for the replay code" |
| FileStream fileIn: 'rtp_replay_shared.st'. |
| |
| |
| Osmo.SIPCall subclass: StreamCall [ |
| | sem stream | |
| |
| createCall: aSDP [ |
| | sdp | |
| stream := RTPReplay on: 'rtp_ssrc6976010.240.240.1_to_10.240.240.50.state'. |
| sdp := aSDP % {stream localPort}. |
| ^ super createCall: sdp. |
| ] |
| |
| sem: aSemaphore [ |
| sem := aSemaphore |
| ] |
| |
| sessionNew [ |
| | host port | |
| Transcript nextPutAll: 'The call has started'; nl. |
| Transcript nextPutAll: sdp_result; nl. |
| |
| host := SDPUtils findHost: sdp_result. |
| port := SDPUtils findPort: sdp_result. |
| |
| [ |
| stream streamAudio: host port: port. |
| Transcript nextPutAll: 'Streaming has finished.'; nl. |
| ] fork. |
| ] |
| |
| sessionFailed [ |
| sem signal |
| ] |
| |
| sessionEnd [ |
| sem signal |
| ] |
| ] |
| |
| Eval [ |
| | transport agent call sem sdp_fr sdp_amr | |
| |
| |
| sdp_fr := (WriteStream on: String new) |
| nextPutAll: 'v=0'; cr; nl; |
| nextPutAll: 'o=twinkle 1739517580 1043400482 IN IP4 127.0.0.1'; cr; nl; |
| nextPutAll: 's=-'; cr; nl; |
| nextPutAll: 'c=IN IP4 127.0.0.1'; cr; nl; |
| nextPutAll: 't=0 0'; cr; nl; |
| nextPutAll: 'm=audio %1 RTP/AVP 0 101'; cr; nl; |
| nextPutAll: 'a=rtpmap:0 PCMU/8000'; cr; nl; |
| nextPutAll: 'a=rtpmap:101 telephone-event/8000'; cr; nl; |
| nextPutAll: 'a=fmtp:101 0-15'; cr; nl; |
| nextPutAll: 'a=ptime:20'; cr; nl; |
| contents. |
| |
| sem := Semaphore new. |
| transport := Osmo.SIPUdpTransport |
| startOn: '0.0.0.0' port: 5066. |
| agent := Osmo.SIPUserAgent createOn: transport. |
| transport start. |
| |
| call := (StreamCall |
| fromUser: 'sip:1000@sip.zecke.osmocom.org' |
| host: '127.0.0.1' |
| port: 5060 |
| to: 'sip:123456@127.0.0.1' |
| on: agent) |
| sem: sem; yourself. |
| |
| call createCall: sdp_fr. |
| |
| |
| "Wait for the stream to have ended" |
| sem wait. |
| |
| (Delay forSeconds: 4) wait. |
| ] |