我需要播放一个自定义的AVI文件,其中包含一个经典的videostream,一个audiostream, 但也是一个自定义的数据stream 。 自定义stream包含一些自定义小部件可视化的数据; 这些小部件只需要在适当的时候将每个自定义帧写入缓冲区。 我们的应用程序基于Qt,已经使用QMediaPlayer / QVideoWidget来播放传统video,但额外的自定义stream使事情变得更加复杂,因为AFAIK QMediaPlayer只播放video/audio而忽略其他所有内容。 我想避免重新创build整个qt-multimedia ,但是我不确定如何从可用的Qt类中获得最好的效果。 我到目前为止的想法是: 编写一个自定义媒体播放器类,使用ffmpeg对video进行解复用和解码,实现定时,使用QAudioOutput播放audio,生成一串QVideoFrame在video上播放,并将自定义数据写入某个缓冲区进行可视化。 问题 :为了避免编写代码来重新缩放/转换video帧,我想重复使用QVideoWidget ,但它似乎只适用于“真正的” QMediaPlayer 。 将input文件解复用并将QMediaPlayer与AVstream一起馈QMediaPlayer 。 将input与ffmpeg解复用(可能将解码保留到Qt后端),有一个QIODevice只从input文件中检索video/audiostream,而另一个则检索数据stream。 用QMediaPlayer播放video/audio。 +——-+ | QFile | +—^—+ | inherits | +——————–+ | MyAviDemuxer | | | | holds a queue of | | demuxed packets | +——————–+ | | readDataPacket readVideoPacket | | +——-v——–+ +——–v———–+ […]