2010-06-24 91 views
0

我在iPhone中使用ffmpeg,從mms服務器讀取wma流,但我想使用ffmpeg中的ALAC編碼器將流保存到m4a文件,問題是試圖保存原始流,使用avcodec_decode_audio2處理的流,該文件甚至不能用wma格式識別,顯然,沒有播放,因此在將流轉換爲m4a(使用avcodec_encode_audio)之前,我想確保流是正在處理和保存正確。任何人都有經歷這種事情?謝謝在iPhone中使用FFMPEG音頻轉換

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

}

+0

你好。你能玩WMA流媒體電臺嗎?請告訴我。 – AppAspect 2011-07-13 06:58:39

+0

我可以幫你。 – AppAspect 2011-07-13 06:58:48

+0

爲什麼在解碼後使用CFWriteStreamWrite? – manutd 2011-08-10 15:25:43

回答

0

解碼後,它不再是一個WMA流,這是一個原始音頻流。如果你想寫WMA流,你會在解碼之前寫出數據。

+0

Yeap,我知道,但我甚至嘗試保存流「As-Is」ta文件並且不被識別爲WMA,同樣使用原始音頻將其轉換爲m4a,因爲它不被識別爲m4a文件。 – 2010-06-24 18:33:58

+0

WMA文件不僅僅是一個流。頭部和其他東西都是字符串本身的外部。 – Elfred 2010-06-24 19:09:48

+0

沒錯,我調用了av_write_header(mms_IOCtx);方法,謝謝 – 2010-06-24 19:22:34