• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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