BUG=1662 R=stefan@webrtc.org Review URL: https://webrtc-codereview.appspot.com/1557004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@4135 4adac7df-926f-26a2-2b94-8c16560cd09d
167 lines
5.2 KiB
C++
167 lines
5.2 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_MODULES_RTP_RTCP_TEST_BWESTANDALONE_TESTSENDERRECEIVER_H_
|
|
#define WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_TESTSENDERRECEIVER_H_
|
|
|
|
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h"
|
|
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
|
|
#include "webrtc/test/channel_transport/udp_transport.h"
|
|
#include "webrtc/typedefs.h"
|
|
|
|
class TestLoadGenerator;
|
|
namespace webrtc {
|
|
class CriticalSectionWrapper;
|
|
class EventWrapper;
|
|
class ThreadWrapper;
|
|
}
|
|
|
|
using namespace webrtc;
|
|
|
|
#define MAX_BITRATE_KBPS 50000
|
|
|
|
|
|
class SendRecCB
|
|
{
|
|
public:
|
|
virtual void OnOnNetworkChanged(const uint32_t bitrateTarget,
|
|
const uint8_t fractionLost,
|
|
const uint16_t roundTripTimeMs,
|
|
const uint16_t bwEstimateKbitMin,
|
|
const uint16_t bwEstimateKbitMax) = 0;
|
|
|
|
virtual ~SendRecCB() {};
|
|
};
|
|
|
|
|
|
class TestSenderReceiver : public RtpFeedback, public RtpData, public UdpTransportData, public RtpVideoFeedback
|
|
{
|
|
|
|
public:
|
|
TestSenderReceiver (void);
|
|
|
|
~TestSenderReceiver (void);
|
|
|
|
void SetCallback (SendRecCB *cb) { _sendRecCB = cb; };
|
|
|
|
int32_t Start();
|
|
|
|
int32_t Stop();
|
|
|
|
bool ProcLoop();
|
|
|
|
/////////////////////////////////////////////
|
|
// Receiver methods
|
|
|
|
int32_t InitReceiver (const uint16_t rtpPort,
|
|
const uint16_t rtcpPort = 0,
|
|
const int8_t payloadType = 127);
|
|
|
|
int32_t ReceiveBitrateKbps ();
|
|
|
|
int32_t SetPacketTimeout(const uint32_t timeoutMS);
|
|
|
|
bool timeOutTriggered () { return (_timeOut); };
|
|
|
|
// Inherited from RtpFeedback
|
|
virtual int32_t OnInitializeDecoder(const int32_t id,
|
|
const int8_t payloadType,
|
|
const int8_t payloadName[RTP_PAYLOAD_NAME_SIZE],
|
|
const uint32_t frequency,
|
|
const uint8_t channels,
|
|
const uint32_t rate) { return(0);};
|
|
|
|
virtual void OnPacketTimeout(const int32_t id);
|
|
|
|
virtual void OnReceivedPacket(const int32_t id,
|
|
const RtpRtcpPacketType packetType);
|
|
|
|
virtual void OnPeriodicDeadOrAlive(const int32_t id,
|
|
const RTPAliveType alive) {};
|
|
|
|
virtual void OnIncomingSSRCChanged( const int32_t id,
|
|
const uint32_t SSRC) {};
|
|
|
|
virtual void OnIncomingCSRCChanged( const int32_t id,
|
|
const uint32_t CSRC,
|
|
const bool added) {};
|
|
|
|
|
|
// Inherited from RtpData
|
|
|
|
virtual int32_t OnReceivedPayloadData(const uint8_t* payloadData,
|
|
const uint16_t payloadSize,
|
|
const webrtc::WebRtcRTPHeader* rtpHeader);
|
|
|
|
|
|
// Inherited from UdpTransportData
|
|
virtual void IncomingRTPPacket(const int8_t* incomingRtpPacket,
|
|
const int32_t rtpPacketLength,
|
|
const int8_t* fromIP,
|
|
const uint16_t fromPort);
|
|
|
|
virtual void IncomingRTCPPacket(const int8_t* incomingRtcpPacket,
|
|
const int32_t rtcpPacketLength,
|
|
const int8_t* fromIP,
|
|
const uint16_t fromPort);
|
|
|
|
|
|
|
|
/////////////////////////////////
|
|
// Sender methods
|
|
|
|
int32_t InitSender (const uint32_t startBitrateKbps,
|
|
const int8_t* ipAddr,
|
|
const uint16_t rtpPort,
|
|
const uint16_t rtcpPort = 0,
|
|
const int8_t payloadType = 127);
|
|
|
|
int32_t SendOutgoingData(const uint32_t timeStamp,
|
|
const uint8_t* payloadData,
|
|
const uint32_t payloadSize,
|
|
const webrtc::FrameType frameType = webrtc::kVideoFrameDelta);
|
|
|
|
int32_t SetLoadGenerator(TestLoadGenerator *generator);
|
|
|
|
uint32_t BitrateSent() { return (_rtp->BitrateSent()); };
|
|
|
|
|
|
// Inherited from RtpVideoFeedback
|
|
virtual void OnReceivedIntraFrameRequest(const int32_t id,
|
|
const uint8_t message = 0) {};
|
|
|
|
virtual void OnNetworkChanged(const int32_t id,
|
|
const uint32_t minBitrateBps,
|
|
const uint32_t maxBitrateBps,
|
|
const uint8_t fractionLost,
|
|
const uint16_t roundTripTimeMs,
|
|
const uint16_t bwEstimateKbitMin,
|
|
const uint16_t bwEstimateKbitMax);
|
|
|
|
private:
|
|
RtpRtcp* _rtp;
|
|
UdpTransport* _transport;
|
|
webrtc::CriticalSectionWrapper* _critSect;
|
|
webrtc::EventWrapper *_eventPtr;
|
|
webrtc::ThreadWrapper* _procThread;
|
|
bool _running;
|
|
int8_t _payloadType;
|
|
TestLoadGenerator* _loadGenerator;
|
|
bool _isSender;
|
|
bool _isReceiver;
|
|
bool _timeOut;
|
|
SendRecCB * _sendRecCB;
|
|
uint32_t _lastBytesReceived;
|
|
int64_t _lastTime;
|
|
|
|
};
|
|
|
|
#endif // WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_TESTSENDERRECEIVER_H_
|