gpt4 book ai didi

iOS/AVFoundation : How to eliminate (occasional) blank frames between different videos within an AVComposition during playback

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:14:04 24 4
gpt4 key购买 nike

我正在开发的应用程序通过以连续的间隔多次将相同的 AVAssetTrack(从原始视频 url 创建)添加到相同的 AVComposition 来循环播放视频指定的次数。该应用程序通过从组合的 AVMutableCompositionTrack(对于 AVMediaTypeVideo)中“删除”时间范围并将新剪辑的 AVAssetTrack 插入到先前删除的时间范围中,类似地将新视频剪辑插入到现有组合中。

但是,在将如上所述的新剪辑插入原始循环视频的重复时间范围内后,偶尔且很少见,会产生空白帧,这些空白帧仅出现在视频循环的过渡点(在合成内) ,但仅在播放期间 - 视频可以正确无间隙地导出。

这让我相信问题出在 AVPlayer 或 AVPlayerItem 以及帧当前如何缓冲播放,而不是我如何插入/循环剪辑或选择正确的 CMTime 戳来执行此操作。该应用程序同时做很多事情(通过 NSTimer 在 UI 中循环可视化,通过 Amazing Audio Engine 播放音频)——我的问题可能是资源竞争的结果吗?

还有一点要注意:我知道 Assets 中的音频和视频之间的差异可能会导致故障(即底层音频比视频长度稍长),但由于我没有向 GPUImageWriter 添加 audioEncodingTarget我正在使用录制和保存视频,视频没有音频组件。

如果您能指出我的任何想法或方向,我们将不胜感激!提前谢谢了。

更新:闪烁与 GPUImage 库记录的“Had to drop a video frame”错误一致,根据创作者的说法,这与手机无法快速处理视频有关足够。多线程可以解决这个问题吗?

更新 2:所以闪烁实际上并不总是对应于必须丢弃视频帧错误。我还禁用了所有 AVRecorder/Amazing Audio Engine 代码,问题仍然存在,这不是这些引擎之间的资源竞争问题。我一直在记录 AVPlayer 项目的属性,并注意到始终为“否”的“isPlayBackLikelyToKeepUp”和始终为"is"的“isPlaybackBufferFull”。

最佳答案

所以问题就解决了 - 有点令人沮丧的是修复是如此简单。我只是使用了一个比 AVAssetTrack 的时间范围更短的时间范围来将视频添加到合成中。没有更多的闪光。希望用户不会错过那 30 秒 :)

shortened_duration = CMTimeSubtract(originalVideoAssetTrack.timeRange.duration, CMTimeMake(1,30));

关于iOS/AVFoundation : How to eliminate (occasional) blank frames between different videos within an AVComposition during playback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31479458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com