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