|
@@ -160,7 +160,7 @@ static uint32_t BindPCMAudioData(uint32_t uBufferLen, char* pLocalAudios, uint32
|
|
|
memset(pLocalAudios, 0, uBufferLen);
|
|
|
}
|
|
|
|
|
|
- for (int i = 0; i < uLocalAudioLen / uBitDeepth; i++) {
|
|
|
+ for (uint32_t i = 0; i < uLocalAudioLen / uBitDeepth; i++) {
|
|
|
if (eLocalLeft == eType) {
|
|
|
memcpy((uint32_t*)pLocalAudios + i, ((uint16_t*)(pBuffer)) + i, uBitDeepth);
|
|
|
uint16_t* pindex = (uint16_t*)((uint32_t*)pLocalAudios + i) + 1;
|
|
@@ -205,9 +205,9 @@ static uint32_t ConstructStereoAudioData(uint32_t uBufferLen, char* pAudiosBuffe
|
|
|
}
|
|
|
|
|
|
|
|
|
-static size_t Get8KOutPutBitRate(int iChannels, eAudioOutPutType eType)
|
|
|
+static uint32_t Get8KOutPutBitRate(int iChannels, eAudioOutPutType eType)
|
|
|
{
|
|
|
- size_t uOutBitRate = 16 * 8;
|
|
|
+ uint32_t uOutBitRate = 16 * 8;
|
|
|
if (1 == iChannels) {
|
|
|
if (eUltraHD == eType) {
|
|
|
uOutBitRate = 1000 * 8;
|
|
@@ -237,9 +237,9 @@ static size_t Get8KOutPutBitRate(int iChannels, eAudioOutPutType eType)
|
|
|
}
|
|
|
|
|
|
|
|
|
-static size_t Get16KOutPutBitRate(int iChannels, eAudioOutPutType eType)
|
|
|
+static uint32_t Get16KOutPutBitRate(int iChannels, eAudioOutPutType eType)
|
|
|
{
|
|
|
- size_t uOutBitRate = 1000 * 8;
|
|
|
+ uint32_t uOutBitRate = 1000 * 8;
|
|
|
if (1 == iChannels) {
|
|
|
if (eUltraHD == eType) {
|
|
|
uOutBitRate = 2000 * 8;
|
|
@@ -266,9 +266,9 @@ static size_t Get16KOutPutBitRate(int iChannels, eAudioOutPutType eType)
|
|
|
}
|
|
|
|
|
|
|
|
|
-static size_t Get32KOutPutBitRate(int iChannels, eAudioOutPutType eType)
|
|
|
+static uint32_t Get32KOutPutBitRate(int iChannels, eAudioOutPutType eType)
|
|
|
{
|
|
|
- size_t uOutBitRate = 1000 * 8;
|
|
|
+ uint32_t uOutBitRate = 1000 * 8;
|
|
|
if (1 == iChannels) {
|
|
|
if (eUltraHD == eType) {
|
|
|
uOutBitRate = 2500 * 8;
|
|
@@ -289,9 +289,9 @@ static size_t Get32KOutPutBitRate(int iChannels, eAudioOutPutType eType)
|
|
|
}
|
|
|
|
|
|
|
|
|
-static size_t Get44KOutPutBitRate(int iChannels, eAudioOutPutType eType)
|
|
|
+static uint32_t Get44KOutPutBitRate(int iChannels, eAudioOutPutType eType)
|
|
|
{
|
|
|
- size_t uOutBitRate = 2000 * 8;
|
|
|
+ uint32_t uOutBitRate = 2000 * 8;
|
|
|
if (1 == iChannels) {
|
|
|
if (eUltraHD == eType) {
|
|
|
uOutBitRate = 6000 * 8;
|
|
@@ -318,9 +318,9 @@ static size_t Get44KOutPutBitRate(int iChannels, eAudioOutPutType eType)
|
|
|
}
|
|
|
|
|
|
|
|
|
-static size_t Get48KOutPutBitRate(int iChannels, eAudioOutPutType eType)
|
|
|
+static uint32_t Get48KOutPutBitRate(int iChannels, eAudioOutPutType eType)
|
|
|
{
|
|
|
- size_t uOutBitRate = 24000 * 8;
|
|
|
+ uint32_t uOutBitRate = 24000 * 8;
|
|
|
if (eUltraHD == eType) {
|
|
|
uOutBitRate = 24000 * 8;
|
|
|
}
|
|
@@ -337,9 +337,9 @@ static size_t Get48KOutPutBitRate(int iChannels, eAudioOutPutType eType)
|
|
|
}
|
|
|
|
|
|
|
|
|
-static size_t GetAudioOutPutBitRate(int iInPutSamperate, int iChannels, eAudioOutPutType eType)
|
|
|
+static uint32_t GetAudioOutPutBitRate(int iInPutSamperate, int iChannels, eAudioOutPutType eType)
|
|
|
{
|
|
|
- size_t uOutBitRate = 8000;
|
|
|
+ uint32_t uOutBitRate = 8000;
|
|
|
|
|
|
switch (iInPutSamperate)
|
|
|
{
|
|
@@ -443,6 +443,8 @@ libvideorecord_impl::libvideorecord_impl(bool* pResult, CHostApi* pHostAPI, cons
|
|
|
|
|
|
m_pFFmpegWriter = NULL;
|
|
|
m_pAudioNsObj = NULL;
|
|
|
+ m_bMuteAudio = false;
|
|
|
+
|
|
|
*pResult = true;
|
|
|
}
|
|
|
|
|
@@ -1072,7 +1074,7 @@ int libvideorecord_impl::GetSingleCameraVideoFrameData(videoq_frame* Video, int
|
|
|
|
|
|
//获取env摄像头数据失败返回-1
|
|
|
//获取opt摄像头数据失败返回-2
|
|
|
-//获取env摄像头数据失败返回-3
|
|
|
+//获取远端视频数据失败返回-3
|
|
|
int libvideorecord_impl::GetStand2SVideoFrameData(videoq_frame* Video, int flags, const bool bSwitchCam, int iInitCam, eRvcRecordType eRecordType)
|
|
|
{
|
|
|
if (!m_remote_videoqueue) {
|
|
@@ -1081,7 +1083,6 @@ int libvideorecord_impl::GetStand2SVideoFrameData(videoq_frame* Video, int flags
|
|
|
}
|
|
|
//将大机摄像头和远端视频拼接到一张画布中
|
|
|
memset(Video->data, 0, Video->framesize);
|
|
|
-
|
|
|
bool bRslt = false;
|
|
|
int width = 0;
|
|
|
int height = 0;
|
|
@@ -1739,6 +1740,7 @@ bool libvideorecord_impl::StartVideoRecord(int fps, int videoquality, eVideoForm
|
|
|
m_iNsPolicy = pAudioParam->iNsPolicy;
|
|
|
m_bIsAudioTransOn = pAudioParam->bIsTransOn;
|
|
|
m_iAudioChannels = pAudioParam->iAudioChannels;
|
|
|
+ m_bMuteAudio = pAudioParam->bMuteAudioMode;
|
|
|
|
|
|
m_audioqueue = m_local_audioqueue;
|
|
|
if (m_sales_audioqueue && (eSingleSide == m_eRecordType || eStand2Agent == m_eRecordType)) //当大机进行双录拼接时使用本地音频队列会出现抢占导致取音频失败,此处选择使用销售音频队列
|
|
@@ -2016,7 +2018,7 @@ bool libvideorecord_impl::GetLocalAudioFrame(int iAudioLens)
|
|
|
|
|
|
bool libvideorecord_impl::GetSingleSideAudioFrame()
|
|
|
{
|
|
|
- bool bRet = true;
|
|
|
+ bool bRet = false;
|
|
|
//取音频数据,合并成1s的音频
|
|
|
int nAudioLens = m_audioqueue->GetAudioLens();
|
|
|
if (nAudioLens > 0) {
|
|
@@ -2050,14 +2052,35 @@ bool libvideorecord_impl::AddMuteAudioFrame(bool bLocal, int iAudioFrameSize)
|
|
|
memset(m_pRecordAudioBuffer + m_iAudioBufferLen, 0, iAudioFrameSize);
|
|
|
m_iAudioBufferLen += iAudioFrameSize;
|
|
|
m_iAudioFromQueNum++;
|
|
|
- m_pHostApi->Debug(RECORD_LOG_INFO, "m_iAudioFromQueNum is %d(Mute AudioFrame).", m_iAudioFromQueNum);
|
|
|
+ if (0 == m_iAudioFromQueNum % 100) {
|
|
|
+ m_pHostApi->Debug(RECORD_LOG_DEBUG, "m_iAudioFromQueNum is %d(Mute AudioFrame).", m_iAudioFromQueNum);
|
|
|
+ }
|
|
|
bRet = true;
|
|
|
}
|
|
|
else {
|
|
|
memset(m_pRemoteAudioBuffer + m_iRemoteAudioBufLen, 0, iAudioFrameSize);
|
|
|
m_iRemoteAudioBufLen += iAudioFrameSize;
|
|
|
m_iRemoteAudioNum++;
|
|
|
- m_pHostApi->Debug(RECORD_LOG_INFO, "m_iRemoteAudioNum is %d(Mute Audio Frame).", m_iRemoteAudioNum);
|
|
|
+ if (0 == m_iRemoteAudioNum % 100) {
|
|
|
+ m_pHostApi->Debug(RECORD_LOG_DEBUG, "m_iRemoteAudioNum is %d(Mute Audio Frame).", m_iRemoteAudioNum);
|
|
|
+ }
|
|
|
+ bRet = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return bRet;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+bool libvideorecord_impl::InitDefaultAudioParams(audio_frame* paudio)
|
|
|
+{
|
|
|
+ bool bRet = false;
|
|
|
+ if (NULL != paudio) {
|
|
|
+ paudio->samplespersec = 8000;
|
|
|
+ paudio->framesize = 320;
|
|
|
+ paudio->nchannels = 1;
|
|
|
+ paudio->format = 1;
|
|
|
+ paudio->bitspersample = 16;
|
|
|
+ paudio->iseriesnumber = 0;
|
|
|
bRet = true;
|
|
|
}
|
|
|
|
|
@@ -2069,7 +2092,12 @@ bool libvideorecord_impl::GetRecordAudioFrame()
|
|
|
bool bRet = false;
|
|
|
//单向只录制本地音频
|
|
|
if (eSingleSide == m_eRecordType) {
|
|
|
- bRet = GetSingleSideAudioFrame();
|
|
|
+ if (false == m_bMuteAudio) {
|
|
|
+ bRet = GetSingleSideAudioFrame();
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ bRet = AddMuteAudioFrame(true, m_iAudioPerSecBufLen / 50);
|
|
|
+ }
|
|
|
}
|
|
|
else{
|
|
|
//取音频数据,合并成1秒的音频
|
|
@@ -2149,12 +2177,18 @@ bool libvideorecord_impl::InitVideoRecordParams()
|
|
|
return bRet;
|
|
|
}
|
|
|
|
|
|
- //获取音频帧大小
|
|
|
- if (!GetRecordAudioFrameSize()) {
|
|
|
- if (false == m_bStopRecord) {
|
|
|
- LogFailedEvent(eLocalAudioGetFailed, "Get Audio Frame Failed Max Times.", true);
|
|
|
+ // 静音模式录像
|
|
|
+ if (m_bMuteAudio) {
|
|
|
+ m_iAudioFrameSize = 320;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ //获取音频帧大小
|
|
|
+ if (!GetRecordAudioFrameSize()) {
|
|
|
+ if (false == m_bStopRecord) {
|
|
|
+ LogFailedEvent(eLocalAudioGetFailed, "Get Audio Frame Failed Max Times.", true);
|
|
|
+ }
|
|
|
+ return bRet;
|
|
|
}
|
|
|
- return bRet;
|
|
|
}
|
|
|
|
|
|
//初始化视频buffer
|
|
@@ -2162,10 +2196,16 @@ bool libvideorecord_impl::InitVideoRecordParams()
|
|
|
|
|
|
//获取音频参数
|
|
|
audio_frame* audio = new audio_frame;
|
|
|
- if (!GetRecordAudioParams(&audio)) {
|
|
|
- RECORD_SAFE_DELETE(audio);
|
|
|
- LogFailedEvent(eLocalAudioGetFailed, "Get Audio Frame Data Failed Max Times.", true);
|
|
|
- return bRet;
|
|
|
+ // 静音模式录像
|
|
|
+ if (m_bMuteAudio) {
|
|
|
+ InitDefaultAudioParams(audio);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if (!GetRecordAudioParams(&audio)) {
|
|
|
+ RECORD_SAFE_DELETE(audio);
|
|
|
+ LogFailedEvent(eLocalAudioGetFailed, "Get Audio Frame Data Failed Max Times.", true);
|
|
|
+ return bRet;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
CalcuRecordAudioParams(audio);
|