in nlsCppSdk/encoder/nlsEncoder.cpp [81:150]
int NlsEncoder::createNlsEncoder(ENCODER_TYPE type, int channels,
const int sampleRate, int *errorCode) {
int ret = Success;
int tmpCode = 0;
int channel_num = channels;
if (channel_num < 0) {
channel_num = DEFAULT_CHANNELS;
}
if (nlsEncoder_ != NULL) {
LOG_WARN("nlsEncoder_ is existent, pls destroy first");
return -(EncoderExistent);
}
if (type == ENCODER_OPU) {
nlsEncoder_ = opus_encoder_create(sampleRate, channel_num,
OPUS_APPLICATION_VOIP, &tmpCode);
if (nlsEncoder_) {
opus_encoder_ctl(
(OpusEncoder *)nlsEncoder_,
OPUS_SET_VBR(
1)); /* 动态码率:OPUS_SET_VBR(1), 固定码率 : OPUS_SET_VBR(0) */
opus_encoder_ctl(
(OpusEncoder *)nlsEncoder_,
OPUS_SET_BITRATE(
27800)); /* 指定opus编码码率, 比特率从 6kb / s 到 510 kb / s,
想要压缩比大一些就设置码率小一点 */
opus_encoder_ctl((OpusEncoder *)nlsEncoder_,
OPUS_SET_COMPLEXITY(8)); /* 计算复杂度 */
opus_encoder_ctl(
(OpusEncoder *)nlsEncoder_,
OPUS_SET_SIGNAL(OPUS_SIGNAL_VOICE)); /* 设置针对语音优化 */
encoder_type_ = type;
ret = Success;
LOG_DEBUG("opus_encoder_create for OPU mode success");
} else {
LOG_ERROR("encoder create failed");
nlsEncoder_ = NULL;
ret = -(OpusEncoderCreateFailed);
}
*errorCode = tmpCode;
} else if (type == ENCODER_OPUS) {
#ifdef ENABLE_OGGOPUS
nlsEncoder_ = new OggOpusDataEncoder();
if (nlsEncoder_ == NULL) {
LOG_ERROR("nlsEncoder_ new OggOpusDataEncoder failed");
return -(OggOpusEncoderCreateFailed);
}
ret = (static_cast<OggOpusDataEncoder *>(nlsEncoder_))
->OggopusEncoderCreate(oggopusEncodedData, this, sampleRate);
if (ret == Success) {
/* 这里暂时未开放编码码率和计算复杂度的设置 */
(static_cast<OggOpusDataEncoder *>(nlsEncoder_))->SetBitrate(27800);
(static_cast<OggOpusDataEncoder *>(nlsEncoder_))
->SetSampleRate(sampleRate);
(static_cast<OggOpusDataEncoder *>(nlsEncoder_))->SetComplexity(8);
LOG_DEBUG("OggopusEncoderCreate for OPUS mode success");
} else {
LOG_ERROR("OggopusEncoderCreate failed, errorcode:%d", ret);
}
#endif
encoder_type_ = type;
}
return ret;
}