问题
I'm making a player and I want to list all files and in front of all files I want to present the duration of the video.
The only problem is that I'm not getting the right video duration, sometimes it return a duration completely wrong.
I've tried the below solution:
let asset = AVAsset(url: "video.mp4")
let duration = asset.duration.seconds
So that it, the time sometimes give a value sometimes another. if someone know a possible solution I'm glad to heard.
I have update the code using one possible solution but it didn't work well,
let asset = AVAsset(url: url)
let duration = asset.duration
let durationTime = CMTimeGetSeconds(duration)
let minutes = Double(durationTime / 60)
I've tried with a video of 11:47 minutes of duration and it returns me = 11:78, how could a video have 11 minutes and 78 seconds?
So I think the problem is with the video, and I picked another video of 1:16 minutes and again the returned value is 1:26 (10 seconds wrong)
回答1:
This works for me:
import AVFoundation
import CoreMedia
...
if let url = Bundle.main.url(forResource: "small", withExtension: "mp4") {
let asset = AVAsset(url: url)
let duration = asset.duration
let durationTime = CMTimeGetSeconds(duration)
print(durationTime)
}
For the video here it prints "5.568" which is correct.
Edit from comments:
A video that returns 707
seconds when divided by 60 sec/min
is 11.78
. This is 11.78 minutes, or 11 minutes and 0.78min * 60sec/min = 47sec
, total is 11 min 47 sec
回答2:
if let url = Bundle.main.url(forResource: "small", withExtension: "mp4") {
let asset = AVAsset(url: url)
let duration = asset.duration
let durationTime = CMTimeGetSeconds(duration)
let minutes = durationTime/60
let seconds = durationTime%60
let videoDuration = "\(minutes):\(seconds)"
print(videoDuration)
}
来源:https://stackoverflow.com/questions/44267013/get-the-accurate-duration-of-a-video