1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

RTC: Support hijack the plaintext RTP packet

This commit is contained in:
winlin 2020-05-22 18:44:32 +08:00
parent 2bd0e1ce43
commit 64eb22b95d
2 changed files with 16 additions and 6 deletions

View file

@ -1121,6 +1121,12 @@ srs_error_t SrsRtcPublisher::initialize(uint32_t vssrc, uint32_t assrc, uint8_t
source->set_rtc_publisher(this); source->set_rtc_publisher(this);
if (_srs_rtc_hijacker) {
if ((err = _srs_rtc_hijacker->on_start_publish(session_, this, req)) != srs_success) {
return srs_error_wrap(err, "on start publish");
}
}
return err; return err;
} }
@ -1416,10 +1422,12 @@ srs_error_t SrsRtcPublisher::on_rtp(char* data, int nb_data)
// For source to consume packet. // For source to consume packet.
uint32_t ssrc = pkt->header.get_ssrc(); uint32_t ssrc = pkt->header.get_ssrc();
if (ssrc == audio_ssrc) { if (ssrc == audio_ssrc) {
pkt->frame_type = SrsFrameTypeAudio;
if ((err = on_audio(pkt)) != srs_success) { if ((err = on_audio(pkt)) != srs_success) {
return srs_error_wrap(err, "on audio"); return srs_error_wrap(err, "on audio");
} }
} else if (ssrc == video_ssrc) { } else if (ssrc == video_ssrc) {
pkt->frame_type = SrsFrameTypeVideo;
if ((err = on_video(pkt)) != srs_success) { if ((err = on_video(pkt)) != srs_success) {
return srs_error_wrap(err, "on video"); return srs_error_wrap(err, "on video");
} }
@ -1432,6 +1440,12 @@ srs_error_t SrsRtcPublisher::on_rtp(char* data, int nb_data)
return srs_error_wrap(err, "on nack"); return srs_error_wrap(err, "on nack");
} }
if (_srs_rtc_hijacker) {
if ((err = _srs_rtc_hijacker->on_rtp_packet(session_, this, req, pkt->copy())) != srs_success) {
return srs_error_wrap(err, "on rtp packet");
}
}
return err; return err;
} }
@ -2232,12 +2246,6 @@ srs_error_t SrsRtcSession::start_publish()
return srs_error_wrap(err, "rtc publisher init"); return srs_error_wrap(err, "rtc publisher init");
} }
if (_srs_rtc_hijacker) {
if ((err = _srs_rtc_hijacker->on_start_publish(this, publisher_, req)) != srs_success) {
return srs_error_wrap(err, "on start publish");
}
}
return err; return err;
} }

View file

@ -399,6 +399,8 @@ public:
public: public:
// When start publisher by RTC. // When start publisher by RTC.
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.
virtual srs_error_t on_rtp_packet(SrsRtcSession* session, SrsRtcPublisher* publisher, SrsRequest* req, SrsRtpPacket2* pkt) = 0;
}; };
extern ISrsRtcHijacker* _srs_rtc_hijacker; extern ISrsRtcHijacker* _srs_rtc_hijacker;