对视频进行编码以循环播放?

发布于 2024-12-11 09:05:34 字数 486 浏览 0 评论 0原文

这与 Looping a video with AVFoundation AVPlayer 有关,但该问题已得到解答。我想要实现的是使用 AVPlayer 实现无缝循环。使用 h264 编码视频* 的循环之间存在明显的卡顿现象,随着 iOS 5 的更新,这种卡顿情况变得更糟。这是否与视频编码方式有关,而不是与 AVPlayer 有关?循环由playerItemDidReachEnd 通知触发,如上面的链接所述。

谢谢。

* 这是我们用来编码视频的 ffmpeg 命令,如果有帮助的话:

ffmpeg -i -y -sameq -vcodec libx264 -vpre hq -crf 20 -an

(是的,文件不还没有声音,所以 -an 是故意的。)

This is somewhat related to Looping a video with AVFoundation AVPlayer but that question is answered. What I'm trying to achieve is seamless looping using an AVPlayer. There is a noticeable stutter between loops using h264-encoded videos* that has gotten worse for some reason with the update to iOS 5. Could this have something to do with the way the videos are encoded rather than the AVPlayer? The looping is triggered by a playerItemDidReachEnd notification as described in the link above.

Thanks.

* here's the ffmpeg command we're using to encode the videos, if that helps:

ffmpeg -i -y -sameq -vcodec libx264 -vpre hq -crf 20 -an

(yes, the files don't have sound (yet) so the -an is intentional.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

坏尐絯℡ 2024-12-18 09:05:34

将参考帧数设置为 1 和/或将 b 帧设置为 0 和/或将轮廓设置为基线怎么样?

一种合理的解释是:

默认情况下,h.264 解码器可以解码所有类型的视频,它必须在视频开头缓冲一些帧。因此,如果您正在循环(如果正在重置解码器),则可能会出现缓冲。您是否在不重置解码器的情况下循环?读取文件时解码器是否因 eos 而重置?如果是,您可以通过避免读取最后一帧之后并触发 eos 条件来防止这种情况发生吗?

如果你有更好的控制(虽然不确定),你可以避免它的一种方法是在返回循环时不提供流头(sps/pps)?

How about you set number of reference frames to 1 and/or b frames to 0 and/or profile to baseline?

One plausible explanation:

By default for a h.264 decode decode all kinds of videos, it must buffer some frames at the begining of a video. So if you are looping (if it is reseting the decoder) perhaps the buffering is coming in. Are you looping without reseting the decoder? Is the decoder getting reset because of eos while reading file? If yes, can you prevent that by avoiding reading beyond last frame and triggering eos condition?

If you had finer control ( not sure on that though ) one way you can avoid it is by not feeding the stream header (sps/pps) when returning back to loop?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文