• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - Xcode:如何将 MP4 文件转换为音频文件

[复制链接]
菜鸟教程小白 发表于 2022-12-13 04:09:16 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我想将应用程序文档文件夹中的 MP4 文件转换为音频文件(mp3 或 m4a)。 我已经试过了,但是我不能用 AVPlayer 播放转换后的 MP3 文件。

这是我的代码:

-(void)convertMP4toMP3withFileNSString*)dstPath
{
    NSURL *dstURL = [NSURL fileURLWithPath:dstPath];

AVMutableComposition*   newAudioAsset = [AVMutableComposition composition];

AVMutableCompositionTrack*  dstCompositionTrack;
dstCompositionTrack = [newAudioAsset addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];

AVAsset*    srcAsset = [AVURLAsset URLAssetWithURL:dstURL options:nil];
AVAssetTrack*   srcTrack = [[srcAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];


CMTimeRange timeRange = srcTrack.timeRange;

NSError*    error;

if(NO == [dstCompositionTrack insertTimeRange:timeRange ofTrack:srcTrack atTime:kCMTimeZero error:&error]) {
    NSLog(@"track insert failed: %@\n", error);
    return;
}


AVAssetExportSession*   exportSesh = [[AVAssetExportSession alloc] initWithAsset:newAudioAsset presetName:AVAssetExportPresetPassthrough];

exportSesh.outputFileType = AVFileTypeAppleM4A;
exportSesh.outputURL = dstURL;

[[NSFileManager defaultManager] removeItemAtURL:dstURL error:nil];

[exportSesh exportAsynchronouslyWithCompletionHandler:^{
    AVAssetExportSessionStatus  status = exportSesh.status;
    NSLog(@"exportAsynchronouslyWithCompletionHandler: %i\n", status);

    if(AVAssetExportSessionStatusFailed == status) {
        NSLog(@"FAILURE: %@\n", exportSesh.error);
    } else if(AVAssetExportSessionStatusCompleted == status) {
        NSLog(@"SUCCESS!\n");


        NSError *error;
        //append the name of the file in jpg form

        //check if the file exists (completely unnecessary).
        NSString *onlyPath = [dstPath stringByDeletingLastPathComponent];
        NSString *toPathString = [NSString stringWithFormat"%@/testfile.m4a", onlyPath];
        [[NSFileManager defaultManager] moveItemAtPath:dstPath toPath:toPathString error:&error];
        [self loadFiles];
    }
}];
}

有没有人可以解决我的问题或可以改进我的代码?



Best Answer-推荐答案


替换这一行:

exportSesh.outputFileType = AVFileTypeAppleM4A;

与:

exportSesh.outputFileType = AVFileTypeCoreAudioFormat;

&这个:

NSString *toPathString = [NSString stringWithFormat"%@/testfile.m4a", onlyPath];

与:

NSString *toPathString = [NSString stringWithFormat"%@/testfile.mp3", onlyPath];

为我工作

关于ios - Xcode:如何将 MP4 文件转换为音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27590510/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap