Home | History | Annotate | Download | only in net
      1 // Copyright 2014 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 is the main interface for the cast transport sender.  It accepts encoded
      6 // frames (both audio and video), encrypts their encoded data, packetizes them
      7 // and feeds them into a transport (e.g., UDP).
      8 
      9 // Construction of the Cast Sender and the Cast Transport Sender should be done
     10 // in the following order:
     11 // 1. Create CastTransportSender.
     12 // 2. Create CastSender (accepts CastTransportSender as an input).
     13 
     14 // Destruction: The CastTransportSender is assumed to be valid as long as the
     15 // CastSender is alive. Therefore the CastSender should be destructed before the
     16 // CastTransportSender.
     17 
     18 #ifndef MEDIA_CAST_NET_CAST_TRANSPORT_SENDER_H_
     19 #define MEDIA_CAST_NET_CAST_TRANSPORT_SENDER_H_
     20 
     21 #include "base/basictypes.h"
     22 #include "base/callback.h"
     23 #include "base/single_thread_task_runner.h"
     24 #include "base/threading/non_thread_safe.h"
     25 #include "base/time/tick_clock.h"
     26 #include "media/cast/logging/logging_defines.h"
     27 #include "media/cast/net/cast_transport_config.h"
     28 #include "media/cast/net/cast_transport_defines.h"
     29 #include "media/cast/net/rtcp/receiver_rtcp_event_subscriber.h"
     30 #include "media/cast/net/rtcp/rtcp_defines.h"
     31 #include "net/base/ip_endpoint.h"
     32 
     33 namespace base {
     34 class DictionaryValue;
     35 }  // namespace base
     36 
     37 namespace net {
     38 class NetLog;
     39 }  // namespace net
     40 
     41 namespace media {
     42 namespace cast {
     43 
     44 // Following the initialization of either audio or video an initialization
     45 // status will be sent via this callback.
     46 typedef base::Callback<void(CastTransportStatus status)>
     47     CastTransportStatusCallback;
     48 
     49 typedef base::Callback<void(const std::vector<PacketEvent>&,
     50                             const std::vector<FrameEvent>&)>
     51     BulkRawEventsCallback;
     52 
     53 // The application should only trigger this class from the transport thread.
     54 class CastTransportSender : public base::NonThreadSafe {
     55  public:
     56   static scoped_ptr<CastTransportSender> Create(
     57       net::NetLog* net_log,
     58       base::TickClock* clock,
     59       const net::IPEndPoint& remote_end_point,
     60       scoped_ptr<base::DictionaryValue> options,
     61       const CastTransportStatusCallback& status_callback,
     62       const BulkRawEventsCallback& raw_events_callback,
     63       base::TimeDelta raw_events_callback_interval,
     64       const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner);
     65 
     66   virtual ~CastTransportSender() {}
     67 
     68   // Audio/Video initialization.
     69   // Encoded frames cannot be transmitted until the relevant initialize method
     70   // is called.
     71   virtual void InitializeAudio(const CastTransportRtpConfig& config,
     72                                const RtcpCastMessageCallback& cast_message_cb,
     73                                const RtcpRttCallback& rtt_cb) = 0;
     74   virtual void InitializeVideo(const CastTransportRtpConfig& config,
     75                                const RtcpCastMessageCallback& cast_message_cb,
     76                                const RtcpRttCallback& rtt_cb) = 0;
     77 
     78   // Encrypt, packetize and transmit |frame|. |ssrc| must refer to a
     79   // a channel already established with InitializeAudio / InitializeVideo.
     80   virtual void InsertFrame(uint32 ssrc, const EncodedFrame& frame) = 0;
     81 
     82   // Sends a RTCP sender report to the receiver.
     83   // |ssrc| is the SSRC for this report.
     84   // |current_time| is the current time reported by a tick clock.
     85   // |current_time_as_rtp_timestamp| is the corresponding RTP timestamp.
     86   virtual void SendSenderReport(
     87       uint32 ssrc,
     88       base::TimeTicks current_time,
     89       uint32 current_time_as_rtp_timestamp) = 0;
     90 
     91   // Cancels sending packets for the frames in the set.
     92   // |ssrc| is the SSRC for the stream.
     93   // |frame_ids| contains the IDs of the frames that will be cancelled.
     94   virtual void CancelSendingFrames(uint32 ssrc,
     95                                    const std::vector<uint32>& frame_ids) = 0;
     96 
     97   // Resends a frame or part of a frame to kickstart. This is used when the
     98   // stream appears to be stalled.
     99   virtual void ResendFrameForKickstart(uint32 ssrc, uint32 frame_id) = 0;
    100 
    101   // Returns a callback for receiving packets for testing purposes.
    102   virtual PacketReceiverCallback PacketReceiverForTesting();
    103 };
    104 
    105 }  // namespace cast
    106 }  // namespace media
    107 
    108 #endif  // MEDIA_CAST_NET_CAST_TRANSPORT_SENDER_H_
    109