unity用AVPro做完整的视频播放器,暂停状态下无法拖拽到视频最后一帧

文章讲述了在Unity使用AVPro进行视频播放时,由于Seek方法在定位视频最后一帧存在微小误差,导致在暂停状态下无法准确拖动进度条至最后一帧。作者提出了一种解决方案,即在差值小于40毫秒时判断为视频结束,并提供了相应的代码实现。文章欢迎读者讨论和指正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

用unity的AVPro做视频播放器

包括视频播放器的大部分功能,视频进度条的拖拽跳转等。


问题描述

在暂停状态下,视频进度条无法拖到视频最后一帧


原因分析:

Seek方法的如果要定位到视频结尾的话,会有误差,大概误差在几毫秒,如果按30帧的视频来看的话,应该是不到一帧。


解决方案:

只能去手动的编写逻辑,牺牲掉最后的这几毫秒的播放,只要是当前时长和总时长的差值控制在正常阈值之内,就判定为视频被划到了最后,在代码上的处理如下:

/// <summary>
   /// 设置视频播放完毕的状态
   /// </summary>
   /// <param name="mediaPlayer">mediaPlayer组件</param>
   /// <param name="isRewind">是否重置视频</param>
   /// <param name="isPause">是否暂停视频</param>
   public void SetVideoEndState(MediaPlayer mediaPlayer, bool isRewind, bool isPause)
   {
       //限位,暂停状态下seek不到最后的几毫秒
       if (Math.Abs(mediaPlayer.Control.GetCurrentTimeMs() - mediaPlayer.Info.GetDurationMs()) < 40)
       {
           Debug.Log("视频播放完了");
           if (isRewind)
           {
               mediaPlayer.Rewind(isPause);
           }

           ToggleControlPlay(!isPause, mediaPlayer);
       }
   }

这里设定的值是40毫秒。

总结

欢迎大佬多多来给萌新指正,欢迎大家来共同探讨。
如果各位看官觉得文章有点点帮助,跪求各位给点个“一键三连”,谢啦~

声明:本博文章若非特殊注明皆为原创原文链接
https://blog.youkuaiyun.com/Wrinkle2017/article/details/129623673
————————————————————————————————

💢💢版权声明

版权声明:本博客为非营利性个人原创
所刊登的所有作品的著作权均为本人所拥有
本人保留所有法定权利,违者必究!
对于需要复制、转载、链接和传播博客文章或内容的
请及时和本博主进行联系
对于经本博主明确授权和许可使用文章及内容的
使用时请注明文章或内容出处并注明网址
转载请附上原文出处链接及本声明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值