我正在尝试将视频和音频文件附件合并到应用中的论坛帖子中,并且播放功能无法在iOS上播放。在Android上它工作正常。代码看起来像这样(对于音频,类似于视频):
String localAudiofilePath = FileSystemStorage.getInstance().getAppHomePath() + (String) fileInfo.get("path");
InputStream is = null;
Media m = null;
try{
is = FileSystemStorage.getInstance().openInputStream(localAudiofilePath);
m = MediaManager.createMedia(is, "audio/" + extractFileExtension((String) fileInfo.get("path")));
}catch(Exception ex){
ex.printStackTrace();
}
m.play();
final Media mm = m;
Display.getInstance().scheduleBackgroundTask(new Runnable() {
@Override
public void run() {
while(mm.isPlaying()){
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
}
}
mm.cleanup();
}
});
我在控制台中没有看到任何错误,并且在调试时我看到未输入catch
块。但是,当我尝试播放音频时,设备没有声音,视频播放器仍为空白,在控制台中显示此消息:
2018-01-18 04:22:20.213822 MyApplication [24425:2262915] [回放]❗️Playback失败并显示错误:错误Domain = AVFoundationErrorDomain Code = -11800“操作无法完成”UserInfo = {NSUnderlyingError = 0x61000024c2d0 {Error Domain = NSOSStatusErrorDomain Code = -12893“(null)”},NSLocalizedFailureReason =发生未知错误(-12893),NSLocalizedDescription =操作无法完成},未解析(canResolve:YES,errorResolver:(null))
我错过了什么?
答案 0 :(得分:0)
您正在使用录音mime类型播放视频。我想Android会忽略它,这很好。 iOS端口看到流数据的音频格式,并假设这是一个音频文件。您需要指定正在播放的视频的mime文件类型。
答案 1 :(得分:0)
问题根本不是媒体播放。该文件实际上并未存在于设备上,即使iOS未报告任何异常,也未输入catch
子句。我的错误假设是1.我可以在输入流实例化时使用try / catch作为检查文件是否存在的方法(它在Android上运行但不在iOS上运行),以及2.操作系统必然会抛出异常该文件不存在(与1.不同,但与之相关)。
我的新工作代码如下所示:
String localAudiofilePath = FileSystemStorage.getInstance().getAppHomePath() + MyApplication.DIRECTORY_APP_DOWNLOADS + "/" + (String) fileInfo.get("path");
if(!FileSystemStorage.getInstance().exists(localAudiofilePath)){
Cn1FileUtils.downloadRemoteFile("https://medonline.co.il/uploads/" + (String) fileInfo.get("path"), (String) fileInfo.get("path"), true);
}
InputStream is = null;
media = null;
try{
is = FileSystemStorage.getInstance().openInputStream(localAudiofilePath);
media = MediaManager.createMedia(is, "audio/" + Cn1FileUtils.extractFileExtension((String) fileInfo.get("path")));
}catch(Exception ex){
ex.printStackTrace();
ToastBar.showErrorMessage(MyApplication.getInstance().getString("error_loading_file"));
return;
}
media.play();