微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CrossMediaManager在Xamarin Forms IOS中播放mp3远程文件时,抛出AVAsset loadValuesAsynchronouslyForKeys:completionHandler

如何解决CrossMediaManager在Xamarin Forms IOS中播放mp3远程文件时,抛出AVAsset loadValuesAsynchronouslyForKeys:completionHandler

我正在尝试使用CrossMediaManager播放媒体项目列表。但是,在IOS中,它会引发奇怪的错误,并且无法执行播放,而相同的代码在Android中也有效。如果我确实传递了一个字符串url或媒体项,则它可以工作,但不适用于多个url。

    static async Task<MediaItem> GenerateReciterMediaItem(string fileUri,AudioReciter reciter,byte chapterId)
    {
         Chapter c = await Chapter.GetChapterasync(chapterId);
         var item = (MediaItem)await CrossMediaManager.Current.Extractor.CreateMediaItem(fileUri);
         item.MediaType = MediaType.Audio;
         var reciterImageUri = Path.Combine("http://www.azee.tech/reciters/r9.png"); //doesn't work
         //another url for image reciter.azee.tech/r9.png --> also doesn't work
         var image = new Image() { Source = ImageSource.FromUri(new Uri(reciterImageUri))};
         int type = 1;
         if (item != null)
         {
            item.Id = string.Format("{0},{1},{2}",type,chapterId,reciter.ReciterID);
            item.IsMetadataExtracted = false;
            item.Title = reciter.Name;
            item.Album = string.Format("{0} - {1} ({2})",c.ChapterID,c.arabicEnglishName,c.EnglishName);
            item.Artist = reciter.Name;
            item.AlbumImage = image;
            item.AlbumImageUri = reciterImageUri;
            item.displayImage = image;
            item.displayImageUri = reciterImageUri;
            item.Image = image;
            item.ImageUri = reciterImageUri;
         }
     return item;
 }

static async Task AddAudioReciterTrackToQueue()
{
  //list of urls --> https://www.azee.tech/MaherAlMuaiqly64kbps/001.mp3,002.mp3,003.mp3 and so on
  foreach(var url in listofUrls)
  {
      var fileUri = listofUrls[i];
      var item = await GenerateReciterMediaItem(fileUri,reciter,chapterId);
      CrossMediaManager.Current.Queue.Add(item);
   }
}
async Task PlayQueue()
{
    CrossMediaManager.Current.Autoplay = true;
    await AddAudioReciterTrackToQueue();
    
    await CrossMediaManager.Current.Play(CrossMediaManager.Current.Queue.MediaItems); //doesnt work
    await CrossMediaManager.Current.Play(); //doesn't work
}

调试错误

2020-09-15 22:31:43.550896 + 0100 wQuran.iOS [29476:23403374]-[AVAsset 用以下命令调用loadValuesAsynchronouslyForKeys:completionHandler:] 无法识别的键( albumName, 作者, 标题, 艺术家 )。 [0:]状态已更改缓冲线程已启动:#22 2020-09-15 22:31:43.758802 + 0100 wQuran.iOS [29476:23404151]-[AVAsset 用以下命令调用loadValuesAsynchronouslyForKeys:completionHandler:] 无法识别的键( 艺术品)。

如果我下载文件并从本地资源播放它。没错 我还在info.plist中添加了传输安全性,以忽略来自该域的https

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
    <key>www.azee.tech</key>
    <dict>
      <key>NSExceptionRequiresForwardSecrecy</key>
      <false/>
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <key>NSIncludesSubdomains</key>
      <true/>
    </dict>
  </dict>
</dict>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。