From 6e5c587e0a0f820c5ee658921f01540e4c194885 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 20 Apr 2015 11:24:12 +0800 Subject: [PATCH] support aac_adtstoasc filter to copy mode. --- trunk/src/app/srs_app_ffmpeg.cpp | 44 +++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/trunk/src/app/srs_app_ffmpeg.cpp b/trunk/src/app/srs_app_ffmpeg.cpp index 16badcea7..502937c88 100644 --- a/trunk/src/app/srs_app_ffmpeg.cpp +++ b/trunk/src/app/srs_app_ffmpeg.cpp @@ -330,21 +330,21 @@ int SrsFFMPEG::start() } // the codec params is disabled when copy - if (acodec != SRS_RTMP_ENCODER_COPY && acodec != SRS_RTMP_ENCODER_NO_AUDIO) { - params.push_back("-b:a"); - snprintf(tmp, sizeof(tmp), "%d", abitrate * 1000); - params.push_back(tmp); - - params.push_back("-ar"); - snprintf(tmp, sizeof(tmp), "%d", asample_rate); - params.push_back(tmp); - - params.push_back("-ac"); - snprintf(tmp, sizeof(tmp), "%d", achannels); - params.push_back(tmp); - - // aparams - if (!aparams.empty()) { + if (acodec != SRS_RTMP_ENCODER_NO_AUDIO) { + if (acodec != SRS_RTMP_ENCODER_COPY) { + params.push_back("-b:a"); + snprintf(tmp, sizeof(tmp), "%d", abitrate * 1000); + params.push_back(tmp); + + params.push_back("-ar"); + snprintf(tmp, sizeof(tmp), "%d", asample_rate); + params.push_back(tmp); + + params.push_back("-ac"); + snprintf(tmp, sizeof(tmp), "%d", achannels); + params.push_back(tmp); + + // aparams std::vector::iterator it; for (it = aparams.begin(); it != aparams.end(); ++it) { std::string p = *it; @@ -352,6 +352,20 @@ int SrsFFMPEG::start() params.push_back(p); } } + } else { + // for audio copy. + for (int i = 0; i < (int)aparams.size();) { + std::string pn = aparams[i++]; + + // aparams, the adts to asc filter "-bsf:a aac_adtstoasc" + if (pn == "-bsf:a" && i < (int)aparams.size()) { + std::string pv = aparams[i++]; + if (pv == "aac_adtstoasc") { + params.push_back(pn); + params.push_back(pv); + } + } + } } }