菜鸟教程小白 发表于 2022-12-13 13:37:35

ios - AVPlayer 在缓冲区已满并重新开始时停止播放


                                            <p><p>我有一个 Collection View ,其中有一个 <code>AVPlayer</code> 在单元格内,并且 <code>AVPlayer</code> 开始循环播放 <code>AVPlayerItem</code> </p>

<pre><code>-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
</code></pre>

<p>被调用。这很好用,但问题是在 <code>AVPlayer</code> 播放该项目几次后,视频不再显示,但我能听到它的声音。
我还为像这样播放的每个项目添加了值 <code>@"playbackBufferFull"</code> 的观察者:</p>

<pre><code>;
</code></pre>

<p>我注意到当视频停止时,值 <code>@"playbackBufferFull"</code> 的观察者方法被调用,首先我想知道是什么导致缓冲区变满,第二个也是最重要的重要的是如何在视频停止时恢复 <code>AVPlayer</code> ;
我尝试调用 <code>;</code> 并用新项目替换该项目,但它不起作用,观察者方法:</p>

<pre><code>- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
                                    change:(NSDictionary *)change context:(void *)context {


                if (] &amp;&amp; )
                {
                  //this method is get called when the video stop showing but i can still hear it
               //how can i resume the video?
                }

            }
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我的解决方案是:</p>

<p>首先在 <code>viewDidLoad</code> 中为 <code>AVPlayerItemPlaybackStalledNotification</code> 添加观察或 ...</p>

<pre><code>[ addObserver:self
                                       selector:@selector(playerItemDidReachEnd:)
                                             name:AVPlayerItemPlaybackStalledNotification
                                           object:self.avPlayer.currentItem];

-(void)playerItemDidReachEnd:(NSNotification*)noti

{
//thisisn&#39;t good way but i can&#39;t find the best way for detect best place for resume again.
NSLog(@&#34;\n\n give Error while Streaminggggg&#34;);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    ;
});
}
</code></pre>

<p><strong>但是</strong>
也许您可以找到再次调用 play 方法进行恢复的最佳方法!
请检查您是否获得 <code>AVPlayerStatusReadyToPlay</code>key 补丁?
如果你得到 ,你可以在那里调用 <code>play</code> 方法。
请通知我结果</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - AVPlayer 在缓冲区已满并重新开始时停止播放,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34845057/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34845057/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - AVPlayer 在缓冲区已满并重新开始时停止播放