call.h revision 6ae48c660934784b4df56ab1ac99402ce3745e9f
1/* 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10#ifndef WEBRTC_CALL_H_ 11#define WEBRTC_CALL_H_ 12 13#include <string> 14#include <vector> 15 16#include "webrtc/common_types.h" 17#include "webrtc/video_receive_stream.h" 18#include "webrtc/video_send_stream.h" 19 20namespace webrtc { 21 22class VoiceEngine; 23 24const char* Version(); 25 26class PacketReceiver { 27 public: 28 enum DeliveryStatus { 29 DELIVERY_OK, 30 DELIVERY_UNKNOWN_SSRC, 31 DELIVERY_PACKET_ERROR, 32 }; 33 34 virtual DeliveryStatus DeliverPacket(const uint8_t* packet, 35 size_t length) = 0; 36 37 protected: 38 virtual ~PacketReceiver() {} 39}; 40 41// Callback interface for reporting when a system overuse is detected. 42// The detection is based on the jitter of incoming captured frames. 43class OveruseCallback { 44 public: 45 // Called as soon as an overuse is detected. 46 virtual void OnOveruse() = 0; 47 // Called periodically when the system is not overused any longer. 48 virtual void OnNormalUse() = 0; 49 50 protected: 51 virtual ~OveruseCallback() {} 52}; 53 54// A Call instance can contain several send and/or receive streams. All streams 55// are assumed to have the same remote endpoint and will share bitrate estimates 56// etc. 57class Call { 58 public: 59 struct Config { 60 explicit Config(newapi::Transport* send_transport) 61 : webrtc_config(NULL), 62 send_transport(send_transport), 63 voice_engine(NULL), 64 overuse_callback(NULL) {} 65 66 webrtc::Config* webrtc_config; 67 68 newapi::Transport* send_transport; 69 70 // VoiceEngine used for audio/video synchronization for this Call. 71 VoiceEngine* voice_engine; 72 73 // Callback for overuse and normal usage based on the jitter of incoming 74 // captured frames. 'NULL' disables the callback. 75 OveruseCallback* overuse_callback; 76 }; 77 78 static Call* Create(const Call::Config& config); 79 80 static Call* Create(const Call::Config& config, 81 const webrtc::Config& webrtc_config); 82 83 virtual VideoSendStream::Config GetDefaultSendConfig() = 0; 84 85 virtual VideoSendStream* CreateVideoSendStream( 86 const VideoSendStream::Config& config, 87 const std::vector<VideoStream>& video_streams, 88 const void* encoder_settings) = 0; 89 90 virtual void DestroyVideoSendStream(VideoSendStream* send_stream) = 0; 91 92 virtual VideoReceiveStream::Config GetDefaultReceiveConfig() = 0; 93 94 virtual VideoReceiveStream* CreateVideoReceiveStream( 95 const VideoReceiveStream::Config& config) = 0; 96 virtual void DestroyVideoReceiveStream( 97 VideoReceiveStream* receive_stream) = 0; 98 99 // All received RTP and RTCP packets for the call should be inserted to this 100 // PacketReceiver. The PacketReceiver pointer is valid as long as the 101 // Call instance exists. 102 virtual PacketReceiver* Receiver() = 0; 103 104 // Returns the estimated total send bandwidth. Note: this can differ from the 105 // actual encoded bitrate. 106 virtual uint32_t SendBitrateEstimate() = 0; 107 108 // Returns the total estimated receive bandwidth for the call. Note: this can 109 // differ from the actual receive bitrate. 110 virtual uint32_t ReceiveBitrateEstimate() = 0; 111 112 virtual ~Call() {} 113}; 114} // namespace webrtc 115 116#endif // WEBRTC_CALL_H_ 117