Important: Please read the Qt Code of Conduct -

How to get QMediaPlayer to play a network file on a Mac?

  • Hello

    I'm working on an application that will use a QMediaPlayer widget, and which will need to work on both PC and Mac.

    I have a series of UNC paths to video files that are stored on a server (the fact these are stored in Windows-style UNC paths is a legacy thing and can't be changed). They are of the format "\\path\movie.mp4". I need to be able to get QMediaPlayer to open these files and play them from the server.

    On Windows, there's no problem- QMediaPlayer is playing the media files really nicely indeed, I'm very happy.

    However on Mac, I am hitting a "Failed to load media" message no matter what I try. I've tried various combinations of Samba prefixes, QUrl's setScheme method, and so on- but any path that involves an IP address is always hitting "Failed to load media", every time, with any path of a format like "smb://11.22.33..44/path/movie.mp4".

    If I use a QFileDialog and browse manually to the file, then the file will definitely play on a Mac. The QUrl then reports as "file:///Volumes/path/movie.mp4" and it plays fine. However I don't know how to translate a "smb://" path into a "file:///Volumes/" path, and as it stands I don't think it can be assumed that the drive will already be mounted.

    Please can someone give me a pointer on how to get a QMediaPlayer playing a remote file on a Mac?



  • Banned

    Okay if QFileDialog returns the proper reference to the object within the Mac environment then I would suggest either figuring out how/why the QFileDialog does this and duplicate it -- or -- sub-class QFileDialog in such a way as to use it just retrieve the file.

    That seems like the simplest approach to solving the situation and you can make that even semi-generic regardless of which of those 2 methods you choose -- and as such and use that with whatever OS you are working with

  • The QFileDialog is generating a path which QMediaPlayer will then read from, but only if I manually navigate to the file using a QFileDialog front-end and tell it exactly where it is.

    My problem is simpler and more fundamental than I first implied, and involves trying to convert a string "\\path\movie.mp4" into a valid MacOS path that any function (e.g. shutil.copyfile) will accept.

  • Lifetime Qt Champion

    Hi and welcome to devnet,

    Where do you get that string from ? Usually on *nix OSs all paths are using forward slashes.

    In any case, you have QDir::toNativeSeparators to get a path which can be passed to function expecting such a string.

  • Thanks for the response.

    The paths are from an existing piece of software which has stored the paths of lots of files as strings in a database. That existing software has been Windows-only for years so until now there was no issue with using UNC paths, but this new code I'm working on needs to be both Windows- and Mac-friendly, hence the UNC paths suddenly being a problem.

    In order to move something forward I'm now working on automatically mounting the required servers when needed. I don't know whether this is the only way to do it on a Mac for QMediaPlayer use, or whether this is a temporary workaround and there may be a better solution I haven't found yet.

  • Banned

    For full cross compatiblity you might want to consider altering the data from "\folder\folder\file.ext" to "/folder/folder/file.ext" as Windows will accept forward-slashes as well as back-slashes while many other OSs only accept forward-slashes

Log in to reply