Декодирования звука шума на iOS, но на Windows
the input mp3 is single channel with 32000 sample rate, 16bit signed.
Я использую ffmpeg 2.6 для декодирования mp3 на iOS9.3.2 pad. Он получает только белый шум. но он работает на windows.Я записываю декодированный PCM в файл и использовать инструмент, чтобы играть. когда я изменил бит, установленный на 32. Я слышу оригинальный звук с шумом в фоновом режиме и более высокой скоростью воспроизведения. если установить значение 8 бит или 16 бит, то можно услышать только белый шум.
Когда я обновляю ffmpeg до 3.1.1, декодирование не удалось из-за несогласованной конфигурации канала. Я действительно был озадачен, как это могло случиться. Я еще не установил ни одного параметра канала, да это и не нужно.
пожалуйста, помогите мне.
Что я уже пробовал:
У меня есть сравнение входного кадра MP3 и PCM вывод на обе системы.
вход такой же , как я читаю mp3-кадр из mp3-файла, но получаю совершенно другой выход. код, как показано ниже.
int FfmpegAudioDecoder::InitDecoderFFMpeg() { codec_ = avcodec_find_decoder((AVCodecID)param_->codec_id); if (!codec_) { failed_ = true; av_log(0, log_level_, "Unsupported codec!"); return -1; } codec_ctx_ = avcodec_alloc_context3(codec_); if (avcodec_open2(codec_ctx_, codec_, 0) < 0) { failed_ = true; return -1; } if (!decoded_frame_) { if (!(decoded_frame_ = av_frame_alloc())) { av_log(0, log_level_, "Could not allocate audio frame\n"); return -1; } } } <pre>int FfmpegAudioDecoder::DecodeAudio(const WktData * encode_packet , WktData* pcm_packet) { int len = 0; int pkt_size = 0; unsigned char * pkt_data = 0; AVPacket avpkt; avpkt.data = encode_packet->data; avpkt.size = encode_packet->data_length; av_init_packet(&avpkt); int got_frame = 0; pkt_size = avpkt.size; pkt_data = avpkt.data; while (pkt_size > 0) { len = avcodec_decode_audio4(codec_ctx_, decoded_frame_, &got_frame, &avpkt); if (len < 0) { return -1; } /*if (EncodeAudio(decoded_frame) < 0) return -1;*/ /* int data_size = av_get_bytes_per_sample(codec_ctx_->sample_fmt); int i, ch; for (i = 0; i<decoded_frame_->nb_samples; i++) for (ch = 0; ch<codec_ctx_->channels; ch++) fwrite(decoded_frame_->data[ch] + data_size*i, 1, data_size, outfile);*/ pkt_size -= len; pkt_data += len; } return 0; }