CMTime是专门用于标识电影时间的结构体,通常用如下两个函数来创建CMTime
typedef struct { CMTimeValue value; /*! @field value The value of the CMTime. value/timescale = seconds. */ CMTimeScale timescale; /*! @field timescale The timescale of the CMTime. value/timescale = seconds. */ CMTimeFlags flags; /*! @field flags The flags, eg. kCMTimeFlags_Valid, kCMTimeFlags_PositiveInfinity, etc. */ CMTimeEpoch epoch; /*! @field epoch Differentiates between equal timestamps that are actually different because of looping, multi-item sequencing, etc. Will be used during comparison: greater epochs happen after lesser ones. Additions/subtraction is only possible within a single epoch, however, since epoch length may be unknown/variable. */ } CMTime;
CMTime定义是一个C语言的结构体,CMTime是以分数的形式表示时间,value表示分子,timescale表示分母,flags是位掩码,表示时间的指定状态。
他有两个构造函数:
CMTimeMake
CMTime CMTimeMake( int64_t value, /*! @param value Initializes the value field of the resulting CMTime. */ int32_t timescale) /*! @param timescale Initializes the timescale field of the resulting CMTime. */ __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);
value当前第几帧,timescale每秒钟多少帧.当前播放时间a/b
int64_t value = 10000;
int32_t preferredTimeScale = 600;
CMTime inTime = CMTimeMake(value, preferredTimeScale);
CMTimeShow(inTime);
OUTPUT: {10000/600 = 16.667}
代表时间为16.667s, 视频一共1000帧,每秒600帧
CMTimeMakeWithSeconds
CMTime CMTimeMakeWithSeconds( Float64 seconds, int32_t preferredTimescale) __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);
seconds当前时间,preferredTimescale每秒钟多少帧.
Float64 seconds = 5;
int32_t preferredTimeScale = 600;
CMTime inTime = CMTimeMakeWithSeconds(seconds, preferredTimeScale);
CMTimeShow(inTime);
OUTPUT: {3000/600 = 5.000}
代表当前时间为5s,视频一共有3000帧,一秒钟600帧
demo——拖动进度条:
float minValue = [slider minimumValue]; float maxValue = [slider maximumValue]; float value = [slider value]; seconds = duration * (value - minValue) / (maxValue - minValue); preferredTimeScale = 1 *NSEC_PER_SEC;
1 *NSEC_PER_SEC 如果只写 1 的话有很大的误差,使用纳秒也是为了保证指定一个时间播放视频的精确度timescale可能就是 1 preferredTimeScale的精确度就更高 1 * NSEC_PER_SEC
关键词解释:
- NSEC:纳秒。
- USEC:微妙。
- SEC:秒
- PER:每
所以:
- NSEC_PER_SEC,每秒有多少纳秒。
- USEC_PER_SEC,每秒有多少毫秒。(注意是指在纳秒的基础上)
- NSEC_PER_USEC,每毫秒有多少纳秒。
1秒可以写成如下几种:
- 1 * NSEC_PER_SEC
- 1000 * USEC_PER_SEC
- USEC_PER_SEC * NSEC_PER_USEC
打印:
CMTimeShow(CMTime)//打印CMTime
相加:
CMTime t3 = CMTimeAdd(t1, t2);
相减:
CMTime t4 = CMTimeSubtract(t3, t1);
函数获取时间的秒数:
CMTimeGetSeconds(t1)
CMTimeRange是一个表示时间范围的一个数据类型:
typedef struct{
CMTime start; CMTime duration;
} CMTimeRange;
其中start表示时间的起点,duratin表示时间范围的持续时间。一般使用CMTimeRangeMake和CMTimeRangeFromTimeToTime创建如:
CMTimeRange timeRange1 = CMTimeRangeMake(t1, t2);
CMTimeRange timeRange2 = CMTimeRangeFromTimeToTime(t4, t3);
CMTimeRange的交集和并集:
交叉时间范围
CMTimeRange intersectionRange = CMTimeRangeGetIntersection(timeRange2, timeRange1);
总和时间范围
CMTimeRange unionRange = CMTimeRangeGetUnion(timeRange1, timeRange2);
相关推荐
【标题】"Cmtime.rar_CMTime_网络选择"所涉及的知识点主要集中在移动设备上的网络连接方式和CMTime(可能是某种网络服务或应用)的选择与使用。在这个话题中,我们将探讨移动设备如何接入互联网,CMTime的具体作用,...
标题中的"cmtime.zip_player_wince player"暗示了这是一个与Windows CE平台相关的媒体播放器项目,可能是为了在WinCE设备上实现音视频播放功能。 "cmtime"可能是指时间戳或者与时间处理有关的库或模块,这在多媒体...
"Cmtime.rar_visual c"可能是一个包含Visual C++项目或库的压缩文件,用于帮助开发者实现特定的功能,比如在Windows Mobile设备上枚举拨号接入点。 Windows Mobile是微软为移动设备设计的操作系统,它支持多种功能...
SwiftyLRC 将lrc文件解析为swift-tuple的实用程序,由(CMTime,String)构造安装简单地将“ SwiftyLRC.swift”拖放到当前工作区中如何使用SwiftyLRC. parse (lrc_content) // returns a LRCTuple instance, which ...
let seekTime = CMTime(seconds: 10, preferredTimescale: 1) player.seek(to: seekTime, toleranceBefore: .zero, toleranceAfter: .zero) ``` 三、放大和全屏 视频播放器的放大和全屏功能主要涉及到UI设计和屏幕...
这个代码段定义了一个名为`captureImageFromVideo:atTime:`的方法,它接受视频路径和一个CMTime对象,返回该时间点的视频截图。`kCMTimeZero`表示视频的开始时刻。如果一切正常,截图会被保存到相册。 总结一下,...
func updateProgress(currentTime: CMTime, duration: CMTime?) { guard let duration = duration else { return } let progress = CMTimeGetSeconds(currentTime) / CMTimeGetSeconds(duration) yourSlider....
[playerItem addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(1, NSEC_PER_SEC) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) { CMTime duration = playerItem.duration; float ...
CMTime time = CMTimeMakeWithSeconds(60, playerItem.currentTime.timescale); [player seekToTime:time toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; ``` 这里的`toleranceBefore`和`...
let time = CMTime(seconds: Double(i), preferredTimescale: CMTimeScale(fps)) times.append(time) } let imageGenerator = AVAssetImageGenerator(asset: asset) imageGenerator....
CMTime time = CMTimeMakeWithSeconds(startTime, (int)scale); NSError* error = nil; CMTime actualTime; CGImageRef image = [generator copyCGImageAtTime:time actualTime:&actualTime error:&error]; /...
6. **NSTimer**和`CMTime`:为了实时更新播放时间(已播放时间)和剩余时间,我们可以使用`NSTimer`定期获取`AVPlayerItem`的当前播放时间,然后转换成用户友好的格式显示。`CMTime`是Core Media中的时间结构,用于...
2. **读取视频时长**:使用`AVURLAsset`的`duration`属性可以获取到视频的时长,该属性返回的是`CMTime`类型,包含了时间值和时间尺度两个部分。为了将时长转换为更常见的秒数,可以通过以下代码: ```objective-c ...
AVFoundation通过`CMTime`类来表示时间戳,通过`CMTimeRange`类来表示时间范围。 ##### CMTime表示长度时间 `CMTime`类用于表示时间戳,它支持无限精度的时间表示。 ##### CMTimeRange表示时间范围 `CMTimeRange...
player.seek(to: CMTime(seconds: 10, preferredTimescale: 1), completionHandler: { finished in // 完成回调处理 }) ``` 4. **监听播放状态** 为了响应播放事件,可以添加观察者到AVPlayerItem的`status`...
let request = [AVAssetImageGeneratorRequest(assetImageGenerator: imageGenerator, start_time: thumbnailTime, duration: CMTime.zero)] imageGenerator.generateCGImagesAsynchronously(forTimes: request) { ...
CMTime是一个结构体,用于表示有理数时间,它允许开发者执行时间的增加、比较和范围定义等操作。掌握CMTime对于在AVFoundation中进行复杂的编辑工作至关重要。 - AVFoundation提供了哪些API进行视频编辑? ...
理解CMSampleBufferRef和CMTime等概念,有助于实现复杂的音视频同步。 4. **Core Audio**:对于音频处理,Core Audio是关键。它允许开发者进行低级别的音频处理,包括音频输入输出、音频格式转换、混音等。 5. **...
`CMTimeGetSeconds`函数用于将CMTime类型转换为秒,以便于计算进度比例。 接下来,我们需要处理进度条的滑动事件。当用户在进度条上滑动时,我们需要更新AVPlayerItem的seekToTime方法,让视频跳转到对应的时间点。...
例如,CMSampleBuffer是处理视频帧的基本单元,而CMTime代表时间值,这些都是进行视频处理时的关键概念。 压缩包文件名称看起来像是教学资料的目录,可能包含了一系列关于iOS开发的基础教程,比如“iPhone第二天上...