`
啸笑天
  • 浏览: 3462037 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

CMTime

    博客分类:
  • ios
 
阅读更多

 

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表示时间范围的持续时间。一般使用CMTimeRangeMakeCMTimeRangeFromTimeToTime创建如:

  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.rar_CMTime_网络选择"所涉及的知识点主要集中在移动设备上的网络连接方式和CMTime(可能是某种网络服务或应用)的选择与使用。在这个话题中,我们将探讨移动设备如何接入互联网,CMTime的具体作用,...

    cmtime.zip_player_wince player

    标题中的"cmtime.zip_player_wince player"暗示了这是一个与Windows CE平台相关的媒体播放器项目,可能是为了在WinCE设备上实现音视频播放功能。 "cmtime"可能是指时间戳或者与时间处理有关的库或模块,这在多媒体...

    Cmtime.rar_visual c

    "Cmtime.rar_visual c"可能是一个包含Visual C++项目或库的压缩文件,用于帮助开发者实现特定的功能,比如在Windows Mobile设备上枚举拨号接入点。 Windows Mobile是微软为移动设备设计的操作系统,它支持多种功能...

    SwiftyLRC:一个纯粹用Swift 2编写的实用程序,将.lrc内容解析为Swift-tuple,由(CMTime,String)构造

    SwiftyLRC 将lrc文件解析为swift-tuple的实用程序,由(CMTime,String)构造安装简单地将“ SwiftyLRC.swift”拖放到当前工作区中如何使用SwiftyLRC. parse (lrc_content) // returns a LRCTuple instance, which ...

    swift版本视频播放器

    let seekTime = CMTime(seconds: 10, preferredTimescale: 1) player.seek(to: seekTime, toleranceBefore: .zero, toleranceAfter: .zero) ``` 三、放大和全屏 视频播放器的放大和全屏功能主要涉及到UI设计和屏幕...

    OC-mp4视频截图,OC-mp4视频截图

    这个代码段定义了一个名为`captureImageFromVideo:atTime:`的方法,它接受视频路径和一个CMTime对象,返回该时间点的视频截图。`kCMTimeZero`表示视频的开始时刻。如果一切正常,截图会被保存到相册。 总结一下,...

    3.增加滚动条现实播放进度

    func updateProgress(currentTime: CMTime, duration: CMTime?) { guard let duration = duration else { return } let progress = CMTimeGetSeconds(currentTime) / CMTimeGetSeconds(duration) yourSlider....

    (OC)AVPlayer自定义播放器进度条

    [playerItem addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(1, NSEC_PER_SEC) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) { CMTime duration = playerItem.duration; float ...

    ios 视频播放器:AVPlayer(附:seektotime精准定位) - iOS知识库1

    CMTime time = CMTimeMakeWithSeconds(60, playerItem.currentTime.timescale); [player seekToTime:time toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; ``` 这里的`toleranceBefore`和`...

    Swift-视频分解成帧

    let time = CMTime(seconds: Double(i), preferredTimescale: CMTimeScale(fps)) times.append(time) } let imageGenerator = AVAssetImageGenerator(asset: asset) imageGenerator....

    IOS开发-仿抖音短视频系统生成webp动图客户端解决方案.docx

    CMTime time = CMTimeMakeWithSeconds(startTime, (int)scale); NSError* error = nil; CMTime actualTime; CGImageRef image = [generator copyCGImageAtTime:time actualTime:&actualTime error:&error]; /...

    iOS视频播放demo

    6. **NSTimer**和`CMTime`:为了实时更新播放时间(已播放时间)和剩余时间,我们可以使用`NSTimer`定期获取`AVPlayerItem`的当前播放时间,然后转换成用户友好的格式显示。`CMTime`是Core Media中的时间结构,用于...

    ios获取视频长度和当前播放时间

    2. **读取视频时长**:使用`AVURLAsset`的`duration`属性可以获取到视频的时长,该属性返回的是`CMTime`类型,包含了时间值和时间尺度两个部分。为了将时长转换为更常见的秒数,可以通过以下代码: ```objective-c ...

    ios AVFoundation

    AVFoundation通过`CMTime`类来表示时间戳,通过`CMTimeRange`类来表示时间范围。 ##### CMTime表示长度时间 `CMTime`类用于表示时间戳,它支持无限精度的时间表示。 ##### CMTimeRange表示时间范围 `CMTimeRange...

    ios AVPlayer视频播放DEMO

    player.seek(to: CMTime(seconds: 10, preferredTimescale: 1), completionHandler: { finished in // 完成回调处理 }) ``` 4. **监听播放状态** 为了响应播放事件,可以添加观察者到AVPlayerItem的`status`...

    iOS视频缩略图截取.zip

    let request = [AVAssetImageGeneratorRequest(assetImageGenerator: imageGenerator, start_time: thumbnailTime, duration: CMTime.zero)] imageGenerator.generateCGImagesAsynchronously(forTimes: request) { ...

    iOS音视频编辑资料

    CMTime是一个结构体,用于表示有理数时间,它允许开发者执行时间的增加、比较和范围定义等操作。掌握CMTime对于在AVFoundation中进行复杂的编辑工作至关重要。 - AVFoundation提供了哪些API进行视频编辑? ...

    iOS资料整合音视频代码合集

    理解CMSampleBufferRef和CMTime等概念,有助于实现复杂的音视频同步。 4. **Core Audio**:对于音频处理,Core Audio是关键。它允许开发者进行低级别的音频处理,包括音频输入输出、音频格式转换、混音等。 5. **...

    自定义视频播放滑进度条

    `CMTimeGetSeconds`函数用于将CMTime类型转换为秒,以便于计算进度比例。 接下来,我们需要处理进度条的滑动事件。当用户在进度条上滑动时,我们需要更新AVPlayerItem的seekToTime方法,让视频跳转到对应的时间点。...

    ios视频的框架介绍

    例如,CMSampleBuffer是处理视频帧的基本单元,而CMTime代表时间值,这些都是进行视频处理时的关键概念。 压缩包文件名称看起来像是教学资料的目录,可能包含了一系列关于iOS开发的基础教程,比如“iPhone第二天上...

Global site tag (gtag.js) - Google Analytics