我正在使用MediaCodec
和MediaExtractor
以可变费率播放视频,包括向前和向后。代码使用SpeedControlCallback之类的东西来建立帧间暂停 - 从输出缓冲区向它提供presentationTimeUs
字段。
这样可以正常工作,99%的时间,但似乎三星S6 上的AVC编解码器在向后搜索时提供了错误的演示时间 - 它们固定在任何最高值时寻求前锋,如果这是有道理的。缓冲区中的数据是正确/更改的 - 它只是与固定的显示时间不对应。
S6可以使用品牌/ ftype avc1
来处理MP4文件中的向后搜索,但我尝试过的其他品牌的H.264视频(mp42
,isom
) 100%的工作时间。相同的文件在Samsung S5以及我尝试过的所有其他设备上都能正常工作。
编解码器记录下来:
09-15 11:16:21.611 2992-16618/? W/EXYNOS_VIDEO_DEC﹕ sCurrentTimestamp(6002033) is smaller than latestTimeStamp(7001744), uses latestTimeStamp
每次向后搜索(SEEK_TO_PREVIOUS_SYNC
),并为所有关键帧提供错误的latestTimestampValue
。
有没有人在Galaxy S6上遇到与AVC编解码器类似的问题,或者是否可以提供任何(非hacky)解决方案?