1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-02-13 11:51:57 +00:00

RTC: Support hijack play and consuming

This commit is contained in:
winlin 2020-05-24 21:40:23 +08:00
parent a5265c5753
commit f501d5b63d
2 changed files with 17 additions and 0 deletions

View file

@ -536,6 +536,12 @@ srs_error_t SrsRtcPlayer::initialize(const uint32_t& vssrc, const uint32_t& assr
srs_trace("RTC publisher video(ssrc=%d, pt=%d), audio(ssrc=%d, pt=%d), nack=%d", srs_trace("RTC publisher video(ssrc=%d, pt=%d), audio(ssrc=%d, pt=%d), nack=%d",
video_ssrc, video_payload_type, audio_ssrc, audio_payload_type, nack_enabled_); video_ssrc, video_payload_type, audio_ssrc, audio_payload_type, nack_enabled_);
if (_srs_rtc_hijacker) {
if ((err = _srs_rtc_hijacker->on_start_play(session_, this, session_->req)) != srs_success) {
return srs_error_wrap(err, "on start play");
}
}
return err; return err;
} }
@ -628,6 +634,12 @@ srs_error_t SrsRtcPlayer::cycle()
vector<SrsRtpPacket2*> pkts; vector<SrsRtpPacket2*> pkts;
SrsRtcOutgoingInfo info; SrsRtcOutgoingInfo info;
if (_srs_rtc_hijacker) {
if ((err = _srs_rtc_hijacker->on_start_consume(session_, this, session_->req, consumer)) != srs_success) {
return srs_error_wrap(err, "on start consuming");
}
}
while (true) { while (true) {
if ((err = trd->pull()) != srs_success) { if ((err = trd->pull()) != srs_success) {
return srs_error_wrap(err, "rtc sender thread"); return srs_error_wrap(err, "rtc sender thread");

View file

@ -57,6 +57,7 @@ class ISrsCodec;
class SrsRtpNackForReceiver; class SrsRtpNackForReceiver;
class SrsRtpIncommingVideoFrame; class SrsRtpIncommingVideoFrame;
class SrsRtpRingBuffer; class SrsRtpRingBuffer;
class SrsRtcConsumer;
const uint8_t kSR = 200; const uint8_t kSR = 200;
const uint8_t kRR = 201; const uint8_t kRR = 201;
@ -401,6 +402,10 @@ public:
virtual srs_error_t on_start_publish(SrsRtcSession* session, SrsRtcPublisher* publisher, SrsRequest* req) = 0; virtual srs_error_t on_start_publish(SrsRtcSession* session, SrsRtcPublisher* publisher, SrsRequest* req) = 0;
// When got RTP plaintext packet. // When got RTP plaintext packet.
virtual srs_error_t on_rtp_packet(SrsRtcSession* session, SrsRtcPublisher* publisher, SrsRequest* req, SrsRtpPacket2* pkt) = 0; virtual srs_error_t on_rtp_packet(SrsRtcSession* session, SrsRtcPublisher* publisher, SrsRequest* req, SrsRtpPacket2* pkt) = 0;
// When start player by RTC.
virtual srs_error_t on_start_play(SrsRtcSession* session, SrsRtcPlayer* player, SrsRequest* req) = 0;
// When start consuming for player for RTC.
virtual srs_error_t on_start_consume(SrsRtcSession* session, SrsRtcPlayer* player, SrsRequest* req, SrsRtcConsumer* consumer) = 0;
}; };
extern ISrsRtcHijacker* _srs_rtc_hijacker; extern ISrsRtcHijacker* _srs_rtc_hijacker;