gpt4 book ai didi

ios - ffmpeg 在 iOS 中将 wma 转换为 mp3

转载 作者:行者123 更新时间:2023-12-01 16:53:18 25 4
gpt4 key购买 nike

我想在 iOS 中将 WMA 文件转换为 MP3。我已成功将 WMA 流解析为 AVFrame通过在这里学习示例代码:http://www.inb.uni-luebeck.de/~boehme/using_libavcodec.html
但是接下来我不知道如何转换 AVFrame到 MP3 文件,我已经尝试过这样的代码,但它不起作用:

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)

任何人都可以帮忙吗?谢谢。

最佳答案

你可以试试 swr_convert
此代码供您引用

swr_convert(_swrContext,
outbuf,
_audioFrame->nb_samples * ratio,
(const uint8_t **)_audioFrame->data,
_audioFrame->nb_samples);

关于ios - ffmpeg 在 iOS 中将 wma 转换为 mp3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13910128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com