wang-bin / QtAV

A cross-platform multimedia framework based on Qt and FFmpeg. 基于Qt和FFmpeg的跨平台高性能音视频播放框架. Recommand to use new sdk https://github.com/wang-bin/mdk-sdk
http://qtav.org
3.94k stars 1.5k forks source link

digiKam : lag when playing some kind of video under Linux or Windows. #835

Closed cgilles closed 4 months ago

cgilles commented 7 years ago

digiKam users have reported a playing start problem under Linux and Windows with some video type.

The report relevant is this one :

https://bugs.kde.org/show_bug.cgi?id=374355

The report have been updated with last digiKam 5.5.0 pre-release using current implementation from git/master. Look especially last comments from the file.

Any guidance to investigate will be welcome.

Gilles Caulier

--- Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/42895232-digikam-lag-when-playing-some-kind-of-video-under-linux-or-windows?utm_campaign=plugin&utm_content=tracker%2F307703&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F307703&utm_medium=issues&utm_source=github).
wang-bin commented 7 years ago

It seems openal is not compiled on windows. The default audio renderer is xaudio2 for windows, which exists on win8 and later, for old system, you have to install xaudio2 driver http://sourceforge.net/projects/qtav/files/depends/DXSDK2010_XAudio2_redist.7z/download. The simplest solution is building with openal headers and providing openal32.dll in your app, if xaudio2 is not supported, openal will be used. If openal is not loaded, dsound is used, but dsound implementation has some bugs, for example repeating when playback is paused. I'm not sure why linux still can not play correctly. Do you have log?

cgilles commented 7 years ago

Wang,

I think you mix subject here. The lag is not a problem about audio support. The audio support under Linux and Windows was been solved few days ago following your tips about OpenAl support to enable in QtAV.

https://github.com/wang-bin/QtAV/issues/834

I think the problem reported here from digiKam users about lags in video startup can be relevant of 2 points :

Let's me here if my suggestions are right or not.

Thanks in advance

Gilles Caulier

wang-bin commented 7 years ago

If opengl is not used, only high resolution videos will be affected. ffmpeg license only affects whether you can play a video, not the performance. From this description https://bugs.kde.org/show_bug.cgi?id=374355#c13 I guess dsound is used. Tomorrow I can try your app. Now the log is preferred.

cgilles commented 7 years ago

I ask for a runtime debug trace in bug #374355.

Do you want a QtAv configure/compilation trace with MXE ?

Gilles Caulier

wang-bin commented 7 years ago

Yes, that can help too

cgilles commented 7 years ago

This is the MXE part of QtAv configuration stage for Windows 32 bits (64 bits version is mostly the same) :

