From 6eb10afca2fc229932932066258ac3e52ad2d3b9 Mon Sep 17 00:00:00 2001 From: johzzy Date: Mon, 21 Nov 2022 22:01:01 +0800 Subject: [PATCH] WebRTC: Fix no audio and video issue for Firefox. (#3079) * Remove extern SrsPps* duplicate declarations * fix(rtmp2rtc): fix video payload type for rtmp to rtc bridge (#3041) * Revert changes not belongs to this PR. * Fix naming issue, follow SRS style. * Use srs_assert instead of assert. * Fix firefox no audio issue. Co-authored-by: winlin --- trunk/src/app/srs_app_rtc_source.cpp | 17 +++++++++++------ trunk/src/app/srs_app_rtc_source.hpp | 2 ++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/trunk/src/app/srs_app_rtc_source.cpp b/trunk/src/app/srs_app_rtc_source.cpp index 5595322f2..0c760ccd2 100644 --- a/trunk/src/app/srs_app_rtc_source.cpp +++ b/trunk/src/app/srs_app_rtc_source.cpp @@ -710,6 +710,7 @@ srs_error_t SrsRtcSource::on_timer(srs_utime_t interval) } #ifdef SRS_FFMPEG_FIT + SrsRtcFromRtmpBridge::SrsRtcFromRtmpBridge(SrsRtcSource* source) { req = NULL; @@ -729,6 +730,8 @@ SrsRtcFromRtmpBridge::SrsRtcFromRtmpBridge(SrsRtcSource* source) if (!descs.empty()) { audio_ssrc = descs.at(0)->ssrc_; } + // Note we must use the PT of source, see https://github.com/ossrs/srs/pull/3079 + audio_payload_type_ = descs.empty() ? kAudioPayloadType : descs.front()->media_->pt_; } // video track ssrc @@ -737,6 +740,8 @@ SrsRtcFromRtmpBridge::SrsRtcFromRtmpBridge(SrsRtcSource* source) if (!descs.empty()) { video_ssrc = descs.at(0)->ssrc_; } + // Note we must use the PT of source, see https://github.com/ossrs/srs/pull/3079 + video_payload_type_ = descs.empty() ? kVideoPayloadType : descs.front()->media_->pt_; } } @@ -910,7 +915,7 @@ srs_error_t SrsRtcFromRtmpBridge::package_opus(SrsAudioFrame* audio, SrsRtpPacke { srs_error_t err = srs_success; - pkt->header.set_payload_type(kAudioPayloadType); + pkt->header.set_payload_type(audio_payload_type_); pkt->header.set_ssrc(audio_ssrc); pkt->frame_type = SrsFrameTypeAudio; pkt->header.set_marker(true); @@ -1054,7 +1059,7 @@ srs_error_t SrsRtcFromRtmpBridge::package_stap_a(SrsRtcSource* source, SrsShared return srs_error_new(ERROR_RTC_RTP_MUXER, "sps/pps empty"); } - pkt->header.set_payload_type(kVideoPayloadType); + pkt->header.set_payload_type(video_payload_type_); pkt->header.set_ssrc(video_ssrc); pkt->frame_type = SrsFrameTypeVideo; pkt->nalu_type = (SrsAvcNaluType)kStapA; @@ -1136,7 +1141,7 @@ srs_error_t SrsRtcFromRtmpBridge::package_nalus(SrsSharedPtrMessage* msg, const SrsRtpPacket* pkt = new SrsRtpPacket(); pkts.push_back(pkt); - pkt->header.set_payload_type(kVideoPayloadType); + pkt->header.set_payload_type(video_payload_type_); pkt->header.set_ssrc(video_ssrc); pkt->frame_type = SrsFrameTypeVideo; pkt->nalu_type = (SrsAvcNaluType)first_nalu_type; @@ -1170,7 +1175,7 @@ srs_error_t SrsRtcFromRtmpBridge::package_nalus(SrsSharedPtrMessage* msg, const SrsRtpPacket* pkt = new SrsRtpPacket(); pkts.push_back(pkt); - pkt->header.set_payload_type(kVideoPayloadType); + pkt->header.set_payload_type(video_payload_type_); pkt->header.set_ssrc(video_ssrc); pkt->frame_type = SrsFrameTypeVideo; pkt->nalu_type = (SrsAvcNaluType)kFuA; @@ -1200,7 +1205,7 @@ srs_error_t SrsRtcFromRtmpBridge::package_single_nalu(SrsSharedPtrMessage* msg, SrsRtpPacket* pkt = new SrsRtpPacket(); pkts.push_back(pkt); - pkt->header.set_payload_type(kVideoPayloadType); + pkt->header.set_payload_type(video_payload_type_); pkt->header.set_ssrc(video_ssrc); pkt->frame_type = SrsFrameTypeVideo; pkt->header.set_sequence(video_sequence++); @@ -1233,7 +1238,7 @@ srs_error_t SrsRtcFromRtmpBridge::package_fu_a(SrsSharedPtrMessage* msg, SrsSamp SrsRtpPacket* pkt = new SrsRtpPacket(); pkts.push_back(pkt); - pkt->header.set_payload_type(kVideoPayloadType); + pkt->header.set_payload_type(video_payload_type_); pkt->header.set_ssrc(video_ssrc); pkt->frame_type = SrsFrameTypeVideo; pkt->header.set_sequence(video_sequence++); diff --git a/trunk/src/app/srs_app_rtc_source.hpp b/trunk/src/app/srs_app_rtc_source.hpp index c7eb647ec..d7ec8dc07 100644 --- a/trunk/src/app/srs_app_rtc_source.hpp +++ b/trunk/src/app/srs_app_rtc_source.hpp @@ -261,6 +261,8 @@ private: uint16_t video_sequence; uint32_t audio_ssrc; uint32_t video_ssrc; + uint8_t audio_payload_type_; + uint8_t video_payload_type_; public: SrsRtcFromRtmpBridge(SrsRtcSource* source); virtual ~SrsRtcFromRtmpBridge();