我对ExoPlayer的整体使用非常简单,只播放本地视频,而我是图书馆的新手,仍然可以处理Sources / Timelines / Periods / etc如何协同工作。
我想在Android设备上的任意视频中插入虚拟冻结帧。
例如,假设我刚刚加载了一个1分钟的剪辑,并且想在30秒的标记处插入一个10秒的冻结帧,并让视频(从UI /播放器栏的角度来看)显示到现在是连续播放的1分钟10分钟的视频,当播放原始视频中30秒标记处的单个帧时播放10秒,而不是一个帧时间,但是UI栏会在同一时间对其进行擦洗连续速率与视频的其他任何时段相同。
将ClippingMediaSource和ConcatinatingMediaSource组合在一起似乎很合适,例如将视频剪辑为StartSource,EndSource和MidSource(冻结帧部分)。
到目前为止,我解决此问题的方法是提取要冻结的帧的位图图像,然后将其编码为自己的视频(非常重),或者修改UI层代码以显示它作为播放器视图上的图像,同时播放了一些正确长度的虚拟MidSource。
这两个都是相当混乱的执行,并且提取的帧(即使使用OPTION_CLOSEST也使用MediaMetadataRetriever.getFrameAtTime)并不总是与exoplayer当时实际显示的内容完全匹配,因此通常会引起一些跳跃播放ConcatinatingMediaSource时会切换源。
是否有一种在概念上更简单的方法来实现此目的,而我还没有深入了解ExoPlayer的工作原理,就错过了它?具有自己的自定义时间轴的自定义MediaSource是否适合于此?如果是的话,那么在不首先成为ExoPlayer专家的情况下如何实现此功能的任何一般性指示?