INET Framework for OMNeT++/OMNEST
inet::VoipStreamReceiver::Connection Class Reference

#include <VoipStreamReceiver.h>

Public Member Functions

 Connection ()
 
void addAudioStream (enum AVCodecID codec_id)
 
void openAudio (const char *fileName)
 
void writeAudioFrame (uint8_t *buf, int len)
 
void writeLostSamples (int sampleCount)
 
void closeAudio ()
 

Public Attributes

bool offline = true
 
uint16_t seqNo = 0
 
uint32_t timeStamp = 0
 
uint32_t ssrc = 0
 
enum AVCodecID codec = AV_CODEC_ID_NONE
 
short sampleBits = 0
 
int sampleRate = 0
 
int samplesPerPacket = 0
 
int transmitBitrate = 0
 
simtime_t lastPacketFinish
 
AVFormatContext * oc = nullptr
 
AVOutputFormat * fmt = nullptr
 
AVStream * audio_st = nullptr
 
AVCodecContext * decCtx = nullptr
 
AVCodec * pCodecDec = nullptr
 
AudioOutFile outFile
 
L3Address srcAddr
 
int srcPort = -1
 
L3Address destAddr
 
int destPort = -1
 

Constructor & Destructor Documentation

◆ Connection()

inet::VoipStreamReceiver::Connection::Connection ( )
inline
61 {}

Member Function Documentation

◆ addAudioStream()

void inet::VoipStreamReceiver::Connection::addAudioStream ( enum AVCodecID  codec_id)

◆ closeAudio()

void inet::VoipStreamReceiver::Connection::closeAudio ( )
148 {
149  outFile.close();
150 }

◆ openAudio()

void inet::VoipStreamReceiver::Connection::openAudio ( const char *  fileName)
111 {
112  outFile.open(fileName, sampleRate, 8 * av_get_bytes_per_sample(decCtx->sample_fmt));
113 }

Referenced by inet::VoipStreamReceiver::createConnection().

◆ writeAudioFrame()

void inet::VoipStreamReceiver::Connection::writeAudioFrame ( uint8_t *  buf,
int  len 
)
126 {
127  AVPacket avpkt;
128  av_init_packet(&avpkt);
129  avpkt.data = inbuf;
130  avpkt.size = inbytes;
131 
132  int gotFrame;
133  AVFrame decodedFrame = {
134  { nullptr }
135  };
136  int consumedBytes = avcodec_decode_audio4(decCtx, &decodedFrame, &gotFrame, &avpkt);
137  if (consumedBytes < 0 || !gotFrame)
138  throw cRuntimeError("Error in avcodec_decode_audio4(): returns: %d, gotFrame: %d", consumedBytes, gotFrame);
139  if (consumedBytes != inbytes)
140  throw cRuntimeError("Model error: remained bytes after avcodec_decode_audio4(): %d = ( %d - %d )", inbytes - consumedBytes, inbytes, consumedBytes);
141  simtime_t decodedTime(1.0 * decodedFrame.nb_samples / sampleRate);
142  lastPacketFinish += decodedTime;
143  if (outFile.isOpen())
144  outFile.write(decodedFrame.data[0], decodedFrame.linesize[0]);
145 }

Referenced by inet::VoipStreamReceiver::decodePacket().

◆ writeLostSamples()

void inet::VoipStreamReceiver::Connection::writeLostSamples ( int  sampleCount)
116 {
117  int pktBytes = sampleCount * av_get_bytes_per_sample(decCtx->sample_fmt);
118  if (outFile.isOpen()) {
119  uint8_t decBuf[pktBytes];
120  memset(decBuf, 0, pktBytes);
121  outFile.write(decBuf, pktBytes);
122  }
123 }

Referenced by inet::VoipStreamReceiver::decodePacket().

Member Data Documentation

◆ audio_st

AVStream* inet::VoipStreamReceiver::Connection::audio_st = nullptr

◆ codec

enum AVCodecID inet::VoipStreamReceiver::Connection::codec = AV_CODEC_ID_NONE

◆ decCtx

AVCodecContext* inet::VoipStreamReceiver::Connection::decCtx = nullptr

◆ destAddr

L3Address inet::VoipStreamReceiver::Connection::destAddr

◆ destPort

int inet::VoipStreamReceiver::Connection::destPort = -1

◆ fmt

AVOutputFormat* inet::VoipStreamReceiver::Connection::fmt = nullptr

◆ lastPacketFinish

simtime_t inet::VoipStreamReceiver::Connection::lastPacketFinish

◆ oc

AVFormatContext* inet::VoipStreamReceiver::Connection::oc = nullptr

◆ offline

◆ outFile

AudioOutFile inet::VoipStreamReceiver::Connection::outFile

◆ pCodecDec

AVCodec* inet::VoipStreamReceiver::Connection::pCodecDec = nullptr

◆ sampleBits

short inet::VoipStreamReceiver::Connection::sampleBits = 0

◆ sampleRate

◆ samplesPerPacket

int inet::VoipStreamReceiver::Connection::samplesPerPacket = 0

◆ seqNo

◆ srcAddr

L3Address inet::VoipStreamReceiver::Connection::srcAddr

◆ srcPort

int inet::VoipStreamReceiver::Connection::srcPort = -1

◆ ssrc

uint32_t inet::VoipStreamReceiver::Connection::ssrc = 0

◆ timeStamp

uint32_t inet::VoipStreamReceiver::Connection::timeStamp = 0

◆ transmitBitrate

int inet::VoipStreamReceiver::Connection::transmitBitrate = 0

The documentation for this class was generated from the following files:
inet::AudioOutFile::open
void open(const char *resultFile, int sampleRate, short int sampleBits)
Definition: AudioOutFile.cc:43
inet::AudioOutFile::isOpen
bool isOpen() const
Definition: AudioOutFile.h:35
inet::VoipStreamReceiver::Connection::sampleRate
int sampleRate
Definition: VoipStreamReceiver.h:75
inet::VoipStreamReceiver::Connection::decCtx
AVCodecContext * decCtx
Definition: VoipStreamReceiver.h:82
inet::VoipStreamReceiver::Connection::lastPacketFinish
simtime_t lastPacketFinish
Definition: VoipStreamReceiver.h:78
inet::AudioOutFile::write
void write(void *inbuf, int inbytes)
Definition: AudioOutFile.cc:101
inet::AudioOutFile::close
bool close()
Definition: AudioOutFile.cc:139
inet::VoipStreamReceiver::Connection::outFile
AudioOutFile outFile
Definition: VoipStreamReceiver.h:84