禁用AVSampleBufferDisplayLayer向前查找的iOS画中画

zbdgwd5y  于 2023-02-01  发布在  iOS
关注(0)|答案(1)|浏览(367)

我有一个AvPictureInPictureController,它应该在播放音频时显示图像。我创建了一个AVSampleBufferDisplayLayer,它有一个带图像的CMSampleBuffer和两个必要的代理AVPictureInPictureSampleBufferPlaybackDelegateAVPictureInPictureControllerDelegate。我设置pictureInPictureController.requiresLinearPlayback = false,以便图片窗口中的图片显示向后搜索、播放/暂停和向前搜索按钮。下面是我的时间范围函数:

func pictureInPictureControllerTimeRangeForPlayback(_ pictureInPictureController: AVPictureInPictureController)
    -> CMTimeRange {
        let duration = player.state.duration

        if duration == 0 {
            return CMTimeRange(start: .negativeInfinity, duration: .positiveInfinity)
        }

        return CMTimeRange(
            start: CMTime(
                seconds: .zero,
                preferredTimescale: 10_000
            ),
            duration: CMTimeMakeWithSeconds(
                duration,
                preferredTimescale: 10_000
            )
        )
    }

我的问题是,在画中画中,向前搜索被禁用。向后搜索工作正常,播放/暂停也一样。但是向前搜索被禁用,我还不知道为什么会发生这种情况。有什么想法吗?
我试图以不同的方式计算CMTimeRange,但它总是相同的行为。

qrjkbowd

qrjkbowd1#

我在www.example.com上找到了这个项目https://github.com/getsidetrack/swiftui-pipify/blob/main/Sources/PipifyController.swift#L250其中CMTimeRange是从CACurrentMediaTime()计算出来的,尽管我不知道为什么会有这么大的时间范围(比如以秒为单位计算一周),但CACurrentMediaTime()是正确的提示。
这就是pictureInPictureControllerTimeRangeForPlayback现在的样子:

func pictureInPictureControllerTimeRangeForPlayback(
    _ pictureInPictureController: AVPictureInPictureController
) -> CMTimeRange {
    if player.duration == 0 {
        return CMTimeRange(start: .negativeInfinity, duration: .positiveInfinity)
    }

    let currentTime = CMTime(
        seconds: CACurrentMediaTime(),
        preferredTimescale: 60
    )

    let currentPosition = CMTime(
        seconds: state.position,
        preferredTimescale: 60
    )
    return CMTimeRange(
        start: currentTime - currentPosition,
        duration: CMTime(
            seconds: player.duration,
            preferredTimescale: 60
        )
    )
}

相关问题