2

iOSでWMAファイルをMP3に変換したいです。AVFrameそして、ここでサンプル コードを学習することで、WMA ストリームを正常に解析でき ましたAVFrame、そして私はこのようなコードを試しましたが、うまくいきません:

AVCodecContext *outCodecContext = NULL;
AVCodec *pCodec = avcodec_find_decoder(AV_CODEC_ID_MP3);
if(pCodec == NULL){
    fprintf(stderr, "out avcodec_find_decoder error\n");
    exit(1);
}

AVCodecContext *pCodecCtx = avcodec_alloc_context3(pCodec);

if(pCodecCtx == NULL){
    fprintf(stderr, "out avcodec_alloc_context3 error\n");
    exit(1);
}

if(avcodec_open2(pCodecCtx, pCodec, NULL) < 0){
    fprintf(stderr, "out avcodec_open error\n");
    exit(1);
}
outCodecContext = pCodecCtx;


do{
    AVPacket packet;
    if(av_read_frame(pFormatCtx, &packet) < 0){
        break;
    }

    int got_frame_ptr;

    if(packet.stream_index==videoStream)
    {   
        avcodec_decode_audio4(pCodecCtx, pFrame, &got_frame_ptr, &packet);
        if(got_frame_ptr)
        {
            AVPacket outPacket;
            int out_got_packet_ptr;
            avcodec_encode_audio2(outCodecContext, &outPacket, pFrame, &out_got_packet_ptr);

            [finalData appendBytes:outPacket.data length:outPacket.size];
            NSLog(@"finalData len: %d", [finalData length]);
        }
    }
    av_free_packet(&packet);

}while(true);

NSString *svfp = [getAppDocumentDirectory() stringByAppendingPathComponent:@"finalData"];
[finalData writeToFile:svfp atomically:YES];

コンソールに常にメッセージが表示されます。

[mp3 @ 0xa393200] nb_samples (12288) != frame_size (0) (avcodec_encode_audio2)

誰でも助けることができますか?ありがとう。

4

1 に答える 1

0

あなたはswr_convertを試すことができます このコードは参考用です

swr_convert(_swrContext,
                            outbuf,
                            _audioFrame->nb_samples * ratio,
                            (const uint8_t **)_audioFrame->data,
                            _audioFrame->nb_samples);
于 2014-01-24T13:12:32.150 に答える