首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AudioPlayer iOS和m4a

AudioPlayer iOS和m4a
EN

Stack Overflow用户
提问于 2013-04-26 07:19:50
回答 3查看 3.9K关注 0票数 5

我做了一个用AVAudioPlayer播放音乐的应用程序。它可以上传或下载歌曲,将它们写入Core Data,然后在选择时调用它们进行播放。我测试过的15首歌曲在iPhone音乐客户端和我自己的电脑上都能正常播放。

然而,其中三个不能在应用程序上播放。具体地说,我可以以任何顺序上传这15首歌曲,清除我的Model.sqlite,再次将它们下载到应用程序中,然后发现其中三首不能播放。然而,他们确实有正确的标题和艺术家。

查看这一点,我注意到不同之处在于非工作文件是.m4a。如何使用AVAudioPlayer播放该格式文件?

编辑(“什么”回忆?“,你用什么URL初始化AVAudioPlayer?”):

有一个服务器上有歌曲,用户可以通过应用程序访问。在选择要检索的子集S之后,应用程序将下载S并使用NSManagedObjectContext将其写入CoreModel。每首歌曲都存储为一个单独的实体,具有唯一的ID和与子集实体(在本例中为S)的关系。

当我“回想”使用AppDelegate通过上下文获得正确的歌曲时,数据也会被返回。然后,我像这样初始化AVAudioPlayer:

代码语言:javascript
复制
[[AVAudioPlayer alloc] initWithData:(NSData *)[currentSong valueForKey:@"data"] error:nil];

..。所以我写了这个,然后意识到我实际上还没有检查出错误是什么(愚蠢的我)。我发现它是OSStatus error 1954115647,它返回为不支持的文件类型。再深入研究一下,我发现了这个iPhone: AVAudioPlayer unsupported file type。这里提出了一种解决方案,要么在一开始就修剪掉坏数据,要么从URL的内容进行初始化。是否有可能在核心模型中找到数据写入的位置,以将其作为URL提供?

编辑:(比较文件。它们是否不同?)

是的,他们是。我从我的服务器上获取了一个示例.m4a文件,它是由应用程序上传的,并将其与iTunes中的文件进行比较。我发现这个文件在偏移量229404之前被截断了(总共2906191个字节),这将启动20680001 A0000E21。在iTunes版本中,0028D83B 6D646174位于这些字节之前。在此之前是一大块零,前面是一大块数据,前面是iTunes编码信息。最上面是更多的编码信息,将该文件列为M4A文件。

EN

回答 3

Stack Overflow用户

发布于 2013-04-26 08:19:16

您确定iOS支持您的编解码器吗?AVAudioPlayer应该可以播放iOS支持的任何格式,你可以在这里阅读支持的格式列表:http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/MultimediaPG/UsingAudio/UsingAudio.html#//apple_ref/doc/uid/TP40009767-CH2-SW6

我建议你尝试通过iTunes手动将这些文件添加到你的设备中,并在iPod中播放它们,如果它们不能播放,那么问题不是你的代码或sdk,而是格式。

票数 0
EN

Stack Overflow用户

发布于 2013-04-28 22:45:42

您如何调用它们来播放-您是否将它们写入一个具有m4a扩展名的临时文件-这个m4a扩展名可能是必需的。

票数 0
EN

Stack Overflow用户

发布于 2013-05-03 01:09:07

这不是一个直接的解决方案,但您可能会直接使用shouldn't be saving the blobs in Core Data。将文件写入缓存位置,并将文件路径保存在Core Data中。这将更有效地使用数据库,并为您的AVAudioPlayer提供一个本地文件路径,从而绕过该问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16226281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档