677 lines
26 KiB
C++
677 lines
26 KiB
C++
/*
|
|
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef WEBRTC_VOICE_ENGINE_CHANNEL_H
|
|
#define WEBRTC_VOICE_ENGINE_CHANNEL_H
|
|
|
|
#include "voe_network.h"
|
|
|
|
#include "audio_coding_module.h"
|
|
#include "common_types.h"
|
|
#include "shared_data.h"
|
|
#include "rtp_rtcp.h"
|
|
#include "voe_audio_processing.h"
|
|
#include "voice_engine_defines.h"
|
|
|
|
#ifndef WEBRTC_EXTERNAL_TRANSPORT
|
|
#include "udp_transport.h"
|
|
#endif
|
|
#include "audio_conference_mixer_defines.h"
|
|
#include "file_player.h"
|
|
#include "file_recorder.h"
|
|
#ifdef WEBRTC_SRTP
|
|
#include "SrtpModule.h"
|
|
#endif
|
|
#include "dtmf_inband.h"
|
|
#include "dtmf_inband_queue.h"
|
|
#include "level_indicator.h"
|
|
#include "resampler.h"
|
|
#ifdef WEBRTC_DTMF_DETECTION
|
|
#include "voe_dtmf.h" // TelephoneEventDetectionMethods, TelephoneEventObserver
|
|
#endif
|
|
|
|
namespace webrtc
|
|
{
|
|
class CriticalSectionWrapper;
|
|
class ProcessThread;
|
|
class AudioDeviceModule;
|
|
class RtpRtcp;
|
|
class FileWrapper;
|
|
class RtpDump;
|
|
class VoiceEngineObserver;
|
|
class VoEMediaProcess;
|
|
class VoERTPObserver;
|
|
class VoERTCPObserver;
|
|
|
|
struct CallStatistics;
|
|
|
|
namespace voe
|
|
{
|
|
class Statistics;
|
|
class TransmitMixer;
|
|
class OutputMixer;
|
|
|
|
|
|
class Channel:
|
|
public RtpData,
|
|
public RtpFeedback,
|
|
public RtcpFeedback,
|
|
#ifndef WEBRTC_EXTERNAL_TRANSPORT
|
|
public UdpTransportData, // receiving packet from sockets
|
|
#endif
|
|
public FileCallback, // receiving notification from file player & recorder
|
|
public Transport,
|
|
public RtpAudioFeedback,
|
|
public AudioPacketizationCallback, // receive encoded packets from the ACM
|
|
public ACMVADCallback, // receive voice activity from the ACM
|
|
#ifdef WEBRTC_DTMF_DETECTION
|
|
public AudioCodingFeedback, // inband Dtmf detection in the ACM
|
|
#endif
|
|
public MixerParticipant // supplies output mixer with audio frames
|
|
{
|
|
public:
|
|
enum {KNumSocketThreads = 1};
|
|
enum {KNumberOfSocketBuffers = 8};
|
|
static WebRtc_UWord8 numSocketThreads;
|
|
public:
|
|
virtual ~Channel();
|
|
static WebRtc_Word32 CreateChannel(Channel*& channel,
|
|
const WebRtc_Word32 channelId,
|
|
const WebRtc_UWord32 instanceId);
|
|
Channel(const WebRtc_Word32 channelId, const WebRtc_UWord32 instanceId);
|
|
WebRtc_Word32 Init();
|
|
WebRtc_Word32 SetEngineInformation(
|
|
Statistics& engineStatistics,
|
|
OutputMixer& outputMixer,
|
|
TransmitMixer& transmitMixer,
|
|
ProcessThread& moduleProcessThread,
|
|
AudioDeviceModule& audioDeviceModule,
|
|
VoiceEngineObserver* voiceEngineObserver,
|
|
CriticalSectionWrapper* callbackCritSect);
|
|
WebRtc_Word32 UpdateLocalTimeStamp();
|
|
|
|
public:
|
|
// API methods
|
|
|
|
// VoEBase
|
|
WebRtc_Word32 StartPlayout();
|
|
WebRtc_Word32 StopPlayout();
|
|
WebRtc_Word32 StartSend();
|
|
WebRtc_Word32 StopSend();
|
|
WebRtc_Word32 StartReceiving();
|
|
WebRtc_Word32 StopReceiving();
|
|
|
|
#ifndef WEBRTC_EXTERNAL_TRANSPORT
|
|
WebRtc_Word32 SetLocalReceiver(const WebRtc_UWord16 rtpPort,
|
|
const WebRtc_UWord16 rtcpPort,
|
|
const WebRtc_Word8 ipAddr[64],
|
|
const WebRtc_Word8 multicastIpAddr[64]);
|
|
WebRtc_Word32 GetLocalReceiver(int& port, int& RTCPport, char ipAddr[]);
|
|
WebRtc_Word32 SetSendDestination(const WebRtc_UWord16 rtpPort,
|
|
const WebRtc_Word8 ipAddr[64],
|
|
const int sourcePort,
|
|
const WebRtc_UWord16 rtcpPort);
|
|
WebRtc_Word32 GetSendDestination(int& port, char ipAddr[64],
|
|
int& sourcePort, int& RTCPport);
|
|
#endif
|
|
WebRtc_Word32 SetNetEQPlayoutMode(NetEqModes mode);
|
|
WebRtc_Word32 GetNetEQPlayoutMode(NetEqModes& mode);
|
|
WebRtc_Word32 SetNetEQBGNMode(NetEqBgnModes mode);
|
|
WebRtc_Word32 GetNetEQBGNMode(NetEqBgnModes& mode);
|
|
WebRtc_Word32 SetOnHoldStatus(bool enable, OnHoldModes mode);
|
|
WebRtc_Word32 GetOnHoldStatus(bool& enabled, OnHoldModes& mode);
|
|
WebRtc_Word32 RegisterVoiceEngineObserver(VoiceEngineObserver& observer);
|
|
WebRtc_Word32 DeRegisterVoiceEngineObserver();
|
|
|
|
// VoECodec
|
|
WebRtc_Word32 GetSendCodec(CodecInst& codec);
|
|
WebRtc_Word32 GetRecCodec(CodecInst& codec);
|
|
WebRtc_Word32 SetSendCodec(const CodecInst& codec);
|
|
WebRtc_Word32 SetVADStatus(bool enableVAD, ACMVADMode mode,
|
|
bool disableDTX);
|
|
WebRtc_Word32 GetVADStatus(bool& enabledVAD, ACMVADMode& mode,
|
|
bool& disabledDTX);
|
|
WebRtc_Word32 SetRecPayloadType(const CodecInst& codec);
|
|
WebRtc_Word32 GetRecPayloadType(CodecInst& codec);
|
|
WebRtc_Word32 SetAMREncFormat(AmrMode mode);
|
|
WebRtc_Word32 SetAMRDecFormat(AmrMode mode);
|
|
WebRtc_Word32 SetAMRWbEncFormat(AmrMode mode);
|
|
WebRtc_Word32 SetAMRWbDecFormat(AmrMode mode);
|
|
WebRtc_Word32 SetSendCNPayloadType(int type, PayloadFrequencies frequency);
|
|
WebRtc_Word32 SetISACInitTargetRate(int rateBps, bool useFixedFrameSize);
|
|
WebRtc_Word32 SetISACMaxRate(int rateBps);
|
|
WebRtc_Word32 SetISACMaxPayloadSize(int sizeBytes);
|
|
|
|
// VoENetwork
|
|
WebRtc_Word32 RegisterExternalTransport(Transport& transport);
|
|
WebRtc_Word32 DeRegisterExternalTransport();
|
|
WebRtc_Word32 ReceivedRTPPacket(const WebRtc_Word8* data,
|
|
WebRtc_Word32 length);
|
|
WebRtc_Word32 ReceivedRTCPPacket(const WebRtc_Word8* data,
|
|
WebRtc_Word32 length);
|
|
#ifndef WEBRTC_EXTERNAL_TRANSPORT
|
|
WebRtc_Word32 GetSourceInfo(int& rtpPort, int& rtcpPort, char ipAddr[64]);
|
|
WebRtc_Word32 EnableIPv6();
|
|
bool IPv6IsEnabled() const;
|
|
WebRtc_Word32 SetSourceFilter(int rtpPort, int rtcpPort,
|
|
const char ipAddr[64]);
|
|
WebRtc_Word32 GetSourceFilter(int& rtpPort, int& rtcpPort, char ipAddr[64]);
|
|
WebRtc_Word32 SetSendTOS(int DSCP, int priority, bool useSetSockopt);
|
|
WebRtc_Word32 GetSendTOS(int &DSCP, int& priority, bool &useSetSockopt);
|
|
#if defined(_WIN32)
|
|
WebRtc_Word32 SetSendGQoS(bool enable, int serviceType, int overrideDSCP);
|
|
WebRtc_Word32 GetSendGQoS(bool &enabled, int &serviceType,
|
|
int &overrideDSCP);
|
|
#endif
|
|
#endif
|
|
WebRtc_Word32 SetPacketTimeoutNotification(bool enable, int timeoutSeconds);
|
|
WebRtc_Word32 GetPacketTimeoutNotification(bool& enabled,
|
|
int& timeoutSeconds);
|
|
WebRtc_Word32 RegisterDeadOrAliveObserver(VoEConnectionObserver& observer);
|
|
WebRtc_Word32 DeRegisterDeadOrAliveObserver();
|
|
WebRtc_Word32 SetPeriodicDeadOrAliveStatus(bool enable,
|
|
int sampleTimeSeconds);
|
|
WebRtc_Word32 GetPeriodicDeadOrAliveStatus(bool& enabled,
|
|
int& sampleTimeSeconds);
|
|
WebRtc_Word32 SendUDPPacket(const void* data, unsigned int length,
|
|
int& transmittedBytes, bool useRtcpSocket);
|
|
|
|
// VoEFile
|
|
int StartPlayingFileLocally(const char* fileName, const bool loop,
|
|
const FileFormats format,
|
|
const int startPosition,
|
|
const float volumeScaling,
|
|
const int stopPosition,
|
|
const CodecInst* codecInst);
|
|
int StartPlayingFileLocally(InStream* stream, const FileFormats format,
|
|
const int startPosition,
|
|
const float volumeScaling,
|
|
const int stopPosition,
|
|
const CodecInst* codecInst);
|
|
int StopPlayingFileLocally();
|
|
int IsPlayingFileLocally() const;
|
|
int ScaleLocalFilePlayout(const float scale);
|
|
int GetLocalPlayoutPosition(int& positionMs);
|
|
int StartPlayingFileAsMicrophone(const char* fileName, const bool loop,
|
|
const FileFormats format,
|
|
const int startPosition,
|
|
const float volumeScaling,
|
|
const int stopPosition,
|
|
const CodecInst* codecInst);
|
|
int StartPlayingFileAsMicrophone(InStream* stream,
|
|
const FileFormats format,
|
|
const int startPosition,
|
|
const float volumeScaling,
|
|
const int stopPosition,
|
|
const CodecInst* codecInst);
|
|
int StopPlayingFileAsMicrophone();
|
|
int IsPlayingFileAsMicrophone() const;
|
|
int ScaleFileAsMicrophonePlayout(const float scale);
|
|
int StartRecordingPlayout(const char* fileName, const CodecInst* codecInst);
|
|
int StartRecordingPlayout(OutStream* stream, const CodecInst* codecInst);
|
|
int StopRecordingPlayout();
|
|
|
|
void SetMixWithMicStatus(bool mix);
|
|
|
|
// VoEExternalMediaProcessing
|
|
int RegisterExternalMediaProcessing(ProcessingTypes type,
|
|
VoEMediaProcess& processObject);
|
|
int DeRegisterExternalMediaProcessing(ProcessingTypes type);
|
|
|
|
// VoEVolumeControl
|
|
int GetSpeechOutputLevel(WebRtc_UWord32& level) const;
|
|
int GetSpeechOutputLevelFullRange(WebRtc_UWord32& level) const;
|
|
int SetMute(const bool enable);
|
|
bool Mute() const;
|
|
int SetOutputVolumePan(float left, float right);
|
|
int GetOutputVolumePan(float& left, float& right) const;
|
|
int SetChannelOutputVolumeScaling(float scaling);
|
|
int GetChannelOutputVolumeScaling(float& scaling) const;
|
|
|
|
// VoECallReport
|
|
void ResetDeadOrAliveCounters();
|
|
int ResetRTCPStatistics();
|
|
int GetRoundTripTimeSummary(StatVal& delaysMs) const;
|
|
int GetDeadOrAliveCounters(int& countDead, int& countAlive) const;
|
|
|
|
// VoENetEqStats
|
|
int GetNetworkStatistics(NetworkStatistics& stats);
|
|
int GetJitterStatistics(JitterStatistics& stats);
|
|
int GetPreferredBufferSize(unsigned short& preferredBufferSize);
|
|
int ResetJitterStatistics();
|
|
|
|
// VoEVideoSync
|
|
int GetDelayEstimate(int& delayMs) const;
|
|
int SetMinimumPlayoutDelay(int delayMs);
|
|
int GetPlayoutTimestamp(unsigned int& timestamp);
|
|
int SetInitTimestamp(unsigned int timestamp);
|
|
int SetInitSequenceNumber(short sequenceNumber);
|
|
|
|
// VoEVideoSyncExtended
|
|
int GetRtpRtcp(RtpRtcp* &rtpRtcpModule) const;
|
|
|
|
// VoEEncryption
|
|
#ifdef WEBRTC_SRTP
|
|
int EnableSRTPSend(
|
|
CipherTypes cipherType,
|
|
int cipherKeyLength,
|
|
AuthenticationTypes authType,
|
|
int authKeyLength,
|
|
int authTagLength,
|
|
SecurityLevels level,
|
|
const unsigned char key[kVoiceEngineMaxSrtpKeyLength],
|
|
bool useForRTCP);
|
|
int DisableSRTPSend();
|
|
int EnableSRTPReceive(
|
|
CipherTypes cipherType,
|
|
int cipherKeyLength,
|
|
AuthenticationTypes authType,
|
|
int authKeyLength,
|
|
int authTagLength,
|
|
SecurityLevels level,
|
|
const unsigned char key[kVoiceEngineMaxSrtpKeyLength],
|
|
bool useForRTCP);
|
|
int DisableSRTPReceive();
|
|
#endif
|
|
int RegisterExternalEncryption(Encryption& encryption);
|
|
int DeRegisterExternalEncryption();
|
|
|
|
// VoEDtmf
|
|
int SendTelephoneEventOutband(unsigned char eventCode, int lengthMs,
|
|
int attenuationDb, bool playDtmfEvent);
|
|
int SendTelephoneEventInband(unsigned char eventCode, int lengthMs,
|
|
int attenuationDb, bool playDtmfEvent);
|
|
int SetDtmfPlayoutStatus(bool enable);
|
|
bool DtmfPlayoutStatus() const;
|
|
int SetSendTelephoneEventPayloadType(unsigned char type);
|
|
int GetSendTelephoneEventPayloadType(unsigned char& type);
|
|
#ifdef WEBRTC_DTMF_DETECTION
|
|
int RegisterTelephoneEventDetection(
|
|
TelephoneEventDetectionMethods detectionMethod,
|
|
VoETelephoneEventObserver& observer);
|
|
int DeRegisterTelephoneEventDetection();
|
|
int GetTelephoneEventDetectionStatus(
|
|
bool& enabled,
|
|
TelephoneEventDetectionMethods& detectionMethod);
|
|
#endif
|
|
|
|
// VoEAudioProcessingImpl
|
|
int UpdateRxVadDetection(AudioFrame& audioFrame);
|
|
int RegisterRxVadObserver(VoERxVadCallback &observer);
|
|
int DeRegisterRxVadObserver();
|
|
int VoiceActivityIndicator(int &activity);
|
|
#ifdef WEBRTC_VOICE_ENGINE_AGC
|
|
int SetRxAgcStatus(const bool enable, const AgcModes mode);
|
|
int GetRxAgcStatus(bool& enabled, AgcModes& mode);
|
|
int SetRxAgcConfig(const AgcConfig config);
|
|
int GetRxAgcConfig(AgcConfig& config);
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_NR
|
|
int SetRxNsStatus(const bool enable, const NsModes mode);
|
|
int GetRxNsStatus(bool& enabled, NsModes& mode);
|
|
#endif
|
|
|
|
// VoERTP_RTCP
|
|
int RegisterRTPObserver(VoERTPObserver& observer);
|
|
int DeRegisterRTPObserver();
|
|
int RegisterRTCPObserver(VoERTCPObserver& observer);
|
|
int DeRegisterRTCPObserver();
|
|
int SetLocalSSRC(unsigned int ssrc);
|
|
int GetLocalSSRC(unsigned int& ssrc);
|
|
int GetRemoteSSRC(unsigned int& ssrc);
|
|
int GetRemoteCSRCs(unsigned int arrCSRC[15]);
|
|
int SetRTPAudioLevelIndicationStatus(bool enable, unsigned char ID);
|
|
int GetRTPAudioLevelIndicationStatus(bool& enable, unsigned char& ID);
|
|
int SetRTCPStatus(bool enable);
|
|
int GetRTCPStatus(bool& enabled);
|
|
int SetRTCP_CNAME(const char cName[256]);
|
|
int GetRTCP_CNAME(char cName[256]);
|
|
int GetRemoteRTCP_CNAME(char cName[256]);
|
|
int GetRemoteRTCPData(unsigned int& NTPHigh, unsigned int& NTPLow,
|
|
unsigned int& timestamp,
|
|
unsigned int& playoutTimestamp, unsigned int* jitter,
|
|
unsigned short* fractionLost);
|
|
int SendApplicationDefinedRTCPPacket(const unsigned char subType,
|
|
unsigned int name, const char* data,
|
|
unsigned short dataLengthInBytes);
|
|
int GetRTPStatistics(unsigned int& averageJitterMs,
|
|
unsigned int& maxJitterMs,
|
|
unsigned int& discardedPackets);
|
|
int GetRTPStatistics(CallStatistics& stats);
|
|
int SetFECStatus(bool enable, int redPayloadtype);
|
|
int GetFECStatus(bool& enabled, int& redPayloadtype);
|
|
int SetRTPKeepaliveStatus(bool enable, unsigned char unknownPayloadType,
|
|
int deltaTransmitTimeSeconds);
|
|
int GetRTPKeepaliveStatus(bool& enabled, unsigned char& unknownPayloadType,
|
|
int& deltaTransmitTimeSeconds);
|
|
int StartRTPDump(const char fileNameUTF8[1024], RTPDirections direction);
|
|
int StopRTPDump(RTPDirections direction);
|
|
bool RTPDumpIsActive(RTPDirections direction);
|
|
int InsertExtraRTPPacket(unsigned char payloadType, bool markerBit,
|
|
const char* payloadData,
|
|
unsigned short payloadSize);
|
|
|
|
public:
|
|
// From AudioPacketizationCallback in the ACM
|
|
WebRtc_Word32 SendData(FrameType frameType,
|
|
WebRtc_UWord8 payloadType,
|
|
WebRtc_UWord32 timeStamp,
|
|
const WebRtc_UWord8* payloadData,
|
|
WebRtc_UWord16 payloadSize,
|
|
const RTPFragmentationHeader* fragmentation);
|
|
// From ACMVADCallback in the ACM
|
|
WebRtc_Word32 InFrameType(WebRtc_Word16 frameType);
|
|
|
|
#ifdef WEBRTC_DTMF_DETECTION
|
|
public: // From AudioCodingFeedback in the ACM
|
|
int IncomingDtmf(const WebRtc_UWord8 digitDtmf, const bool end);
|
|
#endif
|
|
|
|
public:
|
|
WebRtc_Word32 OnRxVadDetected(const int vadDecision);
|
|
|
|
public:
|
|
// From RtpData in the RTP/RTCP module
|
|
WebRtc_Word32 OnReceivedPayloadData(const WebRtc_UWord8* payloadData,
|
|
const WebRtc_UWord16 payloadSize,
|
|
const WebRtcRTPHeader* rtpHeader);
|
|
|
|
public:
|
|
// From RtpFeedback in the RTP/RTCP module
|
|
WebRtc_Word32 OnInitializeDecoder(
|
|
const WebRtc_Word32 id,
|
|
const WebRtc_Word8 payloadType,
|
|
const WebRtc_Word8 payloadName[RTP_PAYLOAD_NAME_SIZE],
|
|
const WebRtc_UWord32 frequency,
|
|
const WebRtc_UWord8 channels,
|
|
const WebRtc_UWord32 rate);
|
|
|
|
void OnPacketTimeout(const WebRtc_Word32 id);
|
|
|
|
void OnReceivedPacket(const WebRtc_Word32 id,
|
|
const RtpRtcpPacketType packetType);
|
|
|
|
void OnPeriodicDeadOrAlive(const WebRtc_Word32 id,
|
|
const RTPAliveType alive);
|
|
|
|
void OnIncomingSSRCChanged(const WebRtc_Word32 id,
|
|
const WebRtc_UWord32 SSRC);
|
|
|
|
void OnIncomingCSRCChanged(const WebRtc_Word32 id,
|
|
const WebRtc_UWord32 CSRC, const bool added);
|
|
|
|
public:
|
|
// From RtcpFeedback in the RTP/RTCP module
|
|
void OnLipSyncUpdate(const WebRtc_Word32 id,
|
|
const WebRtc_Word32 audioVideoOffset) {};
|
|
|
|
void OnApplicationDataReceived(const WebRtc_Word32 id,
|
|
const WebRtc_UWord8 subType,
|
|
const WebRtc_UWord32 name,
|
|
const WebRtc_UWord16 length,
|
|
const WebRtc_UWord8* data);
|
|
|
|
void OnRTCPPacketTimeout(const WebRtc_Word32 id) {} ;
|
|
|
|
void OnTMMBRReceived(const WebRtc_Word32 id,
|
|
const WebRtc_UWord16 bwEstimateKbit) {};
|
|
|
|
void OnSendReportReceived(const WebRtc_Word32 id,
|
|
const WebRtc_UWord32 senderSSRC,
|
|
const WebRtc_UWord8* packet,
|
|
const WebRtc_UWord16 packetLength) {};
|
|
|
|
void OnReceiveReportReceived(const WebRtc_Word32 id,
|
|
const WebRtc_UWord32 senderSSRC,
|
|
const WebRtc_UWord8* packet,
|
|
const WebRtc_UWord16 packetLength) {};
|
|
|
|
public:
|
|
// From RtpAudioFeedback in the RTP/RTCP module
|
|
void OnReceivedTelephoneEvent(const WebRtc_Word32 id,
|
|
const WebRtc_UWord8 event,
|
|
const bool endOfEvent);
|
|
|
|
void OnPlayTelephoneEvent(const WebRtc_Word32 id,
|
|
const WebRtc_UWord8 event,
|
|
const WebRtc_UWord16 lengthMs,
|
|
const WebRtc_UWord8 volume);
|
|
|
|
public:
|
|
// From UdpTransportData in the Socket Transport module
|
|
void IncomingRTPPacket(const WebRtc_Word8* incomingRtpPacket,
|
|
const WebRtc_Word32 rtpPacketLength,
|
|
const WebRtc_Word8* fromIP,
|
|
const WebRtc_UWord16 fromPort);
|
|
|
|
void IncomingRTCPPacket(const WebRtc_Word8* incomingRtcpPacket,
|
|
const WebRtc_Word32 rtcpPacketLength,
|
|
const WebRtc_Word8* fromIP,
|
|
const WebRtc_UWord16 fromPort);
|
|
|
|
public:
|
|
// From Transport (called by the RTP/RTCP module)
|
|
int SendPacket(int /*channel*/, const void *data, int len);
|
|
int SendRTCPPacket(int /*channel*/, const void *data, int len);
|
|
|
|
public:
|
|
// From MixerParticipant
|
|
WebRtc_Word32 GetAudioFrame(const WebRtc_Word32 id,
|
|
AudioFrame& audioFrame);
|
|
WebRtc_Word32 NeededFrequency(const WebRtc_Word32 id);
|
|
|
|
public:
|
|
// From MonitorObserver
|
|
void OnPeriodicProcess();
|
|
|
|
public:
|
|
// From FileCallback
|
|
void PlayNotification(const WebRtc_Word32 id,
|
|
const WebRtc_UWord32 durationMs);
|
|
void RecordNotification(const WebRtc_Word32 id,
|
|
const WebRtc_UWord32 durationMs);
|
|
void PlayFileEnded(const WebRtc_Word32 id);
|
|
void RecordFileEnded(const WebRtc_Word32 id);
|
|
|
|
public:
|
|
WebRtc_UWord32 InstanceId() const
|
|
{
|
|
return _instanceId;
|
|
};
|
|
WebRtc_Word32 ChannelId() const
|
|
{
|
|
return _channelId;
|
|
};
|
|
bool Playing() const
|
|
{
|
|
return _playing;
|
|
};
|
|
bool Sending() const
|
|
{
|
|
return _sending;
|
|
};
|
|
bool Receiving() const
|
|
{
|
|
return _receiving;
|
|
};
|
|
bool ExternalTransport() const
|
|
{
|
|
return _externalTransport;
|
|
};
|
|
bool OutputIsOnHold() const
|
|
{
|
|
return _outputIsOnHold;
|
|
};
|
|
bool InputIsOnHold() const
|
|
{
|
|
return _inputIsOnHold;
|
|
};
|
|
RtpRtcp* const RtpRtcpModulePtr()
|
|
{
|
|
return &_rtpRtcpModule;
|
|
};
|
|
WebRtc_Word8 const OutputEnergyLevel()
|
|
{
|
|
return _outputAudioLevel.Level();
|
|
};
|
|
#ifndef WEBRTC_EXTERNAL_TRANSPORT
|
|
bool SendSocketsInitialized() const
|
|
{
|
|
return _socketTransportModule.SendSocketsInitialized();
|
|
};
|
|
bool ReceiveSocketsInitialized() const
|
|
{
|
|
return _socketTransportModule.ReceiveSocketsInitialized();
|
|
};
|
|
#endif
|
|
WebRtc_UWord32 Demultiplex(const AudioFrame& audioFrame,
|
|
const WebRtc_UWord8 audioLevel_dBov);
|
|
WebRtc_UWord32 PrepareEncodeAndSend(WebRtc_UWord32 mixingFrequency);
|
|
WebRtc_UWord32 EncodeAndSend();
|
|
|
|
private:
|
|
int InsertInbandDtmfTone();
|
|
WebRtc_Word32
|
|
MixOrReplaceAudioWithFile(const WebRtc_UWord32 mixingFrequency);
|
|
WebRtc_Word32 MixAudioWithFile(AudioFrame& audioFrame,
|
|
const WebRtc_UWord32 mixingFrequency);
|
|
WebRtc_Word32 GetPlayoutTimeStamp(WebRtc_UWord32& playoutTimestamp);
|
|
void UpdateDeadOrAliveCounters(bool alive);
|
|
WebRtc_Word32 SendPacketRaw(const void *data, int len, bool RTCP);
|
|
WebRtc_Word32 UpdatePacketDelay(const WebRtc_UWord32 timestamp,
|
|
const WebRtc_UWord16 sequenceNumber);
|
|
void RegisterReceiveCodecsToRTPModule();
|
|
int ApmProcessRx(AudioFrame& audioFrame);
|
|
|
|
private:
|
|
CriticalSectionWrapper& _fileCritSect;
|
|
CriticalSectionWrapper& _callbackCritSect;
|
|
CriticalSectionWrapper& _transmitCritSect;
|
|
WebRtc_UWord32 _instanceId;
|
|
WebRtc_Word32 _channelId;
|
|
|
|
private:
|
|
RtpRtcp& _rtpRtcpModule;
|
|
AudioCodingModule& _audioCodingModule;
|
|
#ifndef WEBRTC_EXTERNAL_TRANSPORT
|
|
UdpTransport& _socketTransportModule;
|
|
#endif
|
|
#ifdef WEBRTC_SRTP
|
|
SrtpModule& _srtpModule;
|
|
#endif
|
|
RtpDump& _rtpDumpIn;
|
|
RtpDump& _rtpDumpOut;
|
|
private:
|
|
AudioLevel _outputAudioLevel;
|
|
bool _externalTransport;
|
|
AudioFrame _audioFrame;
|
|
WebRtc_UWord8 _audioLevel_dBov;
|
|
FilePlayer* _inputFilePlayerPtr;
|
|
FilePlayer* _outputFilePlayerPtr;
|
|
FileRecorder* _outputFileRecorderPtr;
|
|
WebRtc_UWord32 _inputFilePlayerId;
|
|
WebRtc_UWord32 _outputFilePlayerId;
|
|
WebRtc_UWord32 _outputFileRecorderId;
|
|
bool _inputFilePlaying;
|
|
bool _outputFilePlaying;
|
|
bool _outputFileRecording;
|
|
DtmfInbandQueue _inbandDtmfQueue;
|
|
DtmfInband _inbandDtmfGenerator;
|
|
bool _outputExternalMedia;
|
|
bool _inputExternalMedia;
|
|
VoEMediaProcess* _inputExternalMediaCallbackPtr;
|
|
VoEMediaProcess* _outputExternalMediaCallbackPtr;
|
|
WebRtc_UWord8* _encryptionRTPBufferPtr;
|
|
WebRtc_UWord8* _decryptionRTPBufferPtr;
|
|
WebRtc_UWord8* _encryptionRTCPBufferPtr;
|
|
WebRtc_UWord8* _decryptionRTCPBufferPtr;
|
|
WebRtc_UWord32 _timeStamp;
|
|
WebRtc_UWord8 _sendTelephoneEventPayloadType;
|
|
WebRtc_UWord32 _playoutTimeStampRTP;
|
|
WebRtc_UWord32 _playoutTimeStampRTCP;
|
|
WebRtc_UWord32 _numberOfDiscardedPackets;
|
|
private:
|
|
// uses
|
|
Statistics* _engineStatisticsPtr;
|
|
OutputMixer* _outputMixerPtr;
|
|
TransmitMixer* _transmitMixerPtr;
|
|
ProcessThread* _moduleProcessThreadPtr;
|
|
AudioDeviceModule* _audioDeviceModulePtr;
|
|
VoiceEngineObserver* _voiceEngineObserverPtr; // owned by base
|
|
CriticalSectionWrapper* _callbackCritSectPtr; // owned by base
|
|
Transport* _transportPtr; // WebRtc socket or external transport
|
|
Encryption* _encryptionPtr; // WebRtc SRTP or external encryption
|
|
AudioProcessing* _rxAudioProcessingModulePtr; // far end AudioProcessing
|
|
#ifdef WEBRTC_DTMF_DETECTION
|
|
VoETelephoneEventObserver* _telephoneEventDetectionPtr;
|
|
#endif
|
|
VoERxVadCallback* _rxVadObserverPtr;
|
|
WebRtc_Word32 _oldVadDecision;
|
|
WebRtc_Word32 _sendFrameType; // Send data is voice, 1-voice, 0-otherwise
|
|
VoERTPObserver* _rtpObserverPtr;
|
|
VoERTCPObserver* _rtcpObserverPtr;
|
|
private:
|
|
// VoEBase
|
|
bool _outputIsOnHold;
|
|
bool _externalPlayout;
|
|
bool _inputIsOnHold;
|
|
bool _playing;
|
|
bool _sending;
|
|
bool _receiving;
|
|
bool _mixFileWithMicrophone;
|
|
bool _rtpObserver;
|
|
bool _rtcpObserver;
|
|
// VoEVolumeControl
|
|
bool _mute;
|
|
float _panLeft;
|
|
float _panRight;
|
|
float _outputGain;
|
|
// VoEEncryption
|
|
bool _encrypting;
|
|
bool _decrypting;
|
|
// VoEDtmf
|
|
bool _playOutbandDtmfEvent;
|
|
bool _playInbandDtmfEvent;
|
|
bool _inbandTelephoneEventDetection;
|
|
bool _outOfBandTelephoneEventDetecion;
|
|
// VoeRTP_RTCP
|
|
WebRtc_UWord8 _extraPayloadType;
|
|
bool _insertExtraRTPPacket;
|
|
bool _extraMarkerBit;
|
|
WebRtc_UWord32 _lastLocalTimeStamp;
|
|
WebRtc_Word8 _lastPayloadType;
|
|
bool _includeAudioLevelIndication;
|
|
// VoENetwork
|
|
bool _rtpPacketTimedOut;
|
|
bool _rtpPacketTimeOutIsEnabled;
|
|
WebRtc_UWord32 _rtpTimeOutSeconds;
|
|
bool _connectionObserver;
|
|
VoEConnectionObserver* _connectionObserverPtr;
|
|
WebRtc_UWord32 _countAliveDetections;
|
|
WebRtc_UWord32 _countDeadDetections;
|
|
AudioFrame::SpeechType _outputSpeechType;
|
|
// VoEVideoSync
|
|
WebRtc_UWord32 _averageDelayMs;
|
|
WebRtc_UWord16 _previousSequenceNumber;
|
|
WebRtc_UWord32 _previousTimestamp;
|
|
WebRtc_UWord16 _recPacketDelayMs;
|
|
// VoEAudioProcessing
|
|
bool _RxVadDetection;
|
|
bool _rxApmIsEnabled;
|
|
bool _rxAgcIsEnabled;
|
|
bool _rxNsIsEnabled;
|
|
};
|
|
|
|
} // namespace voe
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // WEBRTC_VOICE_ENGINE_CHANNEL_H
|