Home | History | Annotate | Download | only in rtp_packetizer
      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 
     46   int send_packets_count() { return send_packets_count_; }
     47 
     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