在iPhone中使用FFMPEG音频转换

在iPhone中使用FFMPEG音频转换,iphone,c,objective-c,ffmpeg,mms,Iphone,C,Objective C,Ffmpeg,Mms,我在iPhone中使用ffmpeg,从mms服务器读取wma流,但我想使用ffmpeg中的ALAC编码器将流保存到m4a文件,问题是试图保存原始流,即使用avcodec\U decode\U AUDIO 2处理的流,该文件甚至无法识别wma格式,而且显然无法播放,因此,在将流转换为m4a(使用avcodec_encode_audio)之前,我希望确保流正在正确处理和保存。有人做过这种事吗?谢谢 另外,我正在使用CFWriteStreamWrite编写字节缓冲区,一切似乎都正常 我的代码: whi

我在iPhone中使用ffmpeg,从mms服务器读取wma流,但我想使用ffmpeg中的ALAC编码器将流保存到m4a文件,问题是试图保存原始流,即使用avcodec\U decode\U AUDIO 2处理的流,该文件甚至无法识别wma格式,而且显然无法播放,因此,在将流转换为m4a(使用avcodec_encode_audio)之前,我希望确保流正在正确处理和保存。有人做过这种事吗?谢谢

另外,我正在使用CFWriteStreamWrite编写字节缓冲区,一切似乎都正常

我的代码:

while (av_read_frame(mms_IOCtx, &_packet) >= 0) {
 if (_packet.stream_index == audioStreamIdx) {
     uint8_t *_packetData = _packet.data;
     int _packetSize = _packet.size;

     // Align output buffer
     uint8_t audio_buf[(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2 + 16];
     int16_t *aligned_buffer;
     size_t buffer_size;
     int audio_size, len;
     buffer_size = sizeof(audio_buf);
     aligned_buffer = align16(audio_buf, &buffer_size);

     while (currentState != STATE_CLOSED && (_packetSize > 0)) {
         audio_size = buffer_size;
         len = avcodec_decode_audio2(mms_CodecCtx, aligned_buffer, &audio_size, _packetData, _packetSize);
         // call to the method that write the bytes ....
     }
 }

}解码后,它不再是WMA流,而是原始音频流。如果你想写WMA流,你应该在解码前写出数据。

是的,我知道,但我甚至尝试将流“原样”保存为一个文件,并且不被识别为WMA,还使用原始音频将其转换为m4a。出现了一些问题,因为不被识别为m4a文件。WMA文件不仅仅是一个流。有一些头和其他东西是字符串本身外部的。没错,我认为对av_write_头的调用(mms_IOCtx);方法,谢谢谢洛。你能播放WMA流媒体电台吗?请让我知道。为什么在解码后使用CFWriteStreamWrite?你是说avcodec\U decode\U AUDIO 2无法工作?对吗?