OpenGL rendering is improved. It can render yuv video frames now in QtQuick and it's enabled by default. Before QtAV 1.4, yuv frames are converted to rgb in cpu so the performance is poor.
GLWidgetRenderer
class is deprecated and I will not maintain it. Please use GLWidgetRenderer2
instead. Since Qt 5.4, new classes QOpenGLWidget
is introduced. QtAV has OpenGLWidgetRenderer for it now and will replace GLWidgetRenderer2 with this.
GraphicsItemRenderer
supports OpenGL too. But it has many issues. So OpenGL is disabled there.
VAAPI decoder supports GLX direct rendering now. It's enabled by default. That means no frame copy back from gpu then upload gpu. It saves a lot of cpu resources. CPU usage will be low even if you are playing a 4k video.
Direct rendering is supported by XBMC, MPV. VLC does not support it. MPV has lower CPU usage, but when playing the same 4k video with QtAV and MPV at the same time, MPV displays pictures very slow. I don't know how to compare with XBMC.
QVariantHash opt, vaopt;
vaopt["display"] = "GLX"; //"X11" and "DRM" are not direct rendering
opt["vaapo"] = vaopt;
player->setOptionsForVideoCodec(opt);
You need ffmpeg, OpenAL. Currently OpenSL can not work correctly in QtAV.
To build ffmpeg, just copy QtAV/scripts/build_ffmpeg.sh to ffmpeg source tree, create config-android.sh
with content NDK_ROOT=you/ndk/path
and run ./build_ffmpeg.sh android
. Then copy sdk-android/*
to Qt dir. Also copy OpenAL include and lib to Qt dir. Now you can build QtAV. Deployment is easy, select QMLPlayer in QtCreator and click Run.
Currently QtAV use ffmpeg's subtitle decoder to parse subtitle. You can get the subtitle plain text for a given timestamp. ASS styles will be supported in the feature, using libass.
In QtAV C++ you can use SubtitleFilter
. As other QtAV filters, you can apply the filter on the video frame or a renderer.
Subtitle in QtAV QML has less features now. You have to import QtAV 1.4 instead of 1.3. The following code shows how to use Subtitle
import QtAV 1.4
...
Text {
id: subtitleLayer
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignBottom
anchors.fill: parent
Subtitle {
player: player
onContentChanged: {
subtitleLayer.text = text
}
}
}
...
FFmpeg's libavfilter is supported. You can use LibAVFilter
class. Currently only video filters are supported. Audio filters will be supported in the feature.
The default audio backend switchs to OpenAL. It works fine on windows, linux, OSX and android. Not sure wether it works on iOS.
Audio playback APIs are changed. New backends will be supported, for example OpenSL, DirectSound. Using native audio backends will make the building much easier.