From e85a8f277e3146352da283ca1679ac64793d0361 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Fri, 24 Apr 2020 15:08:28 +0800 Subject: [PATCH] =?UTF-8?q?RTMP=E5=8D=8F=E8=AE=AE=E9=99=90=E5=88=B6G711?= =?UTF-8?q?=E8=A7=84=E6=A0=BC=E3=80=81=E6=97=A5=E5=BF=97=E6=89=93=E5=8D=B0?= =?UTF-8?q?codec=E7=9B=B8=E5=85=B3=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Common/MediaSource.cpp | 31 +++++++++++++++++++++++++++++-- src/Rtmp/RtmpMuxer.cpp | 22 ++++++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/Common/MediaSource.cpp b/src/Common/MediaSource.cpp index e2b4aee1..00f4bd60 100644 --- a/src/Common/MediaSource.cpp +++ b/src/Common/MediaSource.cpp @@ -293,7 +293,34 @@ void MediaSource::regist() { lock_guard lock(g_mtxMediaSrc); g_mapMediaSrc[_strSchema][_strVhost][_strApp][_strId] = shared_from_this(); } - InfoL << _strSchema << " " << _strVhost << " " << _strApp << " " << _strId; + _StrPrinter codec_info; + auto tracks = getTracks(true); + for(auto &track : tracks) { + auto codec_type = track->getTrackType(); + codec_info << track->getCodecName(); + switch (codec_type) { + case TrackAudio : { + auto audio_track = dynamic_pointer_cast(track); + codec_info << "[" + << audio_track->getAudioSampleRate() << "/" + << audio_track->getAudioChannel() << "/" + << audio_track->getAudioSampleBit() << "] "; + break; + } + case TrackVideo : { + auto video_track = dynamic_pointer_cast(track); + codec_info << "[" + << video_track->getVideoWidth() << "/" + << video_track->getVideoHeight() << "/" + << (int) video_track->getVideoFps() << "] "; + break; + } + default: + break; + } + } + + InfoL << _strSchema << " " << _strVhost << " " << _strApp << " " << _strId << " " << codec_info; NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastMediaChanged, true, *this); } @@ -319,7 +346,7 @@ bool MediaSource::unregist() { } if(ret){ - InfoL << "" << _strSchema << " " << _strVhost << " " << _strApp << " " << _strId; + InfoL << _strSchema << " " << _strVhost << " " << _strApp << " " << _strId; NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastMediaChanged, false, *this); } return ret; diff --git a/src/Rtmp/RtmpMuxer.cpp b/src/Rtmp/RtmpMuxer.cpp index 5f935df1..2547642e 100644 --- a/src/Rtmp/RtmpMuxer.cpp +++ b/src/Rtmp/RtmpMuxer.cpp @@ -39,6 +39,28 @@ void RtmpMuxer::addTrack(const Track::Ptr &track) { } + switch (track->getCodecId()){ + case CodecG711A: + case CodecG711U:{ + auto audio_track = dynamic_pointer_cast(track); + if(!audio_track){ + return; + } + if (audio_track->getAudioSampleRate() != 8000 || + audio_track->getAudioChannel() != 1 || + audio_track->getAudioSampleBit() != 16) { + WarnL << "RTMP只支持8000/1/16规格的G711,目前规格是:" + << audio_track->getAudioSampleRate() << "/" + << audio_track->getAudioChannel() << "/" + << audio_track->getAudioSampleBit() + << ",该音频已被忽略"; + return; + } + break; + } + default : break; + } + auto &encoder = _encoder[track->getTrackType()]; //生成rtmp编码器,克隆该Track,防止循环引用 encoder = Factory::getRtmpCodecByTrack(track->clone());