使用 android 端的 mediacodec 硬解,会出现一个奇怪的问题,程序运行在电视上,如果电视上背景有视频在播放时,然后立即唤起我的 app 开始解码视频就会出现画面非常缓慢的情况(使用 Surface 直接渲染的模式,不使用 Surface 模式直接渲染好像就没问题),如果是在电视一个背景是静态的页面,然后唤起我的 app ,就不会出现这种情况,播放很流畅。 两种情况 cpu 占用都是 10% 左右。 一开始我以为是硬件问题,但是另外一个使用 ijkplayer 的程序就没有这种问题。 这种到底是什么原因导致的呢,解码部分代码如下:
1
vsyf 2023-08-16 01:56:49 +08:00 via Android
dequeue output buffer 的间隔太长。而且你也没做 av sync ,画面过快过慢都正常。
|
3
vsyf 2023-08-16 14:20:35 +08:00
dequeue output buffer 的间隔太长
=>这个看错了,那个是 dequeue 的 timeout 。(你这个是 rust 吗?没写过有点看不懂) 我这个时间设置多少都是一样的,而且我的是直播流,不需要做 sync => 即使你是直播流,也需要进行 AV SYNC , 甚至没有 audio ,你也需要对 system clock 。就像你的代码,一解码完就送去显示,如果解码够快,你可能看你的视频画面是加速播放的。 而对于你现在画面变慢的问题,同样要进行 AV SYNC ,将来的太晚的 frame 通过 release_output_buffer(output_buffer,false) 不进行渲染,尽快把 buffer 还回去,不要卡住整个流程。 |