首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏大壮

    CMTime-基础使用

    1.CMTime结构体 typedef struct { CMTimeValue value; CMTimeScale timescale; CMTimeFlags flags; CMTimeEpoch epoch; } CMTime value/timescale = seconds计算出代表的时间(秒) value代表分子 timescale代表分母 flags代表状态(通过位掩码实现) epoch 暂不清楚 2.CMTime意义 从结构体中,我们看到CMTime主要是表达数字使用。 CMTime通过value,timescale每个有8个字节,实现双精度。 总结: 完整版本请看 https://xiaozhuanlan.com/topic/0372591684

    83620发布于 2020-05-26
  • 来自专栏sweet_iOS

    AVFoundation框架解析看这里(4)- CMTime

    本章主要介绍CMTime和CMTimeRange,为后面的视频操作奠定基础。 ,在一些要求高精度的应用场景显然不适合,于是苹果在Core Media框架中定义了CMTime数据类型作为时间的格式,结构如下: public struct CMTime { public var 显然,CMTime定义是一个C语言的结构体,专门用来表示影片时间的类别。CMTime是以分数的形式表示时间,value表示分子,timescale表示分母。 public struct CMTimeRange { public var start: CMTime public var duration: CMTime public init() public init(start: CMTime, duration: CMTime) } start表示时间的起点的CMTime值,duratin表示时间范围的持续时长的CMTime

    1.3K21发布于 2020-12-23
  • 来自专栏sweet_iOS

    AVFoundation框架解析看这里(7)- AVAssetImageGenerator

    */ open var requestedTimeToleranceBefore: CMTime open var requestedTimeToleranceAfter: CMTime 方法 /* , actualTime: UnsafeMutablePointer<CMTime>?) throws -> CGImage /* * 生成一系列图片 * requestedTimes: NSValue类型的数组,数组里每一个对象都是CMTime结构体,表示你想要生成的图片在视频中的时间点 open func cancelAllCGImageGeneration() 回调 public typealias AVAssetImageGeneratorCompletionHandler = (CMTime , CMTime, AVAssetImageGenerator.Result, Error?)

    1.6K30发布于 2020-12-23
  • 来自专栏移动端开发

    iOS 视频播放方式整理

    @field value The value of the CMTime. value/timescale = seconds. 帧数 */ CMTimeScale timescale; /*! ;       前面的代码中我们看到有一个获取视频总长度的方法: CMTime duration = avplayeritem.duration; NSLog(@"视频总时长:% 120帧的位置,也就是两秒的位置,那么就可以创建一个 CMTime 类型数据。 :(void (^)(CMTime time))block;       比如说:我们把时间间隔设置为, 1/ 10 秒,然后 block 里面更新 UI。 of the CMTime. value/timescale = seconds.

    3.3K100发布于 2018-02-06
  • 来自专栏DevTips

    AVFoundation 框架介绍

    AVAssetReaderOutput 输出的媒体数据就是该对象 CMTime 一个表示时间的结构体。以分数的形式表示时间,value 表示分子,timescale 表示分母。 CMTime 定义在 Core Media 框架中,我们可以通过 CMTimeMake(int64_t value,int32_t timescale) 快速创建一个 CMTime 。 你可以通过 CMTimeMakeWithSeconds(Float64 seconds,int32_t preferredTimescale) ,将 seconds 转为 CMTime. preferredTimescale start 表示开始时间,duration 表示持续时间,类型都是 CMTime。 CMTimeRange 的创建方式与 CMTime 类似都提供了一个 C 语言函数。 通过 CMTimeRangeMake(CMTime start, CMTime duration) 可以快速创建一个时间范围。

    4K11发布于 2019-11-05
  • 来自专栏一“技”之长

    iOS MachineLearning 系列(6)—— 视频中的物体轨迹分析

    1 - 解析视频中的物体飞行轨迹 轨迹检测需要保存状态,因此其传入的图像分析参数需要为包含CMTime信息的CMSampleBuffer数据。 } // 获取帧率 let frameRate = videoTrack.nominalFrameRate // 获取总时长 let frameDuration = CMTime } } } processFram方法进行轨迹分析,实现如下: func processFrame(_ sampleBuffer: CMSampleBuffer, atTime time : CMTime , withDuration duration : CMTime) { // 创建句柄 let handler = VNImageRequestHandler(cmSampleBuffer frameAnalysisSpacing参数设置采样间隔 // trajectoryLength设置确定一条轨迹的点数 最小为5 public init(frameAnalysisSpacing: CMTime

    81240编辑于 2023-05-02
  • 来自专栏移动端开发

    AVFoundation 框架初探究(四)

     也是对第四章一点内容的补充              我们简单的看看这个CMTime的一般算数运算 #pragma mark -- #pragma mark -- CMTime的简单的使用 -(void )CMTimeCalculate{ CMTime timeO = CMTimeMake(1,10); CMTime timeT = CMTimeMake //乘 整形 CMTime timeB = CMTimeMake(1,10); CMTime timeI = CMTimeMultiply { CMTime start; /*! 关于CMTime还有一点值得我们注意,那就是它和秒之间的转换函数: Float64 CMTimeGetSeconds(CMTime time)  通过这个函数,你就可以把一个CMTime实例转换成Float64

    1.7K60发布于 2018-03-19
  • 来自专栏落影的专栏

    GPUImage详细解析(六)-用视频做视频水印

    思考2:音频的来源不同会导致CMTime的不同,响应链视频信息的CMTime默认采用第一个输入的CMTime,故而修改音频来源的时候需要修改响应链的输入顺序,否则几秒钟的视频文件会产生两个多小时的文件( CMTime不同步导致)。

    2.5K30发布于 2018-04-27
  • 来自专栏落影的专栏

    使用VideoToolbox硬解码H.264

    的创建和销毁代价很大; pixelBufferAttributes CFDictionary包括宽高、像素格式(RGBA、YUV)、使用场景(OpenGL ES、Core Animation) CMTime &mFormatDescription); 4、添加CMTime void *sourceFrameRefCon, OSStatus status, VTDecodeInfoFlags infoFlags, CVImageBufferRef pixelBuffer, CMTime presentationTimeStamp, CMTime presentationDuration ){ CVPixelBufferRef *outputPixelBuffer = (CVPixelBufferRef

    2.8K60发布于 2018-04-27
  • 来自专栏C++

    iOS摄像头采集和编码

    position) { device = dev; break; } } //设置摄像头帧率,作用不大 CMTime device.activeFormat videoSupportedFrameRateRanges]) { NSLog(@"support framerate:%@", range); if (CMTIME_COMPARE_INLINE (frameDuration, >=, range.minFrameDuration) && CMTIME_COMPARE_INLINE(frameDuration, <=, range.maxFrameDuration fflush(_hyuv); //编码264 if(_firstime == -1) { _firstime = cur; } //创建CMTime 的pts和duration CMTime pts = CMTimeMake(cur - _firstime, 1000);//ms CMTime dur = CMTimeMake(1,

    1.3K20编辑于 2022-05-09
  • 来自专栏浅探ARKit

    ARKit 在模型上播放视频(附进度控制)

    property (nonatomic, strong) UISlider \*slider; /\*\* \* 调节的时间 \*/ @property (nonatomic, assign) CMTime [self actuallySeekToTime]; } } - (void)actuallySeekToTime { CMTime float totalTime = CMTimeGetSeconds(asset.duration); [self.player pause]; CMTime

    1.8K120发布于 2018-05-07
  • 来自专栏源码分享

    ios虚拟摄像头插件,iPhone苹果替换相机软件,通过xposed框架实现

    timeLabel.text = "选择时长: \(selectedTime)秒" } private func processVideo(with duration: CMTime ) { guard let asset = selectedAsset else { return } let startTime = CMTime(seconds : 0, preferredTimescale: 600) let endTime = CMTime(seconds: Double(slider.value), preferredTimescale

    1.1K10编辑于 2025-06-17
  • 来自专栏音视频直播技术专家

    iOS下WebRTC视频解码

    OSStatus status, VTDecodeInfoFlags infoFlags, CM_NULLABLE CVImageBufferRef imageBuffer, CMTime presentationTimeStamp, CMTime presentationDuration ); struct VTDecompressionOutputCallbackRecord infoFlags, CVImageBufferRef imageBuffer, CMTime timestamp, CMTime duration) { // 该函数的第2个参数就是解码方法中设置的用户自定义参数 // 先进行类型转换

    2.5K20发布于 2020-04-02
  • 来自专栏梧雨北辰的开发录

    iOS视频播放的基本方法

    switch (status) { case AVPlayerStatusReadyToPlay:{ //获取视频长度 CMTime 获取当前播放时间与总时间 在此之前我们需要首先了解一个数据类型,也就是上述操作中的CMTime, 在AVPlayer的使用中我们会经常用到它,其实CMTime是一个结构体如下: typedef 在快进视频到某一个位置的时候我们也需要创建CMTime作为参数,那么CMTime的创建方法有两种: //方法1: CMTimeMakeWithSeconds(Flout64 seconds, int32 self.player.currentItem.duration; CGFloat totalTime = CMTimeGetSeconds(duration); //当前AVPlayer的播放时长 CMTime cmTime = self.player.currentTime; CGFloat currentTime = CMTimeGetSeconds(cmTime); 5.

    5.4K20发布于 2018-07-06
  • 来自专栏iOS开发攻城狮的集散地

    iOS AVPlayer视频播放器

    addPeriodicTimeObserverForInterval:CMTimeMake(1.0, 10.0) queue:dispatch_get_main_queue() usingBlock:^(CMTime CGFloat current = CMTimeGetSeconds(time); weakSelf.current = current; CMTime //现有缓冲总长度 CGFloat totalBuffer = startSeconds + durationSeconds; //视频总时长 CMTime

    4.8K40发布于 2018-05-22
  • 来自专栏freesan44

    iOS15 推送动态语音播报解决方案

    AVMutableComposition *composition = [AVMutableComposition composition]; //音频插入的开始时间,用于记录每次添加音频文件的开始时间 __block CMTime URLAssetWithURL:[NSURL fileURLWithPath:audioFileURL] options:nil]; //获取本地mpe3e文件时长 CMTime

    1.5K40编辑于 2022-04-02
  • 来自专栏落影的专栏

    AVFoundation详细解析(一)视频合并与混音

    4,计算直接播放和变换的时间; // 确保最后合并后的视频,变换长度不会超过最小长度的一半 CMTime transitionDuration = self.transitionDuration NSValue *clipTimeRange = [self.clipTimeRanges objectAtIndex:i]; if (clipTimeRange) { CMTime

    2K60发布于 2018-04-27
  • 来自专栏sweet_iOS

    AVFoundation框架解析看这里(6)- AVAssetExportSession

    completedBlock: 裁剪完成后的回调 */ class func tailoringVideo(asset: AVURLAsset, outputName: String, startTime: CMTime , durationTime: CMTime, completedBlock: @escaping TailoringVideoBlock) { guard let documentsDir =

    1.7K20发布于 2020-12-23
  • 来自专栏一“技”之长

    iOS MachineLearning 系列(5)—— 视频中的物体运动跟踪

    videoProcessor = AVAssetImageGenerator(asset: videoAsset) videoProcessor.requestedTimeToleranceBefore = CMTime.zero videoProcessor.requestedTimeToleranceAfter = CMTime.zero // 获取视频时长 let durationSeconds: = [NSValue]() // 以每秒60帧为标准,获取总帧数 let totalFrames: Float64 = durationSeconds * 60 // 定义 CMTime

    95720编辑于 2023-04-27
  • 来自专栏关键帧Keyframe

    iOS AVDemo(12):视频解码,MP4 → H.264/H.265 → YUV 的源码丨音视频工程示例

    @property (nonatomic, assign, readonly) CMTime duration; // 媒体时长。 NSObject @property (nonatomic, copy) void (^pixelBufferOutputCallBack)(CVPixelBufferRef pixelBuffer, CMTime void *sourceFrameRefCon, OSStatus status, VTDecodeInfoFlags infoFlags, CVImageBufferRef imageBuffer, CMTime presentationTimeStamp, CMTime presentationDuration ) { if (status ! KFMP4Demuxer complete"); } }); } - (void)savePixelBuffer:(CVPixelBufferRef)pixelBuffer time:(CMTime

    82720编辑于 2022-06-13
领券