创建一个播放器类,继承QLabel,在播放器类中起一个线程用ffmpeg取流解码,将解码后的图像保存到队列,在gui线程中调用update()刷新显示。
当ffmpeg打开视频流失败后调用update()将qlabel刷新为黑色,有一定概率会使得qlabel界面假死,此时切换到其它界面再返回到当前界面,qlabel恢复显示。
禁用取流解码线程中调用的update()后,则不会再出现假死的现象。
chatgpt回答
这是因为 Qt 的 GUI 库不是线程安全的,所有的 GUI 操作都必须在主线程中执行。
如果你尝试在不同的线程中调用
update()
,可能会导致不可预知的行为和崩溃。