Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.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 9上使用AVPlayer和Swift反向播放视频_Ios_Swift_Video_Reverse_Avplayer - Fatal编程技术网

在IOS 9上使用AVPlayer和Swift反向播放视频

在IOS 9上使用AVPlayer和Swift反向播放视频,ios,swift,video,reverse,avplayer,Ios,Swift,Video,Reverse,Avplayer,我有一个录制的视频剪辑,我想反向播放 向前播放可以,但只要我搜索到视频文件的结尾并将播放速率设置为-1.0,视频剪辑就会搜索到剪辑的结尾(我在视频上方的时间线栏中看到),但不会反向播放 在我展示播放器视图控制器后,我检查它是否准备好使用: print("readyForDisplay = \(playerViewController.readyForDisplay)") 这告诉我,一切都准备好了 我检查是否可以反向播放: let reversePlay = player

我有一个录制的视频剪辑,我想反向播放

向前播放可以,但只要我搜索到视频文件的结尾并将播放速率设置为-1.0,视频剪辑就会搜索到剪辑的结尾(我在视频上方的时间线栏中看到),但不会反向播放

在我展示播放器视图控制器后,我检查它是否准备好使用:

            print("readyForDisplay = \(playerViewController.readyForDisplay)")
这告诉我,一切都准备好了

我检查是否可以反向播放:

let reversePlay = playerViewController.player!.currentItem?.canPlayReverse
        print("reversePlay = \(reversePlay)")
这是真的

然后,我寻找到剪辑的结尾,并将播放速率设置为-1.0进行反向播放

playerViewController.player!.seekToTime(playerViewController.player!.currentItem!.asset.duration)
        playerViewController.player!.rate = -1.0
我相信已经走到了这一步,它已经准备好了,因为如果我添加以下内容:

let status : AVPlayerItemStatus? = playerViewController.player!.currentItem?.status

        if status == AVPlayerItemStatus.ReadyToPlay {
            print("Ready to play")
        }
它向我显示该剪辑已准备好播放,因此我假设已完成对剪辑结尾(仅2秒长)的搜索

然后我播放剪辑:

            playerViewController.player!.play()
如果我不寻求结束并尝试更改速率以将其设置为反向播放,则播放效果很好

playerViewController.player!.seekToTime(playerViewController.player!.currentItem!.asset.duration)
        playerViewController.player!.rate = -1.0

我在这里遗漏了什么?

我决定在启动视频后添加一些日志记录,发现启动前的速率为-1,启动后的速率为1,因此速率似乎重置为1

这可能是一只虫子吗


无论如何,在请求播放视频后立即设置速率会产生渴望的效果。

它是否会因为结束而立即被忽略?你试过 SektotoTime/Cuto >中间的一个点吗?如果这是问题所在,您可以将其设置为距离结束时间1-2秒。@Headstock67请注意,在检查canPlayReverse并将播放速率设置为-1后,您需要使用reversePlaybackEndTime检查结束时间感谢Tim的建议。我用seekToTime把视频剪辑到中间。比赛时它跳到中间,然后继续向前打。因此,将播放速率设置为-1.0似乎不会强制反向播放。利奥,谢谢你的提示。我不完全确定你所说的“检查结束时间”是什么意思,我浏览了Apple文档,其中指出reversePlaybackEndTime默认为kCMTimeInvalid,在这种情况下,反向播放的有效时间是kCMTimeZero,据我所知,这是一个保持视频起点的常数。为了确保它的目标是视频的开始,在将速率设置为-1.0后,我尝试将reversePlaybackEndTime设置为kCMTimeZero,但这没有什么区别。这是因为play()方法的文档说明:“调用此方法与将速率设置为1.0相同。”