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#ifndef CHROME_RENDERER_MEDIA_CAST_TRANSPORT_SENDER_IPC_H_ 6#define CHROME_RENDERER_MEDIA_CAST_TRANSPORT_SENDER_IPC_H_ 7 8#include "base/message_loop/message_loop_proxy.h" 9#include "ipc/ipc_channel_proxy.h" 10#include "media/cast/logging/logging_defines.h" 11#include "media/cast/transport/cast_transport_sender.h" 12 13// This implementation of the CastTransportSender interface 14// communicates with the browser process over IPC and relays 15// all calls to/from the transport sender to the browser process. 16// The primary reason for this arrangement is to give the 17// renderer less direct control over the UDP sockets. 18class CastTransportSenderIPC 19 : public media::cast::transport::CastTransportSender { 20 public: 21 CastTransportSenderIPC( 22 const net::IPEndPoint& remote_end_point, 23 const media::cast::transport::CastTransportStatusCallback& status_cb, 24 const media::cast::transport::BulkRawEventsCallback& raw_events_cb); 25 26 virtual ~CastTransportSenderIPC(); 27 28 // media::cast::transport::CastTransportSender implementation. 29 virtual void SetPacketReceiver( 30 const media::cast::transport::PacketReceiverCallback& packet_callback) 31 OVERRIDE; 32 virtual void InitializeAudio( 33 const media::cast::transport::CastTransportAudioConfig& config) OVERRIDE; 34 virtual void InitializeVideo( 35 const media::cast::transport::CastTransportVideoConfig& config) OVERRIDE; 36 virtual void InsertCodedAudioFrame( 37 const media::cast::transport::EncodedFrame& audio_frame) OVERRIDE; 38 virtual void InsertCodedVideoFrame( 39 const media::cast::transport::EncodedFrame& video_frame) OVERRIDE; 40 virtual void SendRtcpFromRtpSender( 41 uint32 packet_type_flags, 42 uint32 ntp_seconds, 43 uint32 ntp_fraction, 44 uint32 rtp_timestamp, 45 const media::cast::transport::RtcpDlrrReportBlock& dlrr, 46 uint32 sending_ssrc, 47 const std::string& c_name) OVERRIDE; 48 virtual void ResendPackets( 49 bool is_audio, 50 const media::cast::transport::MissingFramesAndPacketsMap& missing_packets, 51 bool cancel_rtx_if_not_in_list, 52 base::TimeDelta dedupe_window) 53 OVERRIDE; 54 55 void OnReceivedPacket(const media::cast::transport::Packet& packet); 56 void OnNotifyStatusChange( 57 media::cast::transport::CastTransportStatus status); 58 void OnRawEvents(const std::vector<media::cast::PacketEvent>& packet_events); 59 60 private: 61 void Send(IPC::Message* message); 62 63 int32 channel_id_; 64 media::cast::transport::PacketReceiverCallback packet_callback_; 65 media::cast::transport::CastTransportStatusCallback status_callback_; 66 media::cast::transport::BulkRawEventsCallback raw_events_callback_; 67 68 DISALLOW_COPY_AND_ASSIGN(CastTransportSenderIPC); 69}; 70 71#endif // CHROME_RENDERER_MEDIA_CAST_TRANSPORT_SENDER_IPC_H_ 72