Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(465)

Side by Side Diff: talk/session/media/channel.h

Issue 1363573002: Wire up transport sequence number / send time callbacks to webrtc via libjingle. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: No changes to const parameters. Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2004 Google Inc. 3 * Copyright 2004 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 #include "talk/session/media/mediamonitor.h" 45 #include "talk/session/media/mediamonitor.h"
46 #include "talk/session/media/mediasession.h" 46 #include "talk/session/media/mediasession.h"
47 #include "talk/session/media/rtcpmuxfilter.h" 47 #include "talk/session/media/rtcpmuxfilter.h"
48 #include "talk/session/media/srtpfilter.h" 48 #include "talk/session/media/srtpfilter.h"
49 #include "webrtc/base/asyncudpsocket.h" 49 #include "webrtc/base/asyncudpsocket.h"
50 #include "webrtc/base/criticalsection.h" 50 #include "webrtc/base/criticalsection.h"
51 #include "webrtc/base/network.h" 51 #include "webrtc/base/network.h"
52 #include "webrtc/base/sigslot.h" 52 #include "webrtc/base/sigslot.h"
53 #include "webrtc/base/window.h" 53 #include "webrtc/base/window.h"
54 54
55 namespace webrtc {
56 class MediaControllerInterface;
57 } // namespace webrtc
58
55 namespace cricket { 59 namespace cricket {
56 60
57 struct CryptoParams; 61 struct CryptoParams;
58 class MediaContentDescription; 62 class MediaContentDescription;
59 struct ViewRequest; 63 struct ViewRequest;
60 64
61 enum SinkType { 65 enum SinkType {
62 SINK_PRE_CRYPTO, // Sink packets before encryption or after decryption. 66 SINK_PRE_CRYPTO, // Sink packets before encryption or after decryption.
63 SINK_POST_CRYPTO // Sink packets after encryption or before decryption. 67 SINK_POST_CRYPTO // Sink packets after encryption or before decryption.
64 }; 68 };
65 69
66 // BaseChannel contains logic common to voice and video, including 70 // BaseChannel contains logic common to voice and video, including
67 // enable, marshaling calls to a worker thread, and 71 // enable, marshaling calls to a worker thread, and
68 // connection and media monitors. 72 // connection and media monitors.
69 // 73 //
70 // WARNING! SUBCLASSES MUST CALL Deinit() IN THEIR DESTRUCTORS! 74 // WARNING! SUBCLASSES MUST CALL Deinit() IN THEIR DESTRUCTORS!
71 // This is required to avoid a data race between the destructor modifying the 75 // This is required to avoid a data race between the destructor modifying the
72 // vtable, and the media channel's thread using BaseChannel as the 76 // vtable, and the media channel's thread using BaseChannel as the
73 // NetworkInterface. 77 // NetworkInterface.
74 78
75 class BaseChannel 79 class BaseChannel
76 : public rtc::MessageHandler, public sigslot::has_slots<>, 80 : public rtc::MessageHandler, public sigslot::has_slots<>,
77 public MediaChannel::NetworkInterface, 81 public MediaChannel::NetworkInterface,
78 public ConnectionStatsGetter { 82 public ConnectionStatsGetter {
79 public: 83 public:
80 BaseChannel(rtc::Thread* thread, 84 BaseChannel(rtc::Thread* thread,
81 MediaChannel* channel, 85 MediaChannel* channel,
86 webrtc::MediaControllerInterface* media_controller,
82 TransportController* transport_controller, 87 TransportController* transport_controller,
83 const std::string& content_name, 88 const std::string& content_name,
84 bool rtcp); 89 bool rtcp);
85 virtual ~BaseChannel(); 90 virtual ~BaseChannel();
86 bool Init(); 91 bool Init();
87 // Deinit may be called multiple times and is simply ignored if it's alreay 92 // Deinit may be called multiple times and is simply ignored if it's alreay
88 // done. 93 // done.
89 void Deinit(); 94 void Deinit();
90 95
91 rtc::Thread* worker_thread() const { return worker_thread_; } 96 rtc::Thread* worker_thread() const { return worker_thread_; }
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 } 197 }
193 bool rtcp_transport_enabled() const { return rtcp_transport_enabled_; } 198 bool rtcp_transport_enabled() const { return rtcp_transport_enabled_; }
194 199
195 void ConnectToTransportChannel(TransportChannel* tc); 200 void ConnectToTransportChannel(TransportChannel* tc);
196 void DisconnectFromTransportChannel(TransportChannel* tc); 201 void DisconnectFromTransportChannel(TransportChannel* tc);
197 202
198 void FlushRtcpMessages(); 203 void FlushRtcpMessages();
199 204
200 // NetworkInterface implementation, called by MediaEngine 205 // NetworkInterface implementation, called by MediaEngine
201 virtual bool SendPacket(rtc::Buffer* packet, 206 virtual bool SendPacket(rtc::Buffer* packet,
202 rtc::DiffServCodePoint dscp); 207 const rtc::PacketOptions& options);
203 virtual bool SendRtcp(rtc::Buffer* packet, 208 virtual bool SendRtcp(rtc::Buffer* packet, const rtc::PacketOptions& options);
204 rtc::DiffServCodePoint dscp);
205 209
206 // From TransportChannel 210 // From TransportChannel
207 void OnWritableState(TransportChannel* channel); 211 void OnWritableState(TransportChannel* channel);
208 virtual void OnChannelRead(TransportChannel* channel, 212 virtual void OnChannelRead(TransportChannel* channel,
209 const char* data, 213 const char* data,
210 size_t len, 214 size_t len,
211 const rtc::PacketTime& packet_time, 215 const rtc::PacketTime& packet_time,
212 int flags); 216 int flags);
217 void OnPacketSent(TransportChannel* channel,
218 const rtc::SentPacket& sent_packet);
213 void OnReadyToSend(TransportChannel* channel); 219 void OnReadyToSend(TransportChannel* channel);
214 220
215 bool PacketIsRtcp(const TransportChannel* channel, const char* data, 221 bool PacketIsRtcp(const TransportChannel* channel, const char* data,
216 size_t len); 222 size_t len);
217 bool SendPacket(bool rtcp, rtc::Buffer* packet, 223 bool SendPacket(bool rtcp,
218 rtc::DiffServCodePoint dscp); 224 rtc::Buffer* packet,
225 const rtc::PacketOptions& options);
219 virtual bool WantsPacket(bool rtcp, rtc::Buffer* packet); 226 virtual bool WantsPacket(bool rtcp, rtc::Buffer* packet);
220 void HandlePacket(bool rtcp, rtc::Buffer* packet, 227 void HandlePacket(bool rtcp, rtc::Buffer* packet,
221 const rtc::PacketTime& packet_time); 228 const rtc::PacketTime& packet_time);
222 229
223 void EnableMedia_w(); 230 void EnableMedia_w();
224 void DisableMedia_w(); 231 void DisableMedia_w();
225 void UpdateWritableState_w(); 232 void UpdateWritableState_w();
226 void ChannelWritable_w(); 233 void ChannelWritable_w();
227 void ChannelNotWritable_w(); 234 void ChannelNotWritable_w();
228 bool AddRecvStream_w(const StreamParams& sp); 235 bool AddRecvStream_w(const StreamParams& sp);
(...skipping 25 matching lines...) Expand all
254 ContentAction action, 261 ContentAction action,
255 std::string* error_desc) = 0; 262 std::string* error_desc) = 0;
256 bool SetRtpTransportParameters_w(const MediaContentDescription* content, 263 bool SetRtpTransportParameters_w(const MediaContentDescription* content,
257 ContentAction action, 264 ContentAction action,
258 ContentSource src, 265 ContentSource src,
259 std::string* error_desc); 266 std::string* error_desc);
260 267
261 // Helper method to get RTP Absoulute SendTime extension header id if 268 // Helper method to get RTP Absoulute SendTime extension header id if
262 // present in remote supported extensions list. 269 // present in remote supported extensions list.
263 void MaybeCacheRtpAbsSendTimeHeaderExtension( 270 void MaybeCacheRtpAbsSendTimeHeaderExtension(
264 const std::vector<RtpHeaderExtension>& extensions); 271 const std::vector<RtpHeaderExtension>& extensions);
265 272
266 bool CheckSrtpConfig(const std::vector<CryptoParams>& cryptos, 273 bool CheckSrtpConfig(const std::vector<CryptoParams>& cryptos,
267 bool* dtls, 274 bool* dtls,
268 std::string* error_desc); 275 std::string* error_desc);
269 bool SetSrtp_w(const std::vector<CryptoParams>& params, 276 bool SetSrtp_w(const std::vector<CryptoParams>& params,
270 ContentAction action, 277 ContentAction action,
271 ContentSource src, 278 ContentSource src,
272 std::string* error_desc); 279 std::string* error_desc);
273 void ActivateRtcpMux_w(); 280 void ActivateRtcpMux_w();
274 bool SetRtcpMux_w(bool enable, 281 bool SetRtcpMux_w(bool enable,
(...skipping 14 matching lines...) Expand all
289 // Helper function for invoking bool-returning methods on the worker thread. 296 // Helper function for invoking bool-returning methods on the worker thread.
290 template <class FunctorT> 297 template <class FunctorT>
291 bool InvokeOnWorker(const FunctorT& functor) { 298 bool InvokeOnWorker(const FunctorT& functor) {
292 return worker_thread_->Invoke<bool>(functor); 299 return worker_thread_->Invoke<bool>(functor);
293 } 300 }
294 301
295 private: 302 private:
296 rtc::Thread* worker_thread_; 303 rtc::Thread* worker_thread_;
297 TransportController* transport_controller_; 304 TransportController* transport_controller_;
298 MediaChannel* media_channel_; 305 MediaChannel* media_channel_;
306 webrtc::MediaControllerInterface* media_controller_;
299 std::vector<StreamParams> local_streams_; 307 std::vector<StreamParams> local_streams_;
300 std::vector<StreamParams> remote_streams_; 308 std::vector<StreamParams> remote_streams_;
301 309
302 const std::string content_name_; 310 const std::string content_name_;
303 std::string transport_name_; 311 std::string transport_name_;
304 bool rtcp_transport_enabled_; 312 bool rtcp_transport_enabled_;
305 TransportChannel* transport_channel_; 313 TransportChannel* transport_channel_;
306 std::vector<std::pair<rtc::Socket::Option, int> > socket_options_; 314 std::vector<std::pair<rtc::Socket::Option, int> > socket_options_;
307 TransportChannel* rtcp_transport_channel_; 315 TransportChannel* rtcp_transport_channel_;
308 std::vector<std::pair<rtc::Socket::Option, int> > rtcp_socket_options_; 316 std::vector<std::pair<rtc::Socket::Option, int> > rtcp_socket_options_;
309 SrtpFilter srtp_filter_; 317 SrtpFilter srtp_filter_;
310 RtcpMuxFilter rtcp_mux_filter_; 318 RtcpMuxFilter rtcp_mux_filter_;
311 BundleFilter bundle_filter_; 319 BundleFilter bundle_filter_;
312 rtc::scoped_ptr<ConnectionMonitor> connection_monitor_; 320 rtc::scoped_ptr<ConnectionMonitor> connection_monitor_;
313 bool enabled_; 321 bool enabled_;
314 bool writable_; 322 bool writable_;
315 bool rtp_ready_to_send_; 323 bool rtp_ready_to_send_;
316 bool rtcp_ready_to_send_; 324 bool rtcp_ready_to_send_;
317 bool was_ever_writable_; 325 bool was_ever_writable_;
318 MediaContentDirection local_content_direction_; 326 MediaContentDirection local_content_direction_;
319 MediaContentDirection remote_content_direction_; 327 MediaContentDirection remote_content_direction_;
320 bool has_received_packet_; 328 bool has_received_packet_;
321 bool dtls_keyed_; 329 bool dtls_keyed_;
322 bool secure_required_; 330 bool secure_required_;
323 int rtp_abs_sendtime_extn_id_; 331 int rtp_abs_sendtime_extn_id_;
332 int rtp_transport_sequence_number_extn_id_;
324 }; 333 };
325 334
326 // VoiceChannel is a specialization that adds support for early media, DTMF, 335 // VoiceChannel is a specialization that adds support for early media, DTMF,
327 // and input/output level monitoring. 336 // and input/output level monitoring.
328 class VoiceChannel : public BaseChannel { 337 class VoiceChannel : public BaseChannel {
329 public: 338 public:
330 VoiceChannel(rtc::Thread* thread, 339 VoiceChannel(rtc::Thread* thread,
331 MediaEngineInterface* media_engine, 340 MediaEngineInterface* media_engine,
332 VoiceMediaChannel* channel, 341 VoiceMediaChannel* channel,
342 webrtc::MediaControllerInterface* media_controller,
333 TransportController* transport_controller, 343 TransportController* transport_controller,
334 const std::string& content_name, 344 const std::string& content_name,
335 bool rtcp); 345 bool rtcp);
336 ~VoiceChannel(); 346 ~VoiceChannel();
337 bool Init(); 347 bool Init();
338 bool SetRemoteRenderer(uint32 ssrc, AudioRenderer* renderer); 348 bool SetRemoteRenderer(uint32 ssrc, AudioRenderer* renderer);
339 349
340 // Configure sending media on the stream with SSRC |ssrc| 350 // Configure sending media on the stream with SSRC |ssrc|
341 // If there is only one sending stream SSRC 0 can be used. 351 // If there is only one sending stream SSRC 0 can be used.
342 bool SetAudioSend(uint32 ssrc, 352 bool SetAudioSend(uint32 ssrc,
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 // Last AudioRecvParameters sent down to the media_channel() via 435 // Last AudioRecvParameters sent down to the media_channel() via
426 // SetRecvParameters. 436 // SetRecvParameters.
427 AudioRecvParameters last_recv_params_; 437 AudioRecvParameters last_recv_params_;
428 }; 438 };
429 439
430 // VideoChannel is a specialization for video. 440 // VideoChannel is a specialization for video.
431 class VideoChannel : public BaseChannel { 441 class VideoChannel : public BaseChannel {
432 public: 442 public:
433 VideoChannel(rtc::Thread* thread, 443 VideoChannel(rtc::Thread* thread,
434 VideoMediaChannel* channel, 444 VideoMediaChannel* channel,
445 webrtc::MediaControllerInterface* media_controller,
435 TransportController* transport_controller, 446 TransportController* transport_controller,
436 const std::string& content_name, 447 const std::string& content_name,
437 bool rtcp); 448 bool rtcp);
438 ~VideoChannel(); 449 ~VideoChannel();
439 bool Init(); 450 bool Init();
440 451
441 // downcasts a MediaChannel 452 // downcasts a MediaChannel
442 virtual VideoMediaChannel* media_channel() const { 453 virtual VideoMediaChannel* media_channel() const {
443 return static_cast<VideoMediaChannel*>(BaseChannel::media_channel()); 454 return static_cast<VideoMediaChannel*>(BaseChannel::media_channel());
444 } 455 }
(...skipping 19 matching lines...) Expand all
464 SignalConnectionMonitor; 475 SignalConnectionMonitor;
465 476
466 void StartMediaMonitor(int cms); 477 void StartMediaMonitor(int cms);
467 void StopMediaMonitor(); 478 void StopMediaMonitor();
468 sigslot::signal2<VideoChannel*, const VideoMediaInfo&> SignalMediaMonitor; 479 sigslot::signal2<VideoChannel*, const VideoMediaInfo&> SignalMediaMonitor;
469 sigslot::signal2<uint32, rtc::WindowEvent> SignalScreencastWindowEvent; 480 sigslot::signal2<uint32, rtc::WindowEvent> SignalScreencastWindowEvent;
470 481
471 bool SendIntraFrame(); 482 bool SendIntraFrame();
472 bool RequestIntraFrame(); 483 bool RequestIntraFrame();
473 484
474 // Configure sending media on the stream with SSRC |ssrc|
475 // If there is only one sending stream SSRC 0 can be used.
476 bool SetVideoSend(uint32 ssrc, bool enable, const VideoOptions* options); 485 bool SetVideoSend(uint32 ssrc, bool enable, const VideoOptions* options);
477 486
478 private: 487 private:
479 typedef std::map<uint32, VideoCapturer*> ScreencastMap; 488 typedef std::map<uint32, VideoCapturer*> ScreencastMap;
480 struct ScreencastDetailsData; 489 struct ScreencastDetailsData;
481 490
482 // overrides from BaseChannel 491 // overrides from BaseChannel
483 virtual void ChangeState(); 492 virtual void ChangeState();
484 virtual const ContentInfo* GetFirstContent(const SessionDescription* sdesc); 493 virtual const ContentInfo* GetFirstContent(const SessionDescription* sdesc);
485 virtual bool SetLocalContent_w(const MediaContentDescription* content, 494 virtual bool SetLocalContent_w(const MediaContentDescription* content,
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 // SetSendParameters. 649 // SetSendParameters.
641 DataSendParameters last_send_params_; 650 DataSendParameters last_send_params_;
642 // Last DataRecvParameters sent down to the media_channel() via 651 // Last DataRecvParameters sent down to the media_channel() via
643 // SetRecvParameters. 652 // SetRecvParameters.
644 DataRecvParameters last_recv_params_; 653 DataRecvParameters last_recv_params_;
645 }; 654 };
646 655
647 } // namespace cricket 656 } // namespace cricket
648 657
649 #endif // TALK_SESSION_MEDIA_CHANNEL_H_ 658 #endif // TALK_SESSION_MEDIA_CHANNEL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698