我正在使用WatchKit
为Apple手表开发应用。我正在尝试播放使用Google的文字转语音API收到的音频文件。以下是我正在使用的代码:
NSURL *myUrl =[NSURL URLWithString:@"https://translate.google.com/translate_tts?key={my_private_key}&ie=UTF-8&tlen&q=Hello%20testing&client=t"];
[self presentMediaPlayerControllerWithURL:myUrl options:nil
completion:^(BOOL didPlayToEnd, NSTimeInterval endTime, NSError * __nullable error) {
if (error){
NSLog(@"%@",error.description);
}
}];
但代码返回以下错误:
Error Domain=com.apple.watchkit.errors Code=4 "Cannot Open" UserInfo={NSLocalizedFailureReason=This media format is not supported., NSUnderlyingError=0x15d506f0 {Error Domain=NSOSStatusErrorDomain Code=-12847 "(null)"}, NSLocalizedDescription=Cannot Open}
API正在返回一个应该在Apple Watch OS2中支持的mp3文件。为什么我收到此错误?我该如何解决?我确信音频可以播放,因为我在商店里看到一些使用谷歌TTS并使用WatchKit播放声音的应用程序。
答案 0 :(得分:1)
将您从网络下载的媒体文件(或从iOS应用程序传输)放在共享组容器中。共享组容器为您的Watch应用和WatchKit扩展提供通用存储。在扩展代码中,为容器内的任何媒体文件创建URL,并使用它们配置媒体接口。
您需要在功能中启用应用组并设置共享组容器。然后使用容器URL放置下载的语音音频并使用 presentMediaPlayerControllerWithURL
进行播放示例:
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.xxxxx.xxx"];
containerURL = [containerURL URLByAppendingPathComponent:[NSString stringWithFormat:@"Caches/tts.mp3"]];
[data writeToURL:containerURL atomically:YES];
//data you received from Google TTS response
[self presentMediaPlayerControllerWithURL:containerURL
options:nil
completion:^(BOOL didPlayToEnd, NSTimeInterval endTime, NSError * __nullable error) {
if (error){
//error handling
}
}];