0

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

PS 我正在使用 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 ....
     }
 }

}

4

1 回答 1

0

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

于 2010-06-24T18:04:27.820 回答