1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // This file contains the interface to the cast RTP sender. 6 7 #ifndef MEDIA_CAST_NET_RTP_SENDER_RTP_SENDER_H_ 8 #define MEDIA_CAST_NET_RTP_SENDER_RTP_SENDER_H_ 9 10 #include <map> 11 #include <set> 12 13 #include "base/memory/scoped_ptr.h" 14 #include "base/time/tick_clock.h" 15 #include "base/time/time.h" 16 #include "media/cast/cast_config.h" 17 #include "media/cast/cast_environment.h" 18 #include "media/cast/net/rtp_sender/packet_storage/packet_storage.h" 19 #include "media/cast/net/rtp_sender/rtp_packetizer/rtp_packetizer.h" 20 #include "media/cast/net/rtp_sender/rtp_packetizer/rtp_packetizer_config.h" 21 22 namespace media { 23 namespace cast { 24 25 class PacedPacketSender; 26 struct RtcpSenderInfo; 27 28 // This object is only called from the main cast thread. 29 // This class handles splitting encoded audio and video frames into packets and 30 // add an RTP header to each packet. The sent packets are stored until they are 31 // acknowledged by the remote peer or timed out. 32 class RtpSender { 33 public: 34 RtpSender(scoped_refptr<CastEnvironment> cast_environment, 35 const AudioSenderConfig* audio_config, 36 const VideoSenderConfig* video_config, 37 PacedPacketSender* transport); 38 39 ~RtpSender(); 40 41 // The video_frame objects ownership is handled by the main cast thread. 42 void IncomingEncodedVideoFrame(const EncodedVideoFrame* video_frame, 43 const base::TimeTicks& capture_time); 44 45 // The audio_frame objects ownership is handled by the main cast thread. 46 void IncomingEncodedAudioFrame(const EncodedAudioFrame* audio_frame, 47 const base::TimeTicks& recorded_time); 48 49 void ResendPackets(const MissingFramesAndPacketsMap& missing_packets); 50 51 void RtpStatistics(const base::TimeTicks& now, RtcpSenderInfo* sender_info); 52 53 private: 54 void UpdateSequenceNumber(std::vector<uint8>* packet); 55 56 scoped_refptr<CastEnvironment> cast_environment_; 57 RtpPacketizerConfig config_; 58 scoped_ptr<RtpPacketizer> packetizer_; 59 scoped_ptr<PacketStorage> storage_; 60 PacedPacketSender* transport_; 61 }; 62 63 } // namespace cast 64 } // namespace media 65 66 #endif // MEDIA_CAST_NET_RTP_SENDER_RTP_SENDER_H_ 67