Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios AVPlayer可精确播放时间_Ios_Avplayer - Fatal编程技术网

Ios AVPlayer可精确播放时间

Ios AVPlayer可精确播放时间,ios,avplayer,Ios,Avplayer,使用AVPlayer,我想播放一个mov文件整整1秒钟,然后暂停它 目前我正在播放mov,然后设置一个计时器,使其在1秒后暂停,如下所示。不幸的是,这似乎并不准确,mov有时播放的时间略短或略长于1秒。请问有没有更准确的方法 [self.player4 play]; [self performSelector:@selector(pausePlayer4:) withObject:nil afterDelay:1.0]; - (void)pausePlayer4:(NSTimer *)time

使用AVPlayer,我想播放一个mov文件整整1秒钟,然后暂停它

目前我正在播放mov,然后设置一个计时器,使其在1秒后暂停,如下所示。不幸的是,这似乎并不准确,mov有时播放的时间略短或略长于1秒。请问有没有更准确的方法

[self.player4 play];
[self performSelector:@selector(pausePlayer4:) withObject:nil afterDelay:1.0];

- (void)pausePlayer4:(NSTimer *)timer
{
    [self.player4 pause];
}

最好的方法是在一秒钟后添加一个边界观察者来触发

    NSValue *endBoundary = [NSValue valueWithCMTime:CMTimeMakeWithSeconds(1.0, 300)];

    [self.player4 addBoundaryTimeObserverForTimes:@[endBoundary]
                                            queue:NULL
                                       usingBlock:^{
                                        [self.player4 stop];
                                        }];

    [self.player4 play];

即使您可以精确地触发事件,iOS设备上的媒体播放也会在一个完全不同的进程(守护进程)中进行,并且在执行IPC时总是存在延迟


根据您的需要,最好构建一个
AVMutableComposition
,播放
AVURLAsset
中整整一秒钟的内容,然后将合成内容分配给播放机。

尝试将
performSelector
放在主线程中?您的延迟要求有多精确?毫秒?错误秒数?。。。您可以以相当高的精度使用
dispatch\u after
,请注意,使用
dispatch\u after
时有一个
leeway
值,该值默认设置为时间间隔的+/-10%@matt有一个非常好用的函数,他就是为此而写的。谢谢,如果是这样的话,我最好的选择可能是首先创建几个单独的1秒MOV?动画仅持续1秒。将动画捆绑到较长的mov中纯粹是为了方便,并且基于我可以准确控制播放的假设是的,你最好制作1秒的电影。由于需要推送的数据量很大,实时播放视频非常困难。对像素计数、每像素字节数和每秒帧数进行一些数学运算,你就会开始明白我的意思:)