• 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 #ifndef MEDIA_CAST_NET_RTP_SENDER_RTP_PACKETIZER_RTP_PACKETIZER_H_
6 #define MEDIA_CAST_NET_RTP_SENDER_RTP_PACKETIZER_RTP_PACKETIZER_H_
7 
8 #include <cmath>
9 #include <list>
10 #include <map>
11 
12 #include "base/time/time.h"
13 #include "media/cast/net/rtp_sender/packet_storage/packet_storage.h"
14 #include "media/cast/net/rtp_sender/rtp_packetizer/rtp_packetizer_config.h"
15 
16 namespace media {
17 namespace cast {
18 
19 class PacedPacketSender;
20 
21 // This object is only called from the main cast thread.
22 // This class break encoded audio and video frames into packets and add an RTP
23 // header to each packet.
24 class RtpPacketizer {
25  public:
26   RtpPacketizer(PacedPacketSender* transport,
27                 PacketStorage* packet_storage,
28                 RtpPacketizerConfig rtp_packetizer_config);
29   ~RtpPacketizer();
30 
31   // The video_frame objects ownership is handled by the main cast thread.
32   void IncomingEncodedVideoFrame(const EncodedVideoFrame* video_frame,
33                                  const base::TimeTicks& capture_time);
34 
35   // The audio_frame objects ownership is handled by the main cast thread.
36   void IncomingEncodedAudioFrame(const EncodedAudioFrame* audio_frame,
37                                  const base::TimeTicks& recorded_time);
38 
39   bool LastSentTimestamp(base::TimeTicks* time_sent,
40                          uint32* rtp_timestamp) const;
41 
42   // Return the next sequence number, and increment by one. Enables unique
43   // incremental sequence numbers for every packet (including retransmissions).
44   uint16 NextSequenceNumber();
45 
send_packets_count()46   int send_packets_count() { return send_packets_count_; }
47 
send_octet_count()48   size_t send_octet_count() { return send_octet_count_; }
49 
50  private:
51   void Cast(bool is_key, uint32 frame_id, uint32 reference_frame_id,
52             uint32 timestamp, const std::string& data);
53 
54   void BuildCommonRTPheader(std::vector<uint8>* packet, bool marker_bit,
55       uint32 time_stamp);
56 
57   RtpPacketizerConfig config_;
58   PacedPacketSender* transport_;
59   PacketStorage* packet_storage_;
60 
61   base::TimeTicks time_last_sent_rtp_timestamp_;
62   uint16 sequence_number_;
63   uint32 rtp_timestamp_;
64   uint16 packet_id_;
65 
66   int send_packets_count_;
67   size_t send_octet_count_;
68 };
69 
70 }  // namespace cast
71 }  // namespace media
72 
73 #endif  // MEDIA_CAST_NET_RTP_SENDER_RTP_PACKETIZER_RTP_PACKETIZER_H_
74