【问题标题】:AVAsset not working with local fileAVAsset 不适用于本地文件
【发布时间】:2018-02-28 04:59:20
【问题描述】:

我正在我的应用中下载和缓存(使用https://github.com/vdugnist/DVAssetLoaderDelegate)视频。当应用程序启动时,我检查一个下载的文件,如果它存在,我用本地文件初始化资产,否则,我用远程 URL 初始化它。然后,当下载完成时,我将视频文件写入缓存目录。我检查了写入的文件,它存在,并且是一个有效文件(我已经浏览了模拟器的文件系统并找到了该文件。它就在那里。)。

当我下次启动应用程序时,我会检查现有文件(已成功找到),我用它初始化播放器,但它永远不会加载。我没有收到任何错误,但缓冲区永远不会有任何时间范围,视频不播放,什么都没有调用等等。

这是我的代码:

asset = [self resolvedAssetWithURL:url];
playerItem = [AVPlayerItem playerItemWithAsset:asset];
player = [AVPlayer playerWithPlayerItem:playerItem];

地点:

-(AVAsset*)resolvedAssetWithURL:(NSURL*)url{
    NSURL *localURL = [self localURLForCachedRemoteURL:url];
    if(localURL){
#if DEBUG
        NSLog(@"Using cached copy for video at %@", url.absoluteString);
#endif
        videoIsLocal = YES;
        return [AVURLAsset URLAssetWithURL:localURL options:nil];
    }else{
        return [self assetWithoutCacheForURL:url];
    }
}

地点:

-(NSURL*)localURLForCachedRemoteURL:(NSURL*)remoteURL{
    NSString *cachedPath = [Cache cachedVideoDataRelativePathForURLPath:remoteURL.absoluteString];
    if(cachedPath){
        if([TUStorage fileExistsAtRelativePath:cachedPath]){
            return [NSURL fileURLWithPath:[TUStorage absolutePathForRelativePath:cachedPath]];
        }else{
            NSLog(@"Remote URL %@ has been cached at %@ but local copy was not found. Removing cache.", remoteURL.absoluteString, cachedPath);
            [Cache removeCachedVideoDataForURLPath:remoteURL.absoluteString];
            return nil;
        }
    }else{
        return nil;
    }
}

我有一些自定义方法,但你明白了。该文件在那里并且可以播放(当我远程加载时,它与实际播放的视频数据相同)。

我已经照顾好了:

  • 解析到正确的路径(指向缓存目录的路径每次都是随机的,我已经处理过了)。
  • 在加载本地资源时使用 fileURLWithPath: 代替常规 URL 初始化程序,如代码所示。

我做错了什么? (我在 iOS 11.2.6 上)

【问题讨论】:

    标签: ios avasset avurlasset


    【解决方案1】:

    经过数小时的调查,我偶然发现了这个问题:

    Is it possible to make AVURLAsset work without a file extension?

    这个问题本身就解决了我的问题:我没有使用文件名的扩展名。我已将.mov 附加到文件名并开始工作。

    【讨论】:

    • 祝福你,先生。
    • 我遇到了同样的问题,我的路径也有扩展名,但我仍然遇到了这个问题
    • 我添加了路径扩展,但仍然有这个问题。请帮助我解决此问题的任何人。
    猜你喜欢
    • 2011-03-28
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 2016-01-10
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多