-- Build files have been written to: /mnt/devel/GIT/5.x/project/bundles/mxe/temp.build == Using MXE wrapper: /mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/bin/i686-w64-mingw32.shared-cmake == Skip using MXE toolchain: /mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared/share/cmake/mxe-conf.cmake Scanning dependencies of target ext_qtav [ 0%] Creating directories for 'ext_qtav' [ 0%] Performing download step (git clone) for 'ext_qtav' Cloning into 'ext_qtav'... Already on 'master' Your branch is up-to-date with 'origin/master'. Submodule 'contrib/capi' (https://github.com/wang-bin/capi.git) registered for path 'contrib/capi' Submodule 'contrib/uchardet' (https://github.com/BYVoid/uchardet.git) registered for path 'contrib/uchardet' Submodule 'tools/build_ffmpeg' (https://github.com/wang-bin/build_ffmpeg.git) registered for path 'tools/build_ffmpeg' Cloning into 'contrib/capi'... Submodule path 'contrib/capi': checked out '6a5f3006533b79aa57a3a54cf9df4442a356dd48' Cloning into 'contrib/uchardet'... Submodule path 'contrib/uchardet': checked out '016eb18437793fbdd31149e1fe9fd73df3430d0f' Cloning into 'tools/build_ffmpeg'... Submodule path 'tools/build_ffmpeg': checked out '428c16dc2edd575e8bdb838683a9b75f68eefe5a' [ 50%] No patch step for 'ext_qtav' [ 50%] No update step for 'ext_qtav' [ 50%] Performing configure step for 'ext_qtav' removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/Filter_p.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/SubtitleProcessor.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/QPainterRenderer_p.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/AudioResampler_p.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/AVCompat.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/PlayerSubtitle.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/mkid.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/singleton.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/AudioOutputBackend.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/Frame_p.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/AVDecoder_p.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/MediaIO_p.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/VideoShader_p.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/VideoRenderer_p.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/AVEncoder_p.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/factory.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/prepost.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/OpenGLRendererBase_p.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private/AVOutput_p.h’ removed directory: ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/private’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/AVDemuxer.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/QtAV.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/AudioFormat.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/FilterContext.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/VideoCapture.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/AVTranscoder.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/FrameReader.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/SurfaceInterop.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/Subtitle.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/AudioEncoder.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/AVDecoder.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/AVEncoder.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/Geometry.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/Packet.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/QPainterRenderer.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/VideoFrame.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/Filter.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/QtAV’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/dptr.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/LibAVFilter.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/AudioResampler.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/EncodeFilter.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/FactoryDefine.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/version.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/VideoFrameExtractor.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/AudioDecoder.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/OpenGLVideo.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/GLSLFilter.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/MediaIO.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/QtAV_Global.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/ConvolutionShader.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/VideoFormat.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/AVClock.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/Statistics.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/Frame.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/AudioFrame.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/AVError.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/AudioOutput.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/AVPlayer.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/OpenGLRendererBase.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/VideoOutput.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/VideoShaderObject.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/GeometryRenderer.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/VideoEncoder.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/OpenGLWindowRenderer.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/VideoDecoder.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/OpenGLTypes.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/VideoShader.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/AVOutput.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/SubtitleFilter.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/VideoRenderer.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/AVMuxer.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV/SubImage.h’ removed directory: ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAV’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAVWidgets/WidgetRenderer.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAVWidgets/GLWidgetRenderer2.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAVWidgets/global.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAVWidgets/QOpenGLWidget.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAVWidgets/version.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAVWidgets/OpenGLWidgetRenderer.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAVWidgets/GraphicsItemRenderer.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAVWidgets/GLWidgetRenderer.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAVWidgets/QtAVWidgets.h’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAVWidgets/QtAVWidgets’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAVWidgets/VideoPreviewWidget.h’ removed directory: ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/include/QtAVWidgets’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/lib/libQtAV1.a’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/lib/libQtAVWidgets1.a’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/bin/QtAV1.dll’ removed ‘/mnt/devel/GIT/5.x/project/bundles/mxe/build.win32/usr/i686-w64-mingw32.shared//qt5/bin/QtAVWidgets1.dll’ Info: creating stash file /mnt/devel/GIT/5.x/project/bundles/mxe/temp.build/ext_qtav/ext_qtav-prefix/src/ext_qtav/build/.qmake.stash Project MESSAGE: BUILD_DIR=/mnt/devel/GIT/5.x/project/bundles/mxe/temp.build/ext_qtav/ext_qtav-prefix/src/ext_qtav/build Project MESSAGE: MAKEFILE_GENERATOR=MINGW Info: creating cache file /mnt/devel/GIT/5.x/project/bundles/mxe/temp.build/ext_qtav/ext_qtav-prefix/src/ext_qtav/build/.qmake.cache Project MESSAGE: target arch: x86 Project MESSAGE: target arch features: Project MESSAGE: To disable config tests, you can use 1 of the following methods Project MESSAGE: 1. create '.qmake.conf' in the root source dir, add 'CONFIG += no_config_tests'(Qt5) Project MESSAGE: 2. pass 'CONFIG += no_config_tests' or '-config no_config_tests' to qmake Project MESSAGE: 3. add 'CONFIG += no_config_tests' in /mnt/devel/GIT/5.x/project/bundles/mxe/temp.build/ext_qtav/ext_qtav-prefix/src/ext_qtav/user.conf Project MESSAGE: To manually set a config test result to true, disable config tests and enable config_name like above Checking for avutil... yes Checking for avcodec... yes Checking for avformat... yes Checking for swscale... yes Project MESSAGE: checking for optional features... Checking for swresample... yes Checking for avresample... yes Checking for avfilter... yes Checking for avdevice... yes Checking for sse4_1... yes Checking for openal... yes Checking for libass... yes Checking for uchardet... no Checking for dx... no Checking for xaudio2... yes Checking for direct2d... yes Checking for dxva... yes Checking for d3d11va... no Checking for dsound... yes Checking for gdiplus... no Project MESSAGE: To recheck the dependencies, delete '.qmake.cache' in the root of build dir, run qmake with argument 'CONFIG+=recheck' or '-config recheck' [ 50%] Performing build step for 'ext_qtav' Project MESSAGE: target: /mnt/devel/GIT/5.x/project/bundles/mxe/temp.build/ext_qtav/ext_qtav-prefix/src/ext_qtav/build/lib_win_x86/QtAV Project MESSAGE: target: /mnt/devel/GIT/5.x/project/bundles/mxe/temp.build/ext_qtav/ext_qtav-prefix/src/ext_qtav/build/lib_win_x86/QtAV Project MESSAGE: target: /mnt/devel/GIT/5.x/project/bundles/mxe/temp.build/ext_qtav/ext_qtav-prefix/src/ext_qtav/build/lib_win_x86/install_sdk Project MESSAGE: creating script for module QtAV ... Project MESSAGE: run /mnt/devel/GIT/5.x/project/bundles/mxe/temp.build/ext_qtav/ext_qtav-prefix/src/ext_qtav/build/sdk_install.sh to install QtAV as a Qt module Project MESSAGE: creating script for module QtAVWidgets ... Project MESSAGE: run /mnt/devel/GIT/5.x/project/bundles/mxe/temp.build/ext_qtav/ext_qtav-prefix/src/ext_qtav/build/sdk_install.sh to install QtAVWidgets as a Qt module WARNING: target.path is not defined: install target not created ...

And yes, OpenAL is installed by MXE previously, is detected, but not only. xaudio2, and dsound also...

Gilles Caulier

wang-bin commented 7 years ago

I don't see lag in my test. But there is an error when switching to a new video from playing video https://bugs.kde.org/show_bug.cgi?id=374355#c19

cgilles commented 7 years ago

yes. sound like the ffmpeg codec need a latency to be re-used for another stream to play.

Gilles Caulier

wang-bin commented 7 years ago

No. How do you switch video?

cgilles commented 7 years ago

Like this : https://cgit.kde.org/digikam.git/tree/app/views/mediaplayerview.cpp#n415

stop(); setFile(); play().

It's simple. It miss something ?

Gilles Caulier

wang-bin commented 7 years ago

stop() will interrupt current io and player will get an io error.

cgilles commented 7 years ago

We must not use stop() here ? We must use another method ? This is what you mean ?

Gilles Caulier

wang-bin commented 7 years ago

No error check

PVince81 commented 6 years ago

Any progress on the issue ?

I'm still observing a lag when a video starts playing within Digikam (mov, mp4).

I've updated to openSUSE Leap 15 and have the following versions:

Mediainfo output of matching videos:

Video ID : 1 Format : JPEG Codec ID : jpeg Duration : 54 s 0 ms Bit rate mode : Variable Bit rate : 26.0 Mb/s Width : 1 280 pixels Height : 720 pixels Display aspect ratio : 16:9 Frame rate mode : Constant Frame rate : 30.000 FPS Color space : YUV Chroma subsampling : 4:2:0 Bit depth : 8 bits Compression mode : Lossy Bits/(Pixel*Frame) : 0.941 Stream size : 168 MiB (98%) Language : English Encoded date : UTC 2018-06-02 12:34:26 Tagged date : UTC 2018-06-02 12:34:26

Audio ID : 2 Format : PCM Format settings : Big / Signed Codec ID : twos Duration : 54 s 0 ms Bit rate mode : Constant Bit rate : 256 kb/s Channel(s) : 1 channel Sampling rate : 16.0 kHz Bit depth : 16 bits Stream size : 1.65 MiB (1%) Language : English Encoded date : UTC 2018-06-02 12:34:26 Tagged date : UTC 2018-06-02 12:34:26


- MP4 (from Android phone):

General Complete name : VID_20180602_173011.mp4 Format : MPEG-4 Format profile : Base Media / Version 2 Codec ID : mp42 (isom/mp42) File size : 4.77 MiB Duration : 3 s 93 ms Overall bit rate : 12.9 Mb/s Encoded date : UTC 2018-06-02 15:30:15 Tagged date : UTC 2018-06-02 15:30:15

Video ID : 1 Format : AVC Format/Info : Advanced Video Codec Format profile : Baseline@L4 Format settings : 1 Ref Frames Format settings, CABAC : No Format settings, ReFrames : 1 frame Codec ID : avc1 Codec ID/Info : Advanced Video Coding Duration : 3 s 1 ms Bit rate : 12.2 Mb/s Width : 1 920 pixels Height : 1 080 pixels Display aspect ratio : 16:9 Frame rate mode : Variable Frame rate : 30.328 FPS Minimum frame rate : 30.141 FPS Maximum frame rate : 30.477 FPS Color space : YUV Chroma subsampling : 4:2:0 Bit depth : 8 bits Scan type : Progressive Bits/(Pixel*Frame) : 0.193 Stream size : 4.35 MiB (91%) Title : VideoHandle Language : English Encoded date : UTC 2018-06-02 15:30:15 Tagged date : UTC 2018-06-02 15:30:15 mdhd_Duration : 3001

Audio ID : 2 Format : AAC Format/Info : Advanced Audio Codec Format profile : LC Codec ID : mp4a-40-2 Duration : 3 s 93 ms Source duration : 3 s 101 ms Source_Duration_FirstFrame : 8 ms Bit rate mode : Constant Bit rate : 96.0 kb/s Channel(s) : 1 channel Channel positions : Front: C Sampling rate : 48.0 kHz Frame rate : 46.875 FPS (1024 SPF) Compression mode : Lossy Stream size : 36.4 KiB (1%) Source stream size : 36.4 KiB (1%) Title : SoundHandle Language : English Encoded date : UTC 2018-06-02 15:30:15 Tagged date : UTC 2018-06-02 15:30:15 mdhd_Duration : 3093



In fact, I don't remember any video so far that played properly since quite some time.
The problem already existed in former versions of openSUSE.

There doesn't seem to be any QtAv related package installed or available on this distro.
Is this dependency compiled in Digikam somehow ?
PVince81 commented 6 years ago

@wang-bin as I understand, @cgilles needs guidance as to what order to call the APIs to prevent the switching problem.

cgilles commented 6 years ago

What's about to use digiKam 6.0.0 pre release AppImage bundle instead the OpenSuse package ?

https://files.kde.org/digikam/

AppImage do not install file and can be used in parallel than official RPM. The bundle do not use system based lib excepted libc of course.

Gilles Caulier

PVince81 commented 5 years ago

I've now tried with the digikam-6.0.0-x86-64.appimage and the lag at the beginning of the playback is still happening.

FlasH-RUS commented 4 years ago

Same here. Win 10, digiKam 6.1.0,

Build date: Apr 15 2019 (target: RelWithDebInfo)
Rev.: 33917d60ecad37ad46ef9cea83db28c2f058cc13
javaskript commented 3 years ago

Windows 10, digiKam 7.2.0.

Unfortunately, this issue is still present. I can confirm this too, particularly with .mov. Lags and continues to do so. Hopefully it can be fixed.

zkeng commented 2 years ago

Mac OS, digiKam 7.6.0 I can also confirm video playback lag is still present. Just like @javaskript wrote it seems to be more problematic with our .mov files compared to mp4 files.

ToS0 commented 2 years ago

Same here, Linux with DK 7.6 AppImage. Basically all videos, be it MOV or MP4 from Canon cameras or Android phones are lagging

ToS0 commented 2 years ago

I can confirm, the audio stream is the problem. When you disconnect audio in the OS, the video plays smoothly.

cgilles commented 2 years ago

Hi,

The problem in digiKam is the lack of settings to tune backend to use for video and audio playback. The default ones are used as well. I plan to add the relevant code in digiKam to fix the problem.

Also, you must know that QtAV is not maintained since February 2022. We (digiKam team and me personalty) have backported all QtAV core codes in digiKam 8.x and maintain/review/fix these codes for the digiKam uses (and only these ones).

See the README here : https://invent.kde.org/graphics/digikam/-/tree/master/core/libs/video/qtav

Best

Gilles Caulier

ToS0 commented 2 years ago

Hi @cgilles, I got your changes in the 7.7 release now. The videos play fine now, without lagging in the internal viewer - I guess because sound is now disabled? It is at least an improvement ;)

