iOS-如何使用 AVAsset 或 AVURLAsset 获取 .mp4 文件的持续时间

标签 ios avfoundation mp4 duration avasset

我知道之前已经回答了视频类型问题的持续时间,但我在使用 AVAsset 获取 .mp4 文件的持续时间时遇到了真正的麻烦AVURL Assets 。我正在使用以下代码

NSString *itemPathString = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0] stringByAppendingPathComponent:obmodel.actualname];
NSURL *itemPathURL = [NSURL URLWithString:itemPathString];

if([[NSFileManager defaultManager] fileExistsAtPath:itemPathString]){

    NSLog(@"File Exists");
}

AVAsset *videoAsset = (AVAsset *)[AVAsset assetWithURL:itemPathURL];
AVAssetTrack *videoAssetTrack = [[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];

NSLog(@"duration: %.2f", CMTimeGetSeconds(videoAssetTrack.timeRange.duration));
if(CMTimeGetSeconds(videoAsset.duration) >= 59.0){
}

但每次它返回0 我还导入了以下 headers

#import <AVFoundation/AVAsset.h>
#import <CoreMedia/CoreMedia.h>
#import <AVFoundation/AVFoundation.h>

我还尝试了一些我知道的其他代码,但没有一个对我有用。 如果我通过 iExplorer 播放视频,我的视频可以正常工作,我的路径很好,但不知道我缺少什么。 我想分享一下,我发现我的 AVAssets 没有正确加载 请建议我应该做什么。

最佳答案

是的,我以前遇到过类似的问题。对我来说,当我使用时问题就消失了:

NSURL *itemPathURL = [NSURL fileURLWithPath:itemPathString];

代替

NSURL *itemPathURL = [NSURL URLWithString:itemPathString];

如果您完全确定您的路径没问题,这应该可以解决您的问题。

希望这对您有所帮助!

关于iOS-如何使用 AVAsset 或 AVURLAsset 获取 .mp4 文件的持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29255776/

相关文章:

ios - 计算IOS中的哈希率

objective-c - 使用未声明的标识符 'NSEntityDescription'

swift - 在没有预览窗口的情况下使用 AVCaptureVideoDataOutputSampleBufferDelegate

c# - 用 C# 中的新音频覆盖 mp4/wmv 视频的音频内容

c# - asp.net mvc 返回视频的 Action 结果

video - mp4无法在移动浏览器中加载

objective-c - iOS iPad UIActionSheet问题

objective-c - xcode 有错误线程 1 :Program received signal 'SIGABRT'

ios - 前后摄像头的iOS 8胶卷

swift - 如何在 Swift 中停止/取消 playSoundFileNamed?