- initial import
This commit is contained in:
114
src/engine/media/MT_Stream.h
Normal file
114
src/engine/media/MT_Stream.h
Normal file
@@ -0,0 +1,114 @@
|
||||
/* Copyright(C) 2007-2017 VoIPobjects (voipobjects.com)
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef __MT_STREAM_H
|
||||
#define __MT_STREAM_H
|
||||
|
||||
#include "ice/ICEAddress.h"
|
||||
#include "MT_Codec.h"
|
||||
#include "MT_SrtpHelper.h"
|
||||
#include "MT_Statistics.h"
|
||||
#include "../helper/HL_InternetAddress.h"
|
||||
#include "../helper/HL_NetworkSocket.h"
|
||||
#include "../helper/HL_Sync.h"
|
||||
#include "../helper/HL_Rtp.h"
|
||||
#include "../audio/Audio_WavFile.h"
|
||||
#include "../audio/Audio_DataWindow.h"
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <chrono>
|
||||
#include "../helper/HL_Optional.hpp"
|
||||
|
||||
#if defined(USE_PVQA_LIBRARY)
|
||||
# include "MT_SevanaMos.h"
|
||||
#endif
|
||||
|
||||
using std::experimental::optional;
|
||||
|
||||
namespace MT
|
||||
{
|
||||
class Stream
|
||||
{
|
||||
public:
|
||||
enum Type
|
||||
{
|
||||
Audio = 1,
|
||||
Video = 2
|
||||
};
|
||||
|
||||
enum class MediaDirection
|
||||
{
|
||||
Incoming,
|
||||
Outgoing
|
||||
};
|
||||
|
||||
class MediaObserver
|
||||
{
|
||||
public:
|
||||
virtual void onMedia(const void* buffer, int length, MT::Stream::MediaDirection direction,
|
||||
void* context, void* userTag) = 0;
|
||||
};
|
||||
|
||||
Stream();
|
||||
virtual ~Stream();
|
||||
|
||||
virtual void setDestination(const RtpPair<InternetAddress>& dest);
|
||||
|
||||
virtual void setTransmittingCodec(Codec::Factory& factory, int payloadType) = 0;
|
||||
virtual void dataArrived(PDatagramSocket s, const void* buffer, int length, InternetAddress& source) = 0;
|
||||
|
||||
|
||||
virtual void readFile(const Audio::PWavFileReader& reader, MediaDirection direction) = 0;
|
||||
virtual void writeFile(const Audio::PWavFileWriter& writer, MediaDirection direction) = 0;
|
||||
virtual void setupMirror(bool enable) = 0;
|
||||
|
||||
virtual void setState(unsigned state);
|
||||
virtual unsigned state();
|
||||
|
||||
virtual void setSocket(const RtpPair<PDatagramSocket>& socket);
|
||||
virtual RtpPair<PDatagramSocket>& socket();
|
||||
|
||||
Statistics& statistics();
|
||||
SrtpSession& srtp();
|
||||
void configureMediaObserver(MediaObserver* observer, void* userTag);
|
||||
|
||||
protected:
|
||||
unsigned mState;
|
||||
RtpPair<InternetAddress> mDestination;
|
||||
RtpPair<PDatagramSocket> mSocket;
|
||||
Statistics mStat;
|
||||
SrtpSession mSrtpSession;
|
||||
MediaObserver* mMediaObserver = nullptr;
|
||||
void* mMediaObserverTag = nullptr;
|
||||
};
|
||||
|
||||
typedef std::shared_ptr<Stream> PStream;
|
||||
|
||||
class StreamList
|
||||
{
|
||||
public:
|
||||
StreamList();
|
||||
~StreamList();
|
||||
|
||||
void add(PStream s);
|
||||
void remove(PStream s);
|
||||
void clear();
|
||||
bool has(PStream s);
|
||||
|
||||
int size();
|
||||
PStream streamAt(int index);
|
||||
|
||||
void copyTo(StreamList* sl);
|
||||
|
||||
Mutex& getMutex();
|
||||
protected:
|
||||
typedef std::vector<PStream> StreamVector;
|
||||
StreamVector mStreamVector;
|
||||
Mutex mMutex;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user