函数 上升沿取数()
如果((M状态[0]) 且 (上次M0==假))
视频播放器1.现行播放位置=6000
弹出提示("6000")
结束 如果
上次M0=M状态[0]
如果((M状态[1]) 且 (上次M1==假))
视频播放器1.现行播放位置=8000
弹出提示("8000")
结束 如果
上次M1=M状态[1]
如果((M状态[2]) 且 (上次M2==假))
视频播放器1.现行播放位置=10000
弹出提示("10000")
结束 如果
上次M2=M状态[2]
如果((M状态[3]) 且 (上次M3==假))
视频播放器1.现行播放位置=12000
弹出提示("12000")
结束 如果
上次M3=M状态[3]
结束 函数
弹窗很及时,但是视频切换不怎么灵敏,是不是视频播放组件的问题
不灵敏意思是不动作,没反应,过再久也不跳转。后面尝试多次发现,两次设置视频的时间的播放位置直接不能太短(比如第一次设置视频位置2秒处,第二次设置视频位置4秒就不灵,间隔5秒以上才能跳转),播放位置间隔大灵敏度就高。
经查,安卓自带的播放器组件当设置跳转播放的间隔太短时,确实不会切换。
原因一:播放器内部的“限流”机制
从 Android 9 (API 28) 开始,MediaPlayer 内部有了明确的“限流”机制。如果你连续的 seekTo 操作执行得太快,或间隔太短,系统会自动忽略或跳过中间的那些指令,只执行最后一个。
原因二:seekTo 本身是异步操作
seekTo 会让播放器内部做很多工作:停止解码、清理缓冲区、寻找关键帧、准备新位置的数据流。当你间隔时间过短时,系统会来不及处理这些工作,然后报错或忽略。
原因三:视频本身缺少关键帧
视频一般可分为关键帧(I帧)和预测帧(P/B帧)。播放器只能从关键帧开始播放。如果视频关键帧间隔很大(比如每5秒才有一个),你跳转到的位置如果没有关键帧,播放器会自动“吸附”到最近的关键帧位置。如果你的目标是4秒处,但那里没有关键帧,播放器的两个先后 seek 操作可能都会跳到最近的同一个关键帧(比如2秒处),导致看似“没反应”。
您好,您说的“视频切换不怎么灵敏”指的是:修改播放器“现行播放位置”时,播放器无法快速跳转到指定播放位置吗?如果设置后,存在小于3秒的延迟都是正常的,这个问题和设备、视频大小,帧数都有关系,视频体积越大,设备配置较低,问题可能会更明显,您现在修改播放位置后,播放器间隔了多久(几秒)才跳转到了指定位置播放视频呢?
不灵敏意思是不动作,没反应,过再久也不跳转。后面尝试多次发现,两次设置视频的时间的播放位置直接不能太短(比如第一次设置视频位置2秒处,第二次设置视频位置4秒就不灵,间隔5秒以上才能跳转),播放位置间隔大灵敏度就高。
您好,您说的“视频切换不怎么灵敏”指的是:修改播放器“现行播放位置”时,播放器无法快速跳转到指定播放位置吗?如果设置后,存在小于3秒的延迟都是正常的,这个问题和设备、视频大小,帧数都有关系,视频体积越大,设备配置较低,问题可能会更明显,您现在修改播放位置后,播放器间隔了多久(几秒)才跳转到了指定位置播放视频呢?