/* * 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 "typedefs.h" #include "rtp_rtcp.h" #include "rtp_rtcp_defines.h" #include "udp_transport.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 WebRtc_UWord32 bitrateTarget, const WebRtc_UWord8 fractionLost, const WebRtc_UWord16 roundTripTimeMs, const WebRtc_UWord16 bwEstimateKbitMin, const WebRtc_UWord16 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; }; WebRtc_Word32 Start(); WebRtc_Word32 Stop(); bool ProcLoop(); ///////////////////////////////////////////// // Receiver methods WebRtc_Word32 InitReceiver (const WebRtc_UWord16 rtpPort, const WebRtc_UWord16 rtcpPort = 0, const WebRtc_Word8 payloadType = 127); WebRtc_Word32 ReceiveBitrateKbps (); WebRtc_Word32 SetPacketTimeout(const WebRtc_UWord32 timeoutMS); bool timeOutTriggered () { return (_timeOut); }; // Inherited from RtpFeedback virtual 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) { return(0);}; virtual void OnPacketTimeout(const WebRtc_Word32 id); virtual void OnReceivedPacket(const WebRtc_Word32 id, const RtpRtcpPacketType packetType); virtual void OnPeriodicDeadOrAlive(const WebRtc_Word32 id, const RTPAliveType alive) {}; virtual void OnIncomingSSRCChanged( const WebRtc_Word32 id, const WebRtc_UWord32 SSRC) {}; virtual void OnIncomingCSRCChanged( const WebRtc_Word32 id, const WebRtc_UWord32 CSRC, const bool added) {}; // Inherited from RtpData virtual WebRtc_Word32 OnReceivedPayloadData(const WebRtc_UWord8* payloadData, const WebRtc_UWord16 payloadSize, const webrtc::WebRtcRTPHeader* rtpHeader); // Inherited from UdpTransportData virtual void IncomingRTPPacket(const WebRtc_Word8* incomingRtpPacket, const WebRtc_Word32 rtpPacketLength, const WebRtc_Word8* fromIP, const WebRtc_UWord16 fromPort); virtual void IncomingRTCPPacket(const WebRtc_Word8* incomingRtcpPacket, const WebRtc_Word32 rtcpPacketLength, const WebRtc_Word8* fromIP, const WebRtc_UWord16 fromPort); ///////////////////////////////// // Sender methods WebRtc_Word32 InitSender (const WebRtc_UWord32 startBitrateKbps, const WebRtc_Word8* ipAddr, const WebRtc_UWord16 rtpPort, const WebRtc_UWord16 rtcpPort = 0, const WebRtc_Word8 payloadType = 127); WebRtc_Word32 SendOutgoingData(const WebRtc_UWord32 timeStamp, const WebRtc_UWord8* payloadData, const WebRtc_UWord32 payloadSize, const webrtc::FrameType frameType = webrtc::kVideoFrameDelta); WebRtc_Word32 SetLoadGenerator(TestLoadGenerator *generator); WebRtc_UWord32 BitrateSent() { return (_rtp->BitrateSent()); }; // Inherited from RtpVideoFeedback virtual void OnReceivedIntraFrameRequest(const WebRtc_Word32 id, const WebRtc_UWord8 message = 0) {}; virtual void OnNetworkChanged(const WebRtc_Word32 id, const WebRtc_UWord32 minBitrateBps, const WebRtc_UWord32 maxBitrateBps, const WebRtc_UWord8 fractionLost, const WebRtc_UWord16 roundTripTimeMs, const WebRtc_UWord16 bwEstimateKbitMin, const WebRtc_UWord16 bwEstimateKbitMax); private: RtpRtcp* _rtp; UdpTransport* _transport; webrtc::CriticalSectionWrapper& _critSect; webrtc::EventWrapper *_eventPtr; webrtc::ThreadWrapper* _procThread; bool _running; WebRtc_Word8 _payloadType; TestLoadGenerator* _loadGenerator; bool _isSender; bool _isReceiver; bool _timeOut; SendRecCB * _sendRecCB; WebRtc_UWord32 _lastBytesReceived; WebRtc_Word64 _lastTime; }; #endif // WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_TESTSENDERRECEIVER_H_