Trouble deploying Phonon media player on Windows
-
I have written an audio media player using phonon. I have compiled it for both Windows (mingw) and Linux. It works great. The Linux version has been installed on several machines and works flawlessly. The Windows version works perfectly on my development machine, but I am having problems installing it on other Windows computers. I am installing the following files:
Application folder:
application executable, necessary PNG files, help file, etc.Windows\System32 folder:
mingwm10.dll
QtXml4.dll
QtCore4.dll
QtGui4.dll
QtNetwork4.dll
phonon4.dll
msvcrt.dll
libgcc_s_dw2-1.dll
(all of these might not be required, but I will have other Qt applications as well)The application launches fine, and I can add files to the playlist. But when I try to play a file, it will not play. I believe it never enters the playing state in phonon. This problem happens on other machines where I have tried to install my application. I can install it on my development machine and it works perfectly.
I have tried copying QtOpenGL4.dll into System32, as well as copying phonon_ds94.dll into System32, or into a folder phonon_backend in the application folder. This did not help.
I'm sure I must be missing some DLL(s), but I can't figure out which one(s). I've also tried the sample Phonon Music Player that comes with QtCreator. Same results, it plays fine on my development machine, but not on another Windows machine.
Help! What file(s) am I missing, or how can I find out?
-
Google for dependencywalker and install.
This tool will tell you what dependencies you need on windows. Maybe one is missing?
-
dependency walker will not show, if later loaded dlls are missing. And if he can start the app and add files to his list, dependency walker will find nothing, as everything that is early bound is found.
-
[quote author="Gerolf" date="1309503568"]dependency walker will not show, if later loaded dlls are missing. And if he can start the app and add files to his list, dependency walker will find nothing, as everything that is early bound is found.[/quote]
yes, And "Process Explorer":http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx can be used in this case.
-
Well, I believe phonon uses certain system libraries to do the job. In linux, that is the GStreamer backend which depends on the GStreamer plugins installed on your machine. Something like DirectShow (DS9) is the backend on Windows. Maybe you need to install that or related plugins.
Also, this is the model because, mp3 is a patented technology and Qt cannot by itself provide the mp3 decoding and encoding. It is left to the system backend. You could also try the VLC backend (I'm not sure how stable it is though..).
-
DirectShow is part of DirectX I guess.. so make sure DirectX9 is installed on the target machine.
-
Thank you all for your suggestions. I solved my problem. I had already used dependency walker and installed all DLLs that it showed were required, and no DLLs were coming up missing when the application was launched. Process explorer was very helpful. I compared the loaded DLLs on a working and non-working machine, and found what I had done wrong. phonon_ds94.dll must be installed in a folder "phonon_backend" located under the application programs folder. I had put in in a folder called "phononbackend" by mistake. As soon as I corrected the name of that folder, my player started working. Process explorer showed that phonon_ds94.dll was not loading on the non-working machine.
On the development machine it was loading phonon_ds94.dll from C:\Qt\2010.05\qt\plugins\phonon_backend.