Package: inet.applications.voipstream
VoipStreamReceiver
simple moduleVoipStreamReceiver listens on an UDP port, and expects to receive VoIP packets on it. The received voice is then saved into a result audio file that can be compared with the original for further evaluation. VoIP packets are numbered, and out-of-order packets are discarded (the corresponding voice interval will be recorded as silence into the file). VoIP packets that miss their deadlines will similarly be discarded. It is assumed that the audio is played back with delay (by default 20ms), which allows some jitter for the incoming packets. The resulting audio file is closed when the simulation completes (i.e. in the OMNeT++ finish() function). Only one voice session ("call") may be underway at a time.
Inheritance diagram
The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.
Parameters
Name | Type | Default value | Description |
---|---|---|---|
localPort | int | ||
playoutDelay | double | 20ms | |
resultFile | string |
Properties
Name | Value | Description |
---|---|---|
display | i=block/arrival |
Gates
Name | Direction | Size | Description |
---|---|---|---|
socketIn | input | ||
socketOut | output |
Signals
Name | Type | Unit |
---|---|---|
packetReceived | inet::Packet | |
lostPackets | long | |
packetHasVoice | long | |
delay | simtime_t | |
connState | long | |
packetDropped | inet::Packet | |
lostSamples | long |
Statistics
Name | Title | Source | Record | Unit | Interpolation Mode |
---|---|---|---|---|---|
packetReceived | packets received | packetReceived | count, sum(packetBytes), vector(packetBytes) | none | |
lostPackets | lost packets | vector, stats | none | ||
packetHasVoice | voice or silence packet | mean, vector | none | ||
numSessions | total number of sessions | sum(connState+1)/2 | last | ||
delay | delay | vector, histogram | s | none | |
dropPk | packets dropped | packetDropped | count, sum(packetBytes), vector(packetBytes) | none | |
numActiveSessions | number of active sessions | warmup(sum(connState)) | max, timeavg, vector | sample-hold | |
lostSamples | lost samples | vector, stats | none |
Direct method calls (observed)
call to | function | info |
---|---|---|
MessageDispatcher | inet::MessageDispatcher::arrived | arrived |
Incoming messages (observed)
gate | msg | kind | ctrl | srcModule | tags |
---|---|---|---|---|---|
socketIn | Packet | 0 (UdpStatusInd::UDP_I_DATA) | Udp | DscpInd, EcnInd, HopLimitInd, InterfaceInd, L3AddressInd, L4PortInd, NetworkProtocolInd, SocketInd, TosInd, TransportProtocolInd, MacAddressInd? |
Outgoing messages (observed)
gate | msg | kind | ctrl | destModule | tags |
---|---|---|---|---|---|
socketOut | Request | 1 (UdpCommandCode::UDP_C_BIND) | UdpBindCommand | Udp | DispatchProtocolReq, SocketReq |
Packet operations (observed)
chunkType | packetAction |
---|---|
BytesChunk | peekDataAt |
VoipStreamPacket | peekAtFront, popAtFront |
Shared Tagging operations (observed)
tagType | tagAction |
---|---|
DispatchProtocolReq | addTagIfAbsent |
L3AddressInd | getTag |
L4PortInd | getTag |
SocketInd | findTag |
SocketReq | addTagIfAbsent |
Source code
// // VoipStreamReceiver listens on an UDP port, and expects to receive VoIP packets on // it. The received voice is then saved into a result audio file that can be // compared with the original for further evaluation. VoIP packets are // numbered, and out-of-order packets are discarded (the corresponding voice // interval will be recorded as silence into the file). VoIP packets that miss // their deadlines will similarly be discarded. It is assumed that the audio is // played back with delay (by default 20ms), which allows some jitter for the // incoming packets. The resulting audio file is closed when the simulation // completes (i.e. in the OMNeT++ finish() function). Only one voice session // ("call") may be underway at a time. // simple VoipStreamReceiver like IApp { parameters: int localPort; double playoutDelay @unit(s) = default(20ms); string resultFile; @signal[packetReceived](type=inet::Packet); // expected type=VoipStreamPacket @signal[packetDropped](type=inet::Packet); @signal[lostSamples](type=long); @signal[lostPackets](type=long); @signal[packetHasVoice](type=long); // 1=yes, 0=no @signal[connState](type=long); // 1=open, -1=close @signal[delay](type=simtime_t); // total time lag of voice transmission @statistic[packetReceived](title="packets received"; source=packetReceived; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none); @statistic[dropPk](title="packets dropped"; source=packetDropped; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none); @statistic[lostSamples](title="lost samples"; interpolationmode=none; record=vector,stats); @statistic[lostPackets](title="lost packets"; interpolationmode=none; record=vector,stats); @statistic[packetHasVoice](title="voice or silence packet"; record=mean,vector; interpolationmode=none); @statistic[delay](title="delay"; unit=s; record=vector,histogram; interpolationmode=none); @statistic[numActiveSessions](title="number of active sessions"; source=warmup(sum(connState)); record=max,timeavg,vector; interpolationmode=sample-hold; autoWarmupFilter=false); @statistic[numSessions](title="total number of sessions"; source="sum(connState+1)/2"; record=last); @display("i=block/arrival"); gates: input socketIn @labels(UdpControlInfo/up); output socketOut @labels(UdpControlInfo/down); }File: src/inet/applications/voipstream/VoipStreamReceiver.ned