1 /* 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef WEBRTC_MODULES_VIDEO_CODING_TEST_RTP_PLAYER_H_ 12 #define WEBRTC_MODULES_VIDEO_CODING_TEST_RTP_PLAYER_H_ 13 14 #include <string> 15 #include <vector> 16 17 #include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h" 18 #include "webrtc/modules/video_coding/main/interface/video_coding_defines.h" 19 20 namespace webrtc { 21 class Clock; 22 23 namespace rtpplayer { 24 25 class PayloadCodecTuple { 26 public: 27 PayloadCodecTuple(uint8_t payload_type, const std::string& codec_name, 28 VideoCodecType codec_type) 29 : name_(codec_name), 30 payload_type_(payload_type), 31 codec_type_(codec_type) { 32 } 33 34 const std::string& name() const { return name_; } 35 uint8_t payload_type() const { return payload_type_; } 36 VideoCodecType codec_type() const { return codec_type_; } 37 38 private: 39 std::string name_; 40 uint8_t payload_type_; 41 VideoCodecType codec_type_; 42 }; 43 44 typedef std::vector<PayloadCodecTuple> PayloadTypes; 45 typedef std::vector<PayloadCodecTuple>::const_iterator PayloadTypesIterator; 46 47 // Implemented by RtpPlayer and given to client as a means to retrieve 48 // information about a specific RTP stream. 49 class RtpStreamInterface { 50 public: 51 virtual ~RtpStreamInterface() {} 52 53 // Ask for missing packets to be resent. 54 virtual void ResendPackets(const uint16_t* sequence_numbers, 55 uint16_t length) = 0; 56 57 virtual uint32_t ssrc() const = 0; 58 virtual const PayloadTypes& payload_types() const = 0; 59 }; 60 61 // Implemented by a sink. Wraps RtpData because its d-tor is protected. 62 class PayloadSinkInterface : public RtpData { 63 public: 64 virtual ~PayloadSinkInterface() {} 65 }; 66 67 // Implemented to provide a sink for RTP data, such as hooking up a VCM to 68 // the incoming RTP stream. 69 class PayloadSinkFactoryInterface { 70 public: 71 virtual ~PayloadSinkFactoryInterface() {} 72 73 // Return NULL if failed to create sink. 'stream' is guaranteed to be 74 // around for as long as the RtpData. The returned object is owned by 75 // the caller (RtpPlayer). 76 virtual PayloadSinkInterface* Create(RtpStreamInterface* stream) = 0; 77 }; 78 79 // The client's view of an RtpPlayer. 80 class RtpPlayerInterface { 81 public: 82 virtual ~RtpPlayerInterface() {} 83 84 virtual int NextPacket(int64_t timeNow) = 0; 85 virtual uint32_t TimeUntilNextPacket() const = 0; 86 virtual void Print() const = 0; 87 }; 88 89 RtpPlayerInterface* Create(const std::string& inputFilename, 90 PayloadSinkFactoryInterface* payloadSinkFactory, Clock* clock, 91 const PayloadTypes& payload_types, float lossRate, uint32_t rttMs, 92 bool reordering); 93 94 } // namespace rtpplayer 95 } // namespace webrtc 96 97 #endif // WEBRTC_MODULES_VIDEO_CODING_TEST_RTP_PLAYER_H_ 98