我目前正在使用Android Jelly Bean MediaCodec API開發簡單的視頻播放器。Android MediaCodec API視頻播放速度過快
我提取音軌,在不同的線程中播放音頻和視頻。問題是視頻軌道總是播放得太快。
哪裏可以隱藏問題?
音頻和視頻的處理方式幾乎相同,除了通過AudioTrack播放音頻並將視頻渲染到表面之外。
我目前正在使用Android Jelly Bean MediaCodec API開發簡單的視頻播放器。Android MediaCodec API視頻播放速度過快
我提取音軌,在不同的線程中播放音頻和視頻。問題是視頻軌道總是播放得太快。
哪裏可以隱藏問題?
音頻和視頻的處理方式幾乎相同,除了通過AudioTrack播放音頻並將視頻渲染到表面之外。
如果以最高速度渲染幀,那麼在大多數設備上將會達到60fps。您需要根據編碼器提供的演示時間戳對其進行調整。
例如,如果輸入是Android支持的格式(例如典型的.mp4文件),則可以使用MediaExtractor類來提取每個幀。時間戳可以用getSampleTime()
檢索。您想通過連續幀上時間戳之間的差異來延遲渲染 - 不要假定第一幀的時間戳記爲零。
另外,不要假定視頻幀以恆定速率出現(例如30fps)。對於一些來源,幀將不均勻地到達。
請參閱Grafika中的「播放視頻(TextureView)」示例,特別是SpeedControlCallback
類。 gen-eight-rects.mp4
視頻使用可變的幀持續時間來鍛鍊它。如果您選中「以60fps播放」框,則會忽略演示文稿時間戳。
你從哪裏得到這個? – BlueVoodoo
你可以請你發佈你的代碼。這將有助於客棧調試 – itsmeagain
我有同樣的問題,你有想過嗎? – xiaowoo