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 CHROME_RENDERER_MEDIA_CAST_RTP_STREAM_H_ 6#define CHROME_RENDERER_MEDIA_CAST_RTP_STREAM_H_ 7 8#include <string> 9#include <vector> 10 11#include "base/basictypes.h" 12#include "base/memory/ref_counted.h" 13#include "base/memory/scoped_ptr.h" 14#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 15 16class CastAudioSink; 17class CastSession; 18class CastVideoSink; 19 20// A key value pair structure for codec specific parameters. 21struct CastCodecSpecificParams { 22 std::string key; 23 std::string value; 24 25 CastCodecSpecificParams(); 26 ~CastCodecSpecificParams(); 27}; 28 29// Defines the basic properties of a payload supported by cast transport. 30struct CastRtpPayloadParams { 31 // RTP specific field that identifies the content type. 32 int payload_type; 33 34 // RTP specific field to identify a stream. 35 int ssrc; 36 37 // Update frequency of payload sample. 38 int clock_rate; 39 40 // Maximum bitrate. 41 int max_bitrate; 42 43 // Minimum bitrate. 44 int min_bitrate; 45 46 // Number of audio channels. 47 int channels; 48 49 // Width and height of the video content. 50 int width; 51 int height; 52 53 // Name of the codec used. 54 std::string codec_name; 55 56 // List of codec specific parameters. 57 std::vector<CastCodecSpecificParams> codec_specific_params; 58 59 CastRtpPayloadParams(); 60 ~CastRtpPayloadParams(); 61}; 62 63// Defines the capabilities of the transport. 64struct CastRtpCaps { 65 // Defines a list of supported payloads. 66 std::vector<CastRtpPayloadParams> payloads; 67 68 // Names of supported RTCP features. 69 std::vector<std::string> rtcp_features; 70 71 // Names of supported FEC (Forward Error Correction) mechanisms. 72 std::vector<std::string> fec_mechanisms; 73 74 CastRtpCaps(); 75 ~CastRtpCaps(); 76}; 77 78typedef CastRtpCaps CastRtpParams; 79 80// This object represents a RTP stream that encodes and optionally 81// encrypt audio or video data from a WebMediaStreamTrack. 82// Note that this object does not actually output packets. It allows 83// configuration of encoding and RTP parameters and control such a logical 84// stream. 85class CastRtpStream { 86 public: 87 CastRtpStream(const blink::WebMediaStreamTrack& track, 88 const scoped_refptr<CastSession>& session); 89 ~CastRtpStream(); 90 91 // Return capabilities currently supported by this transport. 92 CastRtpCaps GetCaps(); 93 94 // Return parameters set to this transport. 95 CastRtpParams GetParams(); 96 97 // Begin encoding of media stream and then submit the encoded streams 98 // to underlying transport. 99 void Start(const CastRtpParams& params); 100 101 // Stop encoding. 102 void Stop(); 103 104 private: 105 // Return true if this track is an audio track. Return false if this 106 // track is a video track. 107 bool IsAudio() const; 108 109 blink::WebMediaStreamTrack track_; 110 const scoped_refptr<CastSession> cast_session_; 111 scoped_ptr<CastAudioSink> audio_sink_; 112 scoped_ptr<CastVideoSink> video_sink_; 113 CastRtpParams params_; 114 115 DISALLOW_COPY_AND_ASSIGN(CastRtpStream); 116}; 117 118#endif // CHROME_RENDERER_MEDIA_CAST_RTP_STREAM_H_ 119