视频和音频播放无法在iOS

时间:2018-01-18 21:35:44

标签: ios media-player codenameone

我正在尝试将视频和音频文件附件合并到应用中的论坛帖子中,并且播放功能无法在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))

我错过了什么?

2 个答案:

答案 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();