作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将 FFMPEG 与 FFmpegAudioPlayer 结合使用做直播。我遇到的问题是,虽然可以解码和播放音频,但当其他应用程序流式传输相同的源时,音频中不存在持续的点击/尖叫噪音。所以我猜这个问题是由于我如何处理 FFMPEG AV_CODEC_ID_PCM_S16BE
将音频数据交给 AudioQueue 之前:
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kAudioFormatFlagsCanonical;//kAudioFormatFlagIsBigEndian|kAudioFormatFlagIsAlignedHigh;
audioFormat.mSampleRate = pAudioCodecCtx->sample_rate;
audioFormat.mBitsPerChannel = 8*av_get_bytes_per_sample(AV_SAMPLE_FMT_S16);
audioFormat.mChannelsPerFrame = pAudioCodecCtx->channels;
audioFormat.mBytesPerFrame = pAudioCodecCtx->channels * av_get_bytes_per_sample(AV_SAMPLE_FMT_S16);
audioFormat.mBytesPerPacket= pAudioCodecCtx->channels * av_get_bytes_per_sample(AV_SAMPLE_FMT_S16);
audioFormat.mFramesPerPacket = 1;
audioFormat.mReserved = 0;
pSwrCtx = swr_alloc_set_opts(pSwrCtx,
1,//pAudioCodecCtx->channel_layout,
AV_SAMPLE_FMT_S16,
pAudioCodecCtx->sample_rate,
1,//pAudioCodecCtx->channel_layout,
AV_SAMPLE_FMT_S16,
pAudioCodecCtx->sample_rate,
0,
0);
outCount = swr_convert(pSwrCtx,
(uint8_t **)(&pOut),
in_samples,
(const uint8_t **)pAVFrame1->extended_data,
in_samples);
swr_alloc_set_opts
尝试了许多不同的参数。 ,但音频变得无法识别或噪音持续存在。
最佳答案
我不太清楚,但 s16be 是整数(16 位),而 kAudioFormatLinearPCM 是浮点数(32 位)。
如果我在你的立场,我将只使用 s16be 和 kAudioFormatLinearPCM 格式,这意味着修复 AudioCodecCtx->channels * av_get_bytes_per_sample(AV_SAMPLE_FMT_S16)
和别的。
然后在ffmpeg -> iOS数据流之间插入PCM格式转换步骤。
这篇文章看起来很有帮助:iOS Core Audio : Converting between kAudioFormatFlagsCanonical and kAudioFormatFlagsAudioUnitCanonical
关于ios - 如何将 FFMPEG AV_CODEC_ID_PCM_S16BE 音频数据馈送到 AudioQueue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26499668/
我是一名优秀的程序员,十分优秀!