OLD | NEW |
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 505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
516 enum DtmfFlags { | 516 enum DtmfFlags { |
517 DF_PLAY = 0x01, | 517 DF_PLAY = 0x01, |
518 DF_SEND = 0x02, | 518 DF_SEND = 0x02, |
519 }; | 519 }; |
520 | 520 |
521 class MediaChannel : public sigslot::has_slots<> { | 521 class MediaChannel : public sigslot::has_slots<> { |
522 public: | 522 public: |
523 class NetworkInterface { | 523 class NetworkInterface { |
524 public: | 524 public: |
525 enum SocketType { ST_RTP, ST_RTCP }; | 525 enum SocketType { ST_RTP, ST_RTCP }; |
526 virtual bool SendPacket( | 526 virtual bool SendPacket(rtc::Buffer* packet, |
527 rtc::Buffer* packet, | 527 const rtc::PacketOptions& options) = 0; |
528 rtc::DiffServCodePoint dscp = rtc::DSCP_NO_CHANGE) = 0; | 528 virtual bool SendRtcp(rtc::Buffer* packet, |
529 virtual bool SendRtcp( | 529 const rtc::PacketOptions& options) = 0; |
530 rtc::Buffer* packet, | |
531 rtc::DiffServCodePoint dscp = rtc::DSCP_NO_CHANGE) = 0; | |
532 virtual int SetOption(SocketType type, rtc::Socket::Option opt, | 530 virtual int SetOption(SocketType type, rtc::Socket::Option opt, |
533 int option) = 0; | 531 int option) = 0; |
534 virtual ~NetworkInterface() {} | 532 virtual ~NetworkInterface() {} |
535 }; | 533 }; |
536 | 534 |
537 MediaChannel() : network_interface_(NULL) {} | 535 MediaChannel() : network_interface_(NULL) {} |
538 virtual ~MediaChannel() {} | 536 virtual ~MediaChannel() {} |
539 | 537 |
540 // Sets the abstract interface class for sending RTP/RTCP data. | 538 // Sets the abstract interface class for sending RTP/RTCP data. |
541 virtual void SetInterface(NetworkInterface *iface) { | 539 virtual void SetInterface(NetworkInterface *iface) { |
542 rtc::CritScope cs(&network_interface_crit_); | 540 rtc::CritScope cs(&network_interface_crit_); |
543 network_interface_ = iface; | 541 network_interface_ = iface; |
544 } | 542 } |
545 | 543 |
546 // Called when a RTP packet is received. | 544 // Called when a RTP packet is received. |
547 virtual void OnPacketReceived(rtc::Buffer* packet, | 545 virtual void OnPacketReceived(rtc::Buffer* packet, |
548 const rtc::PacketTime& packet_time) = 0; | 546 const rtc::PacketTime& packet_time) = 0; |
549 // Called when a RTCP packet is received. | 547 // Called when a RTCP packet is received. |
550 virtual void OnRtcpReceived(rtc::Buffer* packet, | 548 virtual void OnRtcpReceived(rtc::Buffer* packet, |
551 const rtc::PacketTime& packet_time) = 0; | 549 const rtc::PacketTime& packet_time) = 0; |
| 550 virtual void OnSentPacket(const rtc::SentPacket& sent_packet) {} |
552 // Called when the socket's ability to send has changed. | 551 // Called when the socket's ability to send has changed. |
553 virtual void OnReadyToSend(bool ready) = 0; | 552 virtual void OnReadyToSend(bool ready) = 0; |
554 // Creates a new outgoing media stream with SSRCs and CNAME as described | 553 // Creates a new outgoing media stream with SSRCs and CNAME as described |
555 // by sp. | 554 // by sp. |
556 virtual bool AddSendStream(const StreamParams& sp) = 0; | 555 virtual bool AddSendStream(const StreamParams& sp) = 0; |
557 // Removes an outgoing media stream. | 556 // Removes an outgoing media stream. |
558 // ssrc must be the first SSRC of the media stream if the stream uses | 557 // ssrc must be the first SSRC of the media stream if the stream uses |
559 // multiple SSRCs. | 558 // multiple SSRCs. |
560 virtual bool RemoveSendStream(uint32 ssrc) = 0; | 559 virtual bool RemoveSendStream(uint32 ssrc) = 0; |
561 // Creates a new incoming media stream with SSRCs and CNAME as described | 560 // Creates a new incoming media stream with SSRCs and CNAME as described |
562 // by sp. | 561 // by sp. |
563 virtual bool AddRecvStream(const StreamParams& sp) = 0; | 562 virtual bool AddRecvStream(const StreamParams& sp) = 0; |
564 // Removes an incoming media stream. | 563 // Removes an incoming media stream. |
565 // ssrc must be the first SSRC of the media stream if the stream uses | 564 // ssrc must be the first SSRC of the media stream if the stream uses |
566 // multiple SSRCs. | 565 // multiple SSRCs. |
567 virtual bool RemoveRecvStream(uint32 ssrc) = 0; | 566 virtual bool RemoveRecvStream(uint32 ssrc) = 0; |
568 | 567 |
569 // Returns the absoulte sendtime extension id value from media channel. | 568 // Returns the absoulte sendtime extension id value from media channel. |
570 virtual int GetRtpSendTimeExtnId() const { | 569 virtual int GetRtpSendTimeExtnId() const { |
571 return -1; | 570 return -1; |
572 } | 571 } |
573 | 572 |
574 // Base method to send packet using NetworkInterface. | 573 // Base method to send packet using NetworkInterface. |
575 bool SendPacket(rtc::Buffer* packet) { | 574 bool SendPacket(rtc::Buffer* packet, const rtc::PacketOptions& options) { |
576 return DoSendPacket(packet, false); | 575 return DoSendPacket(packet, false, options); |
577 } | 576 } |
578 | 577 |
579 bool SendRtcp(rtc::Buffer* packet) { | 578 bool SendRtcp(rtc::Buffer* packet, const rtc::PacketOptions& options) { |
580 return DoSendPacket(packet, true); | 579 return DoSendPacket(packet, true, options); |
581 } | 580 } |
582 | 581 |
583 int SetOption(NetworkInterface::SocketType type, | 582 int SetOption(NetworkInterface::SocketType type, |
584 rtc::Socket::Option opt, | 583 rtc::Socket::Option opt, |
585 int option) { | 584 int option) { |
586 rtc::CritScope cs(&network_interface_crit_); | 585 rtc::CritScope cs(&network_interface_crit_); |
587 if (!network_interface_) | 586 if (!network_interface_) |
588 return -1; | 587 return -1; |
589 | 588 |
590 return network_interface_->SetOption(type, opt, option); | 589 return network_interface_->SetOption(type, opt, option); |
591 } | 590 } |
592 | 591 |
593 protected: | 592 protected: |
594 // This method sets DSCP |value| on both RTP and RTCP channels. | 593 // This method sets DSCP |value| on both RTP and RTCP channels. |
595 int SetDscp(rtc::DiffServCodePoint value) { | 594 int SetDscp(rtc::DiffServCodePoint value) { |
596 int ret; | 595 int ret; |
597 ret = SetOption(NetworkInterface::ST_RTP, | 596 ret = SetOption(NetworkInterface::ST_RTP, |
598 rtc::Socket::OPT_DSCP, | 597 rtc::Socket::OPT_DSCP, |
599 value); | 598 value); |
600 if (ret == 0) { | 599 if (ret == 0) { |
601 ret = SetOption(NetworkInterface::ST_RTCP, | 600 ret = SetOption(NetworkInterface::ST_RTCP, |
602 rtc::Socket::OPT_DSCP, | 601 rtc::Socket::OPT_DSCP, |
603 value); | 602 value); |
604 } | 603 } |
605 return ret; | 604 return ret; |
606 } | 605 } |
607 | 606 |
608 private: | 607 private: |
609 bool DoSendPacket(rtc::Buffer* packet, bool rtcp) { | 608 bool DoSendPacket(rtc::Buffer* packet, |
| 609 bool rtcp, |
| 610 const rtc::PacketOptions& options) { |
610 rtc::CritScope cs(&network_interface_crit_); | 611 rtc::CritScope cs(&network_interface_crit_); |
611 if (!network_interface_) | 612 if (!network_interface_) |
612 return false; | 613 return false; |
613 | 614 |
614 return (!rtcp) ? network_interface_->SendPacket(packet) : | 615 return (!rtcp) ? network_interface_->SendPacket(packet, options) |
615 network_interface_->SendRtcp(packet); | 616 : network_interface_->SendRtcp(packet, options); |
616 } | 617 } |
617 | 618 |
618 // |network_interface_| can be accessed from the worker_thread and | 619 // |network_interface_| can be accessed from the worker_thread and |
619 // from any MediaEngine threads. This critical section is to protect accessing | 620 // from any MediaEngine threads. This critical section is to protect accessing |
620 // of network_interface_ object. | 621 // of network_interface_ object. |
621 rtc::CriticalSection network_interface_crit_; | 622 rtc::CriticalSection network_interface_crit_; |
622 NetworkInterface* network_interface_; | 623 NetworkInterface* network_interface_; |
623 }; | 624 }; |
624 | 625 |
625 enum SendFlags { | 626 enum SendFlags { |
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1275 // Signal when the media channel is ready to send the stream. Arguments are: | 1276 // Signal when the media channel is ready to send the stream. Arguments are: |
1276 // writable(bool) | 1277 // writable(bool) |
1277 sigslot::signal1<bool> SignalReadyToSend; | 1278 sigslot::signal1<bool> SignalReadyToSend; |
1278 // Signal for notifying that the remote side has closed the DataChannel. | 1279 // Signal for notifying that the remote side has closed the DataChannel. |
1279 sigslot::signal1<uint32> SignalStreamClosedRemotely; | 1280 sigslot::signal1<uint32> SignalStreamClosedRemotely; |
1280 }; | 1281 }; |
1281 | 1282 |
1282 } // namespace cricket | 1283 } // namespace cricket |
1283 | 1284 |
1284 #endif // TALK_MEDIA_BASE_MEDIACHANNEL_H_ | 1285 #endif // TALK_MEDIA_BASE_MEDIACHANNEL_H_ |
OLD | NEW |