gpt4 book ai didi

ios - 如何将 FFMPEG AV_CODEC_ID_PCM_S16BE 音频数据馈送到 AudioQueue

转载 作者:行者123 更新时间:2023-12-04 23:29:14 26 4
gpt4 key购买 nike

我将 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 尝试了许多不同的参数。 ,但音频变得无法识别或噪音持续存在。

Here是带有点击声的音频样本,如果有帮助的话。

最佳答案

我不太清楚,但 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com