mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
RTC: Refactor code.
This commit is contained in:
parent
70d51ffc5b
commit
8ca793593d
5 changed files with 32 additions and 13 deletions
|
@ -1031,7 +1031,7 @@ srs_error_t SrsRtcPlayer::on_rtcp_ps_feedback(char* buf, int nb_buf)
|
||||||
|
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case kPLI: {
|
case kPLI: {
|
||||||
SrsRtcPublisher* publisher = session_->source_->rtc_publisher();
|
ISrsRtcPublisher* publisher = session_->source_->rtc_publisher();
|
||||||
if (publisher) {
|
if (publisher) {
|
||||||
publisher->request_keyframe();
|
publisher->request_keyframe();
|
||||||
srs_trace("RTC request PLI");
|
srs_trace("RTC request PLI");
|
||||||
|
@ -1088,10 +1088,9 @@ SrsRtcPublisher::SrsRtcPublisher(SrsRtcSession* session)
|
||||||
|
|
||||||
SrsRtcPublisher::~SrsRtcPublisher()
|
SrsRtcPublisher::~SrsRtcPublisher()
|
||||||
{
|
{
|
||||||
source->set_rtc_publisher(NULL);
|
|
||||||
|
|
||||||
// TODO: FIXME: Do unpublish when session timeout.
|
// TODO: FIXME: Do unpublish when session timeout.
|
||||||
if (source) {
|
if (source) {
|
||||||
|
source->set_rtc_publisher(NULL);
|
||||||
source->on_unpublish();
|
source->on_unpublish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include <srs_kernel_rtc_rtp.hpp>
|
#include <srs_kernel_rtc_rtp.hpp>
|
||||||
#include <srs_kernel_rtc_rtcp.hpp>
|
#include <srs_kernel_rtc_rtcp.hpp>
|
||||||
#include <srs_app_rtc_queue.hpp>
|
#include <srs_app_rtc_queue.hpp>
|
||||||
|
#include <srs_app_rtc_source.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
@ -248,7 +249,7 @@ private:
|
||||||
srs_error_t on_rtcp_rr(char* data, int nb_data);
|
srs_error_t on_rtcp_rr(char* data, int nb_data);
|
||||||
};
|
};
|
||||||
|
|
||||||
class SrsRtcPublisher : virtual public ISrsHourGlass, virtual public ISrsRtpPacketDecodeHandler
|
class SrsRtcPublisher : virtual public ISrsHourGlass, virtual public ISrsRtpPacketDecodeHandler, virtual public ISrsRtcPublisher
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
SrsHourGlass* report_timer;
|
SrsHourGlass* report_timer;
|
||||||
|
|
|
@ -232,6 +232,14 @@ SrsRtcSource* SrsRtcSourceManager::fetch(SrsRequest* r)
|
||||||
|
|
||||||
SrsRtcSourceManager* _srs_rtc_sources = new SrsRtcSourceManager();
|
SrsRtcSourceManager* _srs_rtc_sources = new SrsRtcSourceManager();
|
||||||
|
|
||||||
|
ISrsRtcPublisher::ISrsRtcPublisher()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ISrsRtcPublisher::~ISrsRtcPublisher()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
SrsRtcSource::SrsRtcSource()
|
SrsRtcSource::SrsRtcSource()
|
||||||
{
|
{
|
||||||
_source_id = _pre_source_id = -1;
|
_source_id = _pre_source_id = -1;
|
||||||
|
@ -382,12 +390,12 @@ void SrsRtcSource::on_unpublish()
|
||||||
// TODO: FIXME: Handle by statistic.
|
// TODO: FIXME: Handle by statistic.
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsRtcPublisher* SrsRtcSource::rtc_publisher()
|
ISrsRtcPublisher* SrsRtcSource::rtc_publisher()
|
||||||
{
|
{
|
||||||
return rtc_publisher_;
|
return rtc_publisher_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SrsRtcSource::set_rtc_publisher(SrsRtcPublisher* v)
|
void SrsRtcSource::set_rtc_publisher(ISrsRtcPublisher* v)
|
||||||
{
|
{
|
||||||
rtc_publisher_ = v;
|
rtc_publisher_ = v;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,6 @@
|
||||||
class SrsRequest;
|
class SrsRequest;
|
||||||
class SrsConnection;
|
class SrsConnection;
|
||||||
class SrsMetaCache;
|
class SrsMetaCache;
|
||||||
class SrsRtcPublisher;
|
|
||||||
class SrsSharedPtrMessage;
|
class SrsSharedPtrMessage;
|
||||||
class SrsCommonMessage;
|
class SrsCommonMessage;
|
||||||
class SrsMessageArray;
|
class SrsMessageArray;
|
||||||
|
@ -94,6 +93,15 @@ private:
|
||||||
// Global singleton instance.
|
// Global singleton instance.
|
||||||
extern SrsRtcSourceManager* _srs_rtc_sources;
|
extern SrsRtcSourceManager* _srs_rtc_sources;
|
||||||
|
|
||||||
|
class ISrsRtcPublisher
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ISrsRtcPublisher();
|
||||||
|
virtual ~ISrsRtcPublisher();
|
||||||
|
public:
|
||||||
|
virtual void request_keyframe() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
class SrsRtcSource
|
class SrsRtcSource
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
@ -105,7 +113,7 @@ private:
|
||||||
// previous source id.
|
// previous source id.
|
||||||
int _pre_source_id;
|
int _pre_source_id;
|
||||||
SrsRequest* req;
|
SrsRequest* req;
|
||||||
SrsRtcPublisher* rtc_publisher_;
|
ISrsRtcPublisher* rtc_publisher_;
|
||||||
// Transmux RTMP to RTC.
|
// Transmux RTMP to RTC.
|
||||||
SrsRtcFromRtmpBridger* bridger_;
|
SrsRtcFromRtmpBridger* bridger_;
|
||||||
private:
|
private:
|
||||||
|
@ -145,8 +153,8 @@ public:
|
||||||
virtual void on_unpublish();
|
virtual void on_unpublish();
|
||||||
public:
|
public:
|
||||||
// Get and set the publisher, passed to consumer to process requests such as PLI.
|
// Get and set the publisher, passed to consumer to process requests such as PLI.
|
||||||
SrsRtcPublisher* rtc_publisher();
|
ISrsRtcPublisher* rtc_publisher();
|
||||||
void set_rtc_publisher(SrsRtcPublisher* v);
|
void set_rtc_publisher(ISrsRtcPublisher* v);
|
||||||
// Consume the shared RTP packet, user must free it.
|
// Consume the shared RTP packet, user must free it.
|
||||||
srs_error_t on_rtp(SrsRtpPacket2* pkt);
|
srs_error_t on_rtp(SrsRtpPacket2* pkt);
|
||||||
};
|
};
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include <srs_kernel_log.hpp>
|
#include <srs_kernel_log.hpp>
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <algorithm>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
SrsCoroutineManager::SrsCoroutineManager()
|
SrsCoroutineManager::SrsCoroutineManager()
|
||||||
|
@ -72,7 +73,9 @@ srs_error_t SrsCoroutineManager::cycle()
|
||||||
|
|
||||||
void SrsCoroutineManager::remove(ISrsConnection* c)
|
void SrsCoroutineManager::remove(ISrsConnection* c)
|
||||||
{
|
{
|
||||||
|
if (::find(conns.begin(), conns.end(), c) == conns.end()) {
|
||||||
conns.push_back(c);
|
conns.push_back(c);
|
||||||
|
}
|
||||||
srs_cond_signal(cond);
|
srs_cond_signal(cond);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,8 +83,8 @@ void SrsCoroutineManager::clear()
|
||||||
{
|
{
|
||||||
// To prevent thread switch when delete connection,
|
// To prevent thread switch when delete connection,
|
||||||
// we copy all connections then free one by one.
|
// we copy all connections then free one by one.
|
||||||
vector<ISrsConnection*> copy = conns;
|
vector<ISrsConnection*> copy;
|
||||||
conns.clear();
|
copy.swap(conns);
|
||||||
|
|
||||||
vector<ISrsConnection*>::iterator it;
|
vector<ISrsConnection*>::iterator it;
|
||||||
for (it = copy.begin(); it != copy.end(); ++it) {
|
for (it = copy.begin(); it != copy.end(); ++it) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue