mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
RTC: Refine config, aac to rtmp_to_rtc, bframe to keep_bframe. v4.0.174
This commit is contained in:
parent
fe9e43b6d4
commit
71ed6e5dc5
16 changed files with 94 additions and 52 deletions
|
@ -707,8 +707,8 @@ SrsRtcFromRtmpBridger::SrsRtcFromRtmpBridger(SrsRtcSource* source)
|
|||
source_ = source;
|
||||
format = new SrsRtmpFormat();
|
||||
codec_ = new SrsAudioTranscoder();
|
||||
discard_aac = false;
|
||||
discard_bframe = false;
|
||||
rtmp_to_rtc = false;
|
||||
keep_bframe = false;
|
||||
merge_nalus = false;
|
||||
meta = new SrsMetaCache();
|
||||
audio_sequence = 0;
|
||||
|
@ -743,22 +743,24 @@ srs_error_t SrsRtcFromRtmpBridger::initialize(SrsRequest* r)
|
|||
srs_error_t err = srs_success;
|
||||
|
||||
req = r;
|
||||
rtmp_to_rtc = _srs_config->get_rtc_from_rtmp(req->vhost);
|
||||
|
||||
if ((err = format->initialize()) != srs_success) {
|
||||
return srs_error_wrap(err, "format initialize");
|
||||
if (rtmp_to_rtc) {
|
||||
if ((err = format->initialize()) != srs_success) {
|
||||
return srs_error_wrap(err, "format initialize");
|
||||
}
|
||||
|
||||
int bitrate = 48000; // The output bitrate in bps.
|
||||
if ((err = codec_->initialize(SrsAudioCodecIdAAC, SrsAudioCodecIdOpus, kAudioChannel, kAudioSamplerate,
|
||||
bitrate)) != srs_success) {
|
||||
return srs_error_wrap(err, "init codec");
|
||||
}
|
||||
}
|
||||
|
||||
int bitrate = 48000; // The output bitrate in bps.
|
||||
if ((err = codec_->initialize(SrsAudioCodecIdAAC, SrsAudioCodecIdOpus, kAudioChannel, kAudioSamplerate, bitrate)) != srs_success) {
|
||||
return srs_error_wrap(err, "init codec");
|
||||
}
|
||||
|
||||
// TODO: FIXME: Support reload.
|
||||
discard_aac = _srs_config->get_rtc_aac_discard(req->vhost);
|
||||
discard_bframe = _srs_config->get_rtc_bframe_discard(req->vhost);
|
||||
keep_bframe = _srs_config->get_rtc_keep_bframe(req->vhost);
|
||||
merge_nalus = _srs_config->get_rtc_server_merge_nalus();
|
||||
srs_trace("RTC bridge from RTMP, discard_aac=%d, discard_bframe=%d, merge_nalus=%d",
|
||||
discard_aac, discard_bframe, merge_nalus);
|
||||
srs_trace("RTC bridge from RTMP, rtmp2rtc=%d, keep_bframe=%d, merge_nalus=%d",
|
||||
rtmp_to_rtc, keep_bframe, merge_nalus);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
@ -767,6 +769,10 @@ srs_error_t SrsRtcFromRtmpBridger::on_publish()
|
|||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
if (!rtmp_to_rtc) {
|
||||
return err;
|
||||
}
|
||||
|
||||
// TODO: FIXME: Should sync with bridger?
|
||||
if ((err = source_->on_publish()) != srs_success) {
|
||||
return srs_error_wrap(err, "source publish");
|
||||
|
@ -781,6 +787,10 @@ srs_error_t SrsRtcFromRtmpBridger::on_publish()
|
|||
|
||||
void SrsRtcFromRtmpBridger::on_unpublish()
|
||||
{
|
||||
if (!rtmp_to_rtc) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Reset the metadata cache, to make VLC happy when disable/enable stream.
|
||||
// @see https://github.com/ossrs/srs/issues/1630#issuecomment-597979448
|
||||
meta->update_previous_vsh();
|
||||
|
@ -795,6 +805,10 @@ srs_error_t SrsRtcFromRtmpBridger::on_audio(SrsSharedPtrMessage* msg)
|
|||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
if (!rtmp_to_rtc) {
|
||||
return err;
|
||||
}
|
||||
|
||||
// TODO: FIXME: Support parsing OPUS for RTC.
|
||||
if ((err = format->on_audio(msg)) != srs_success) {
|
||||
return srs_error_wrap(err, "format consume audio");
|
||||
|
@ -813,7 +827,7 @@ srs_error_t SrsRtcFromRtmpBridger::on_audio(SrsSharedPtrMessage* msg)
|
|||
}
|
||||
|
||||
// When drop aac audio packet, never transcode.
|
||||
if (discard_aac && acodec == SrsAudioCodecIdAAC) {
|
||||
if (acodec != SrsAudioCodecIdAAC) {
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -905,6 +919,10 @@ srs_error_t SrsRtcFromRtmpBridger::on_video(SrsSharedPtrMessage* msg)
|
|||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
if (!rtmp_to_rtc) {
|
||||
return err;
|
||||
}
|
||||
|
||||
// cache the sequence header if h264
|
||||
bool is_sequence_header = SrsFlvVideo::sh(msg->payload, msg->size);
|
||||
if (is_sequence_header && (err = meta->update_vsh(msg)) != srs_success) {
|
||||
|
@ -993,7 +1011,7 @@ srs_error_t SrsRtcFromRtmpBridger::filter(SrsSharedPtrMessage* msg, SrsFormat* f
|
|||
|
||||
// Because RTC does not support B-frame, so we will drop them.
|
||||
// TODO: Drop B-frame in better way, which not cause picture corruption.
|
||||
if (discard_bframe) {
|
||||
if (!keep_bframe) {
|
||||
if ((err = sample->parse_bframe()) != srs_success) {
|
||||
return srs_error_wrap(err, "parse bframe");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue