ZFPlayer icon indicating copy to clipboard operation
ZFPlayer copied to clipboard

iOS18播放相册视频失败

Open climlove opened this issue 1 year ago • 9 comments

在目前iOS18beta版中播放相册的视频会失败,但是在相册中打开该视频,再播放,又没有问题

climlove avatar Jul 22 '24 00:07 climlove

是只要相册里随便选中一个视频播放,然后再回到APP播放就可以 不知道是什么原因

climlove avatar Jul 25 '24 03:07 climlove

那应该是视频在云端iCloud上

yznote avatar Aug 28 '24 09:08 yznote

这个问题有解决方案么?

yechunxi avatar Sep 25 '24 10:09 yechunxi

是只要相册里随便选中一个视频播放,然后再回到APP播放就可以 不知道是什么原因

蹲个后续

xuanweiH avatar Sep 26 '24 02:09 xuanweiH

我也蹲点, 我没用这个ZFPlayer, 用 AVPlatyer 也播放不了

xuxueyong avatar Sep 29 '24 07:09 xuxueyong

没有人解决这个问题吗?

xuxueyong avatar Oct 08 '24 05:10 xuxueyong

https://juejin.cn/post/7420006486952116262 大家可以试试这个方案, 可以不?

xuxueyong avatar Oct 08 '24 08:10 xuxueyong

<AVURLAsset: 0x300c70c20, URL = file:///var/mobile/Media/DCIM/100APPLE/IMG_0154.MP4#YnBsaXN0MDDRAQJfEBtSZWNvbW1lbmRlZEZvckltbWVyc2l2ZU1vZGUQAAgLKQAAAAAAAAEBAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAr>

<AVURLAsset: 0x2837cc500, URL = file:///var/mobile/Media/DCIM/100APPLE/IMG_0442.MP4>

iOS 18 AVURLAsset 有一些附加信息,# 之后, 判断iOS18 处理字符串

AVURLAsset *urlAsset = (AVURLAsset *)asset; NSURL *url = urlAsset.URL;

if (@available(iOS 18.0, *)) {

          NSString *urlString = [url absoluteString];
           // 查找 # 的位置
          NSRange range = [urlString rangeOfString:@"#"];
          if (range.location != NSNotFound) {
          // 如果找到 #,截取到 # 之前的部分
          urlString = [urlString substringToIndex:range.location];
     }
                    
   url = [NSURL URLWithString:urlString];

}

model.urlAsset = urlAsset;

持有urlAsset,防止过了作用于被释放 导致不能播放 就可以正常播放了

SmallWeed avatar Oct 18 '24 05:10 SmallWeed

<AVURLAsset: 0x300c70c20, URL = file:///var/mobile/Media/DCIM/100APPLE/IMG_0154.MP4#YnBsaXN0MDDRAQJfEBtSZWNvbW1lbmRlZEZvckltbWVyc2l2ZU1vZGUQAAgLKQAAAAAAAAEBAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAr>

<AVURLAsset: 0x2837cc500, URL = file:///var/mobile/Media/DCIM/100APPLE/IMG_0442.MP4>

iOS 18 AVURLAsset 有一些附加信息,# 之后, 判断iOS18 处理字符串

AVURLAsset *urlAsset = (AVURLAsset *)asset; NSURL *url = urlAsset.URL;

if (@available(iOS 18.0, *)) {

          NSString *urlString = [url absoluteString];
           // 查找 # 的位置
          NSRange range = [urlString rangeOfString:@"#"];
          if (range.location != NSNotFound) {
          // 如果找到 #,截取到 # 之前的部分
          urlString = [urlString substringToIndex:range.location];
     }
                    
   url = [NSURL URLWithString:urlString];

}

model.urlAsset = urlAsset;

持有urlAsset,防止过了作用于被释放 导致不能播放 就可以正常播放了

取这个路径就可以了 urlAsset.URL.relativePath

ptlCoder avatar Sep 02 '25 05:09 ptlCoder