iOS 9 无法播放下载到设备的音频/视频文件

Posted

技术标签:

【中文标题】iOS 9 无法播放下载到设备的音频/视频文件【英文标题】:iOS 9 can’t play audio/video files that are downloaded to device 【发布时间】:2015-11-20 22:47:22 【问题描述】:

还有其他人遇到过这个问题吗?

当我使用 cordova 媒体插件在 ios 上播放 mp3 文件时,我没有收到关于它为什么不工作的错误或响应。

我已经让 ngCordova 媒体插件在我的 ios 模拟器上的应用程序中工作,使用外部 URL 播放音频文件......但是,我正在尝试构建一些功能,基本上你可以从那里下载 mp3外部源,将其保存到您的设备,然后从那里播放文件。我似乎无法让它工作,即使我可以验证该文件确实存在。这是我的函数代码:

$scope.playAudio = function() 
   document.addEventListener('deviceready', function () 
     var src = cordova.file.dataDirectory + fileSrc;
     var media = $cordovaMedia.newMedia(src);
     var iOSPlayOptions = 
           numberOfLoops: 1,
           playAudioWhenScreenIsLocked : true
     ;
      media.play(iOSPlayOptions); // iOS only!
      media.play();   // android
);

我应该注意,这个功能在我的安卓设备上确实有效,但在我的 ios 模拟器和真实设备上,它完全没有任何作用。

我应该注意我使用的是 iOS 9 和 xCode 7.1

是否有其他人在尝试从本地设备的应用中播放音频或视频文件时遇到任何问题?

【问题讨论】:

【参考方案1】:

看来我可以通过使用 $window.resolveLocalFileSystemURL() 和 src.toInternalURL() 函数将本地文件路径解析为内部 URL 来解决问题

$scope.playAudio = function() 
   document.addEventListener('deviceready', function () 
      var src = cordova.file.dataDirectory + fileSrc;
      $window.resolveLocalFileSystemURL(src, function(dir)

        basePath = dir.toInternalURL();

        media = $cordovaMedia.newMedia(basePath);
        var iOSPlayOptions = 
          numberOfLoops: 1,
          playAudioWhenScreenIsLocked : true
        ;

        $scope.data.playing = true;

        media.play(iOSPlayOptions); // iOS only!
        //media.play(); // Android
      )
    );

【讨论】:

以上是关于iOS 9 无法播放下载到设备的音频/视频文件的主要内容,如果未能解决你的问题,请参考以下文章

avplayer 不播放通过 IOS Objective-C 中的设备摄像头捕获的视频中的音频

无法通过扬声器播放视频音频 - iOS

AVAudioPlayer 在播放视频时无法识别设备静音按钮

iOS视频到音频文件转换[重复]

使用 AVAudioPlayer iOS 9 无法在后台播放音频

如何确定 iOS 设备的视频播放能力?