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

Posted

技术标签:

【中文标题】iOS-如何使用 AVAsset 或 AVURLAsset 获取 .mp4 文件的持续时间【英文标题】:iOS- how to get the duration of .mp4 file by using AVAsset or AVURLAsset 【发布时间】:2015-03-25 12:32:33 【问题描述】:

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

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 没有正确加载 请建议我应该怎么做。

【问题讨论】:

This answer 可能会有所帮助。 @ChrisLoonam 感谢您的回复。我使用了他的方法,它返回给我AVKeyValueStatusFailed 我的情况会是什么错误? tracksKey 应该是什么? 嗨@SyedAliSalman,在***.com/questions/55605987/中需要你的帮助......这个问题是一样的......请看看这个......谢谢 【参考方案1】:

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

NSURL *itemPathURL = [NSURL fileURLWithPath:itemPathString];

而不是

NSURL *itemPathURL = [NSURL URLWithString:itemPathString];

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

希望这会有所帮助!

【讨论】:

嗨@LuisCien,在***.com/questions/55605987/… 需要你的帮助......这个问题和这个一样......请看看这个......谢谢

以上是关于iOS-如何使用 AVAsset 或 AVURLAsset 获取 .mp4 文件的持续时间的主要内容,如果未能解决你的问题,请参考以下文章

使用 AVFoundation 裁剪 AVAsset 视频不工作 iOS 8

AVAsset 在 iOS 中使用图像叠加保存视频会破坏视频

使用 AVAsset 的多个图像到视频需要高内存

当设备被蓝牙耳机锁定时,AVAsset 无法播放

Swift 3 将数据转换为 AVAsset 或 PHAsset

iOS 音频拼接