0

我能够使用下面的代码成功创建一个播放声音的简单应用程序。然而问题是,如果我将资产从 mp3 更改为 m4a(使用 aac 编码)。不会产生声音,但乐曲的持续时间与添加样本的长度相匹配。

NSError *error;

AVMutableComposition* composition = [AVMutableComposition composition];
AVURLAsset* audioAsset1 = [[AVURLAsset alloc]initWithURL:[NSURL URLWithString:@"http://www.myserver.com/sample.mp3"] options:nil];

AVMutableCompositionTrack *audioTrack1 = [composition addMutableTrackWithMediaType:AVMediaTypeAudio 
                                                                  preferredTrackID:kCMPersistentTrackID_Invalid];

[audioTrack1 insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAsset1.duration)
                     ofTrack:[[audioAsset1 tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]
                      atTime:kCMTimeZero
                       error:&error];

NSLog(@"%@", error);

playerItem = [AVPlayerItem playerItemWithAsset:composition];

player = [AVPlayer playerWithPlayerItem:playerItem];

[player play];

任何人都可以帮忙吗?

4

1 回答 1

0

我最终到处张贴这个问题,最后用苹果创建了一个错误报告。

我如何解决这个问题是在开始时有一个步骤,将 m4a 下载到应用程序临时目录中,然后从那里将其添加到组合中。奇迹般有效。

我不会详细介绍如何执行此操作的代码,但由于我的应用程序使用了流行的 AFNetworking 库,因此这里是关键部分。

1: AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:songURLRequest];
2: NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"song.m4a"];
3: operation.outputStream = [NSOutputStream outputStreamToFileAtPath:filePath append:NO];

第 1 行:设置 AFHTTPRequestOperation 第 2 行:将本地路径设置为将保存文件的字符串 第 3 行:将 AFHTTPRequestOperation 上的 outputStream 设置为本地路径

希望这对将来的人有所帮助!

于 2012-07-10T23:35:26.883 回答