Ionic 媒体插件无法在 iOS 上播放本地存储的 mp3 文件

Posted

技术标签:

【中文标题】Ionic 媒体插件无法在 iOS 上播放本地存储的 mp3 文件【英文标题】:Ionic media plugin does not play locally stored mp3 files on iOS 【发布时间】:2019-02-27 10:22:36 【问题描述】:

我正在尝试使用离子媒体插件制作 mp3 播放器。 首先我通过路径将歌曲下载到本地存储中

let filePath;

if(this.platform.is('android'))

    filePath = this.file.externalDataDirectory;

else 

  filePath = this.file.documentsDirectory;


filePath = filePath +'810.mp3';

之后我们得到这样的路径

file:///var/mobile/Containers/Data/Application/5DC6D2D0-6336-4C6E-A39E-5D5FD7D8AF7B/Library/Cloud/810.mp3

例如我们有这样一个对象

track = 

    'name':'Name of Song',
    'filePath': filePath

我创造

const file:MediaObject = this.media.create(track.filePath);

到时候玩

file.play();

整个应用程序崩溃而没有给我任何错误提示。 这个插件通常从 localPath 和 internetPath 播放 Android 上的文件。 在 ios 上,它只能从互联网播放,但在播放本地文件时会崩溃。请帮忙。

【问题讨论】:

您可以查看file.onSuccess.subscribe(() => console.log('Action is successful')); file.onError.subscribe(error => console.log('Error!', error)); 来查看您在本地播放时遇到的错误。 我尝试同时使用两者。但他们只是不开火。尽管没有它们,音乐在 android 上也能正常播放。谢谢你顺便解决了我的问题。 【参考方案1】:

所以我找到了解决方案。它就在这里。 https://forum.ionicframework.com/t/ios-9-cant-play-audio-video-files-that-are-downloaded-to-device/37580

例如。

track =     
    'name':'Name of Song',
    'filePath': '';


if(this.platform.is('android'))

  track.filePath = this.file.externalDataDirectory;

else 

  track.filePath = this.file.documentsDirectory;


track.filePath = track.filePath +'810.mp3';

const transfer = this.transfer.create();

let url = "http://someLink.com/someFileName.mp3";

transfer.download(url, track.filePath).then((entry)=>

// **code here will be executed when track is downloaded**
// and only for ios local file system we need to create a special link to this file 
// so that  cordova media plugin could read this file and if necessary to delete it 
// with cordova file plugin by this link also.

if(this.platform.is('ios'))
   this.file.resolveLocalFilesystemUrl(track.filePath).then((entry)=>
     track.filePath = entry.toInternalURL;
   );

实际上还有另一种方法可以通过从 track.filePath 中删除 file:// 来制作 iOS 播放文件,但是您将面临另一个问题。您以后将无法通过此路径将其删除。

【讨论】:

以上是关于Ionic 媒体插件无法在 iOS 上播放本地存储的 mp3 文件的主要内容,如果未能解决你的问题,请参考以下文章

ionic Cordova 使用媒体插件在 IOS 上录制音频失败

iOS 10 上的 Cordova 媒体插件是不是仍可使用后台播放?

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

Ionic socialSharing 插件无法在 iOS 上运行

使用 admob 展示广告后,无法在 iOS 设备上的 ionic 应用程序的 iframe 内播放嵌入的 youtube 视频

访问存储在 ngCordova/ionic iOS 应用程序中的 mp3 文件