|
|
|
@ -1170,13 +1170,13 @@ void SrsRtcDummyBridger::on_unpublish()
|
|
|
|
|
|
|
|
|
|
SrsCodecPayload::SrsCodecPayload()
|
|
|
|
|
{
|
|
|
|
|
pt_ = 0;
|
|
|
|
|
pt_of_publisher_ = pt_ = 0;
|
|
|
|
|
sample_ = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SrsCodecPayload::SrsCodecPayload(uint8_t pt, std::string encode_name, int sample)
|
|
|
|
|
{
|
|
|
|
|
pt_ = pt;
|
|
|
|
|
pt_of_publisher_ = pt_ = pt;
|
|
|
|
|
name_ = encode_name;
|
|
|
|
|
sample_ = sample;
|
|
|
|
|
}
|
|
|
|
@ -1191,6 +1191,7 @@ SrsCodecPayload* SrsCodecPayload::copy()
|
|
|
|
|
|
|
|
|
|
cp->type_ = type_;
|
|
|
|
|
cp->pt_ = pt_;
|
|
|
|
|
cp->pt_of_publisher_ = cp->pt_of_publisher_;
|
|
|
|
|
cp->name_ = name_;
|
|
|
|
|
cp->sample_ = sample_;
|
|
|
|
|
cp->rtcp_fbs_ = rtcp_fbs_;
|
|
|
|
@ -1941,11 +1942,6 @@ std::string SrsRtcSendTrack::get_track_id()
|
|
|
|
|
return track_desc_->id_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int SrsRtcSendTrack::get_track_media_pt()
|
|
|
|
|
{
|
|
|
|
|
return track_desc_->media_->pt_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SrsRtcSendTrack::on_recv_nack()
|
|
|
|
|
{
|
|
|
|
|
SrsRtcTrackStatistic* statistic = statistic_;
|
|
|
|
@ -1972,6 +1968,17 @@ srs_error_t SrsRtcAudioSendTrack::on_rtp(SrsRtpPacket2* pkt, SrsRtcPlayStreamSta
|
|
|
|
|
|
|
|
|
|
pkt->header.set_ssrc(track_desc_->ssrc_);
|
|
|
|
|
|
|
|
|
|
// Should update PT, because subscriber may use different PT to publisher.
|
|
|
|
|
if (track_desc_->media_ && pkt->header.get_payload_type() == track_desc_->media_->pt_of_publisher_) {
|
|
|
|
|
// If PT is media from publisher, change to PT of media for subscriber.
|
|
|
|
|
pkt->header.set_payload_type(track_desc_->media_->pt_);
|
|
|
|
|
} else if (track_desc_->red_ && pkt->header.get_payload_type() == track_desc_->red_->pt_of_publisher_) {
|
|
|
|
|
// If PT is RED from publisher, change to PT of RED for subscriber.
|
|
|
|
|
pkt->header.set_payload_type(track_desc_->red_->pt_);
|
|
|
|
|
} else {
|
|
|
|
|
// TODO: FIXME: Should update PT for RTX.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Put rtp packet to NACK/ARQ queue
|
|
|
|
|
if (true) {
|
|
|
|
|
SrsRtpPacket2* nack = pkt->copy();
|
|
|
|
@ -2028,6 +2035,17 @@ srs_error_t SrsRtcVideoSendTrack::on_rtp(SrsRtpPacket2* pkt, SrsRtcPlayStreamSta
|
|
|
|
|
|
|
|
|
|
pkt->header.set_ssrc(track_desc_->ssrc_);
|
|
|
|
|
|
|
|
|
|
// Should update PT, because subscriber may use different PT to publisher.
|
|
|
|
|
if (track_desc_->media_ && pkt->header.get_payload_type() == track_desc_->media_->pt_of_publisher_) {
|
|
|
|
|
// If PT is media from publisher, change to PT of media for subscriber.
|
|
|
|
|
pkt->header.set_payload_type(track_desc_->media_->pt_);
|
|
|
|
|
} else if (track_desc_->red_ && pkt->header.get_payload_type() == track_desc_->red_->pt_of_publisher_) {
|
|
|
|
|
// If PT is RED from publisher, change to PT of RED for subscriber.
|
|
|
|
|
pkt->header.set_payload_type(track_desc_->red_->pt_);
|
|
|
|
|
} else {
|
|
|
|
|
// TODO: FIXME: Should update PT for RTX.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Put rtp packet to NACK/ARQ queue
|
|
|
|
|
if (true) {
|
|
|
|
|
SrsRtpPacket2* nack = pkt->copy();
|
|
|
|
|