The QtAV player works with sound, but if I understand you right, you cannot use their current libs, but needed to fork their code and maintain it seperately?

Do you have any idea how to move forward in allowing digiKams internal player to play video sound as well? Maybe there is even some tweaking users can do themselves or so?

Thanks and best regards!

cgilles commented 2 years ago

Hi,

The QtAV code have been ported to digiKam core for 8.X releases. Code is ported to Qt6 and partially to ffmpeg 5. For this last one, we have lag and freeze to solve. ffmpeg 4 still the prefered backend to use with QtAv.

In parallel, QtMultimedia from Qt6 will be supported in digiKam 8.x, as ffmpeg backend will be supported. If Qt6Multimedia will work fine, we will replace QtAv as well.

Voilà the plant for the digiKam 8.x Qt6. Note that digiKam 8.x still compatible with Qt5, and in this case QtAv must be used.

Gilles Caulier

ToS0 commented 2 years ago

Hi, Thanks,

So if I understand you right, the current version 7 (with Qt5, QtAv, ffmpeg 4) is being developed as version 8 (with Qt6, QtMultimedia, ffmpeg 5). I just don't understand why lagging happens in any of these versions - since playing a video should work easily, both with the old and new Qt libs.

However, for now we can use the External player function ("Open with..." and then just F4) - this is an easy workaround I wasn't aware of.

