我有来自不同的三星设备(J6,S6,S7,.)的几个用户的报告,在那里录制的视频不播放,所以似乎被破坏了。回放在第一帧时似乎被卡住/冻结,而音频则正确播放。
这个问题发生在使用Android的MediaRecorder API录制的视频中。
我能收集到的信息是当一个设备进入深度睡眠时,所以关闭屏幕并在几分钟内不使用该设备。当设备再次活动时,由于一些仍然未知的原因,,新记录在第一帧和第二帧之间产生过大的增量持续时间,给人以被冻结或只有1帧的回放的印象。
我在互联网上发现,这个问题在不同的网站上都有报道,但没有适当的解决方案。有人找到解决办法了吗?三星似乎不承认这个问题。
发布于 2020-07-08 17:49:56
进一步的调查表明,这一问题可能是由三星的一些型号的系统缺陷引起的。
检查一些用户发送的损坏视频,我可以确认,在所有受影响的设备中,第一个帧有一个夸张的大增量持续时间。
因此,对于一个不正确的增量时间,它给人的印象是视频被冻结了,当它实际上只是在屏幕上显示第一帧时,按照其定义的增量持续时间,这对于损坏的视频来说是非常长的。
为了修复这些示例,我用来自第二帧的值替换了第一帧的增量时间(只有第一帧受影响)。然后视频按预期正确播放。我使用IsoParser来完成这个任务。
但这不是一个正确的解决方案,因为它意味着必须检查每一个视频,并重新包装,如果受到影响,因为没有办法修复它的地方。该操作要求创建一个新的视频文件,用正确的增量时间复制原始文件的内容,并将原始文件替换为固定的文件。
正确的解决方案是了解MediaRecorder API如何计算增量时间,以及为什么在某些情况下受影响的设备为第一帧生成无效值。
我唯一的猜测是,如果MediaRecorder实现使用System.nanoTime时钟,那么我在一些StackOverflow帖子中看到,这个系统时钟有时会给出一个奇怪的值,当它从设备深度睡眠中回来时。如果这是真正的问题,那么唯一真正的解决办法就是三星修复它们的执行。
https://stackoverflow.com/questions/62174512
复制相似问题