使用 AVCaptureMovieFileOutput 记录的时间差异

Posted

技术标签:

【中文标题】使用 AVCaptureMovieFileOutput 记录的时间差异【英文标题】:Difference in time recorded using AVCaptureMovieFileOutput 【发布时间】:2013-05-27 10:12:33 【问题描述】:

我通过设置最大持续时间限制使用AVCaptureMovieFileOutput 录制了一个电影文件。 例如:如果我想录制 10 秒的视频,我已经为电影文件设置了最大持续时间和其他属性,如下所示...

         Float64 TotalSeconds = 10;
        int32_t preferredTimeScale = 30
        CMTime maxDuration = CMTimeMakeWithSeconds(TotalSeconds, preferredTimeScale);
        aMovieFileOutput.maxRecordedDuration = maxDuration;
        aMovieFileOutput.minFreeDiskSpaceLimit = 1024 * 1024;

但是录制的视频只显示 9 秒(我使用 MPMoviePlayerController 播放),为什么会有那个时差。如何准确录制 10 秒。我在设置最大持续时间时做错了什么。谢谢。

【问题讨论】:

【参考方案1】:

请确保输出具有良好的帧率

#define CAPTURE_FRAMES_PER_SECOND 30


//SET THE CONNECTION PROPERTIES (output properties)
AVCaptureConnection* captureConnection = [self.movieFileOutput connectionWithMediaType:AVMediaTypeVideo];

if(captureConnection.supportsVideoMinFrameDuration) captureConnection.videoMinFrameDuration = CMTimeMake(1,CAPTURE_FRAMES_PER_SECOND);
if(captureConnection.supportsVideoMaxFrameDuration) captureConnection.videoMaxFrameDuration = CMTimeMake(1,CAPTURE_FRAMES_PER_SECOND);

CMTimeShow(captureConnection.videoMinFrameDuration);
CMTimeShow(captureConnection.videoMaxFrameDuration);

【讨论】:

以上是关于使用 AVCaptureMovieFileOutput 记录的时间差异的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)