寻求特定时间线后的 MPMoviePlayerController 空白帧
Posted
技术标签:
【中文标题】寻求特定时间线后的 MPMoviePlayerController 空白帧【英文标题】:MPMoviePlayerController blank frame after seeking to particular time-line 【发布时间】:2011-09-01 11:49:45 【问题描述】:我正在开发一个 iPhone 应用程序,我在其中使用 MPMoviePlayerController 播放视频。我使用自定义控件来播放视频。
我有一个显示视频时间线的滑块。使用此用户可以将电影搜索到电影的任何时间线。
当用户连续移动滑块时:
-
仅在第一次暂停视频;
[MPMoviePlayerController-obj pause]
MPMoviePlayerController-obj.currentPlaybackTime = slider.value
当滑块动作结束时:
-
播放视频;
[MPMoviePlayerController-obj play]
这会从用户离开滑块的位置播放电影。但是,当电影播放完毕时,它会导致空白帧。这个缺陷是随机出现的;即不是所有的时间。
得到空白帧的原因是什么?我该如何解决?
【问题讨论】:
我在调试时也注意到,如果我在用户连续移动滑块时不设置 MPMoviePlayerController-obj.currentPlaybackTime ,它可以正常工作。但是,我想这样做是因为用户需要在通过移动滑块设置时间线时查看帧。 另外,当电影播放完毕(MPMoviePlayerPlaybackDidFinishNotification),如果问题存在,则MPmoviePlayerController的currentPlaybackTime为0;否则它等于电影的持续时间。有人可以帮帮我吗? 【参考方案1】:我不确定这是否可行,但请尝试将initialPlaybackTime
设置为slider.value
或currentPlaybackTime
。
【讨论】:
我已经尝试将 initialPlaybackTime 和 endPlaybackTime 设置为滑动(最小值和最大值)+ MPMoviePlayerController 的 currentPlaybackTime。但是,问题仍然存在。另外,我尝试了以下操作:在 [MPMoviePlayerController-obj play] 之后,我再次尝试将 currentPlaybackTime 设置为 slide.value。现在,没有黑框问题。但是,当滑块动作结束时,帧会重复(一个是由于播放,另一个是当我设置 currentPlaybackTime 时)。这会帮助别人帮助我吗? @Till,我的错。我将删除该注释。我错过了那份文档。 根据我的经验,使用流时 initialPlaybackTime 不起作用 - 我没有彻底调查,但在简短的测试中使用它并没有导致正确的初始搜索。我的解决方案是在播放状态更改为正在播放时使用 currentPlaybackTime。 不要给@Ben负面标记,他只是显示了一个选项,尽管他不确定并且不应该受到惩罚。【参考方案2】:为确保您的内容没有缺陷,因此可能触发该问题,您应该尝试使用 Apple 的参考视频内容复制错误的 MPMoviePlayerController
结果。
我个人观察到许多与编码不当有关的问题。处理有损压缩内容时往往会发生奇怪的事情。这适用于视频(i 帧与 p 帧)以及音频(可变比特率)。
报告的播放持续时间不正确。此类问题可能会导致意外的完成状态。我见过MPMoviePlayerController
仍然显示要播放几秒钟的情况,即使实际视频显然已经完成。一旦用户在视频中四处寻找,这些情况就会经常发生。
一旦您确定使用给定的示例文件也出现了问题,您应该提交错误报告。
【讨论】:
感谢您的回复。我会试试这个。针对“报告播放时长不正确”,我们可以使用 AVFoundation 调用来生成电影时长 但是,我们不能改变 MPMoviePlayerController 的影片时长属性。如何验证这是否是导致问题的原因? 我已经为您提供了一些正确编码的内容选项。该内容的行为与您自己的内容有什么不同吗?以上是关于寻求特定时间线后的 MPMoviePlayerController 空白帧的主要内容,如果未能解决你的问题,请参考以下文章