Good luck for your ongoing tasks!

nonobio commented 1 year ago

Hi,

Most of my videos aren't played well (choppy) in Digikam for years (actually I have the 8.0.0 version on my Windows 10) and I always use an external player to play my videos from Digikam.

Just to be sure to have well understood: it is a known issue and it will be resolved in the next versions?

Thanks :)

Ra72xx commented 1 year ago

Same situation on Linux. Either using native installation or AppImage, but for me videos never ever played in Digikam without using an external player. Just stumbled over this bug report and am therefore interested in any progress on this issue. Currently 8.1.0 AppImage, which seems to use Qt5.

makeasnek commented 1 year ago

Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

Please do not use bountysource. Many devs have had trouble getting paid there. You can check out this lemmy community as an alternative https://lemmy.ml/c/bugbounties

For statements from devs who have been unable to cash out from bountysource see: https://github.com/bountysource/core/issues

nonobio commented 9 months ago

Hi,

Most of my videos aren't played well (choppy) in Digikam for years (actually I have the 8.0.0 version on my Windows 10) and I always use an external player to play my videos from Digikam.

Just to be sure to have well understood: it is a known issue and it will be resolved in the next versions?

Thanks :)

Hi,

It seems resolved with Digikam 8.3.0 and QT6.6.0 👍