视频播放器内置CollectionView项添加导致视频帧混乱Xamarin表单

视频播放器内置CollectionView项添加导致视频帧混乱Xamarin表单,xamarin,xamarin.forms,avplayer,collectionview,Xamarin,Xamarin.forms,Avplayer,Collectionview,我有一个CollectionView,它的DataTemplate中有一个VideoPlayer元素,该元素取自。在iOS上,渲染的视频播放器使用AVPlayer播放视频。 我还有一个按钮,按下该按钮时,会将更多项目添加到CollectionView的ItemSource。 如果我播放第一个,比如说,三个项目,并在随机帧/时间上暂停它们,然后按下“添加更多项目”按钮,iPhone上这三个AVPlayer实例上的冻结图像帧会以某种奇怪的顺序被洗牌/切换。 更详细地说: 如果收藏视图的第一个项目暂停

我有一个
CollectionView
,它的
DataTemplate
中有一个
VideoPlayer
元素,该元素取自。在iOS上,渲染的视频播放器使用
AVPlayer
播放视频。 我还有一个按钮,按下该按钮时,会将更多项目添加到
CollectionView
ItemSource
。 如果我播放第一个,比如说,三个项目,并在随机帧/时间上暂停它们,然后按下“添加更多项目”按钮,iPhone上这三个
AVPlayer
实例上的冻结图像帧会以某种奇怪的顺序被洗牌/切换。 更详细地说:

如果
收藏视图
的第一个项目暂停了一些动画视频,第二个项目暂停了一些体育游戏视频,第三个项目暂停了一些森林图像视频,当我按下添加更多项目按钮时,一些新项目会添加到
收藏视图
项目源
,我看到体育游戏视频帧移动到第一个项目的
AVPlayer
实例,森林图像视频帧移动到第二个项目的
AVPlayer
实例,动画帧移动到第三个项目的
AVPlayer
实例。为了澄清:项目本身保持在其确切位置,只有AVPlayer中的视频帧被切换

在这些被“洗牌”之后,如果我取消第一个项目的暂停,它将播放其原始的动画视频,第二个和第三个项目也是如此。据我所知,唯一的问题是在
CollectionView
的缓存/单元重用机制中的某个地方,当新项目添加到
CollectionView
时,
AVPlayer
的缓存帧会按一定顺序切换。 此问题仅发生在
AVPlayer
上。任何其他元素都不会重现此行为。我尝试过ffimageloading的
CahcedImage
、简单标签和其他元素,但只有
AVPlayer的
渲染的暂停帧图像会被洗牌。 我意识到这个问题可能有一些深层次的根源,在Xamarin表单级别上无法解决,但我只是想在这里碰碰运气

我的CollectionView代码非常基本:

<CollectionView ItemsSource="{Binding ScrollArticles}" 

                AbsoluteLayout.LayoutBounds="0,0,1,1"
                AbsoluteLayout.LayoutFlags="All"
        RemainingItemsThreshold="5"
                RemainingItemsThresholdReachedCommand="{Binding LoadMoreItems}"
                VerticalOptions="FillAndExpand" 
                HorizontalOptions="FillAndExpand"
                ItemsLayout="VerticalList"
                x:Name="CategoryItemsListView"
                VerticalScrollBarVisibility="Always"
                Scrolled="CategoryItemsListView_OnScrolled"

                >

    <CollectionView.ItemTemplate>
        <DataTemplate>

                <elements:VideoPlayer Margin="0,0,0,15" Source={Binding video_url}>

                </elements:VideoPlayer>

        </DataTemplate>
    </CollectionView.ItemTemplate>
</CollectionView>

当使用任何其他元素(例如
图像
)替换
视频播放器
元素时,相同的精确代码会正常工作。
另一件事是相同的
VideoPlayer
代码在
ListView
内部实现时(使用
CachingStrategy=RecycleElement
)而不是
CollectionView
)不会执行此操作。但不幸的是,
ListView
缺少很多功能,例如在滚动时确定最中间的项目等。

您能与我们分享您的测试项目吗?我试图在我这边重现这个问题,但我失败了。嗨,我会在我完成当前项目后尝试这样做。不幸的是,出于最后期限的考虑,我被迫切换到ListView,因为对于相同的代码,它没有相同的错误。好的,一旦您有时间共享测试项目,我将进行检查:)。您可以与我们共享您的测试项目吗?我试图在我这边重现这个问题,但我失败了。嗨,我会在我完成当前项目后尝试这样做。不幸的是,出于最后期限的考虑,我被迫切换到ListView,因为它对于相同的代码没有相同的错误。好的,一旦您有时间共享测试项目,我将检查:)。