首页 > 解决方案 > CollectionView 项目添加中的视频播放器会导致视频帧随机播放 Xamarin Forms

问题描述

我有CollectionView一个VideoPlayer元素DataTemplate来自Xamarin Forms 示例项目。在 iOS 上,渲染的视频播放器AVPlayer用于播放视频。我还有一个按钮,按下时会ItemSourceCollectionView. 如果我播放第一个,比如说,三个项目并在随机帧/时间上将它们全部暂停,然后按此添加更多项目按钮,AVPlayeriPhone 上这三个实例上的冻结图像帧会以某种奇怪的顺序打乱/切换。更详细地说:

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

在这些被“洗牌”之后,如果我取消暂停第一项,它会播放动画的原始视频,第二项和第三项也是如此。CollectionView据我了解,唯一的问题是,AVPlayerCollectionView. 此问题仅发生在AVPlayer. 任何其他元素都不会重现此行为。我尝试过使用 ffimageloading CahcedImage、简单标签和其他元素,但它只是AVPlayer's渲染、暂停的帧图像,它们会被打乱。我意识到这个问题可能有一些在 Xamarin Forms 级别上无法解决的深层根源,但只是想在这里试试运气。

我的 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元素替换为任何其他元素时,比如Image,表现得应该如此。另一件事是,VideoPlayer当在ListView(with CachingStrategy=RecycleElement) 而不是CollectionView. 但不幸的是,ListView缺少很多功能,例如在滚动时确定最中心的项目等。

标签: xamarinxamarin.formsavplayercollectionview

解决方案


推荐阅读