Add mp3 codec to qt-project - qt

I am really new to Qt development as well as audio codecs. I recently found a way to play mp3 sound using QSound. I want to play it in my qt project using QAudioOutput, but there is no mp3 codec in QAudioDeviceInfo::supportedCodecs().
I tried install mp3 codec but it is still not listed in QAudioDeviceInfo::supportedCodecs(). How can I add a codec to QAudioDeviceInfo::supportedCodecs()?

By definition QAudioDeviceInfo provides an interface to query audio devices and their functionality. Which means any codec returned by QAudioDeviceInfo::supportedCodecs() is a codec format the device is able to play directly, and will be probably be raw audio format like pcm. On the other hand mp3 need to go through a software decoder first, so It will not be in this list.
Take a look at the Media Player example for a reference. It should be able to play mp3 and other formats. The project should be available in the Qt source or installation directory in your machine, either under the folder demo or examples.
It seems from the source that it does lot more than just barely playing audio. So focus on the constructor of the class Player as well as the method Player::addToPlaylist()
ps :I speak in conditional tense because I am more familiar with Qt 4 than Qt 5.
EDIT:
As long as windows media player cannot play mp3, you will not have full mp3 support in your Qt app, and the Player example I gave you will not work either. Download some codecs in your system till Windows media player can play mp3.

Related

To switch between two video files in Qt or opencv python -seamlessly

Currently i'm using opencv (have an option to use QT as well) to play a video file (player) in full screen mode. My requirement is when i'm playing videofile-1 there could a request to play video file-2 and i need to switch to video file-2 seamlessly. Is it possible to do this in opencv or QT ? I know we can do this using RTSP or HTTP streaming.
OpenCV uses cv2.VideoCapture() to read from videofile and cv2.imshow() to project image/video to display. What are you doing between those you it is your choice, so answering your question I guess it's possible.

ASF file can't be rendered by GraphEdit but can be played by WMP

My program uses Windows Media Foundation WMV/WMA MFTs to encode to ASF format (mux is done by ffmpeg). Generated file can be played perfectly by Windows Media Player on Win10 but failed to be rendered by GraphEdit, error code == NS_E_INVALID_DATA (0xC00D002FL).
Same error happens when IWMSyncReader->GetNextSample is used to read audio sample.
A sample broken video is here: https://www.dropbox.com/s/x8uyaqbclq93u5d/big_buck_bunny.wmv?dl=0
Could anyone take a look to check the cause?
Thanks
After examining your wmv file with Windows Media ASF Viewer, I came to the conclusion that it was encoded by Lavf encoder (FFMPEG). Therefore, I installed LAV directshow filters and played the wmv with Graphstudionext. I added the file as a File source async and after that the graph automatically used the LAV splitter. It seems that only LAV splitter is able to parse this wmv. In your app you can do the same by adding the file via the File source async filter and let LAV parse it (if installed).

Recording IP Camera in QT

I am busy with writing a program that is able to view an IP camera and also have a playback option available.
To realize this i have been looking to record the feed that i now have running in my program using the Qmediaplayer.
From what i understand it is not possible to use Qmediarecorder to record this feed. All the examples that use Qmediarecorder use the Qcamera class.
Is there a way to record a stream from an IP camera (mjpeg, h.264 ) with the Qmediarecorder or any other QT tool ?
If not ? what is a good library to use for this kind of application?
libvlc may be the library you can looking for, there is also a c++ - qt wrapper that simplifies the usage of library in c++ and qt : vlc-qt library :https://vlc-qt.tano.si/ . record and playback availability of library of vlc player is present in this wrapper

Qt MediaPlayer play audio from memory

I'm developing music player for Symbians and need to play raw audio data (PCM) from phone memory.
I tried QAudioOutput, which works fine (through Qbuffer - iherits QIODevice), but it is too much low-level API and therefore not suitable for me. So I found Phonon and QMediaPlayer.
I can't get Phonon to work neither on my phone nor on Windows. However, on Windows i can play files but not QBuffers... strange.
However, now I want to use QMediaPlayer but havent found a way to play raw data from memory. There is only QUrl constructor of QMediaContent.
Is there any option how to play on QMediaPlayer from QBuffer, QDataStream, QByteArray... anything from memory?
Any suggestions would be great, thanks :).
On desktop I'm using plain GStreamer (without phonon layer) to play from memory. Phonon backends doesn't handle well media from memory (QIODevice). From Qt docs:
Warning: On Windows, we only support QIODevices containing the avi, mp3, or mpg formats. Use the constructor that takes a file name to open files (the Qt backend does not use a QFile internally).

decode MPEG1/2 video with Media Foundation

I am using Media Foundation to play videos. On windows 7 some videos encoded with Mpeg1/Mpeg2 PS and Windows Media Player can play them, but Media Foundation does not(I tried to register a stub MPEG1Source but it still does not work). I noticed some of these files could be played with directshow but not Media foundation(can not be open at all). I guess "media player" does not use Media Foundation only?
Is it possible to use Media Foundation to play these file? If it is not, how does Media player work? Thanks a lot.
P.S. I have read the windows SDK and I registered a "fake" mpeg1 decode and it shows a blank frame with no time code. Why we need a fake mpeg1 decoder if windows media player can decode it?
This topic is relative to
best way to build graph for MPEG2 transport stream
Media Foundation does not have inbox support for MPEG-1 or MPEG-2. See: http://msdn.microsoft.com/en-us/library/dd757927(v=VS.85).aspx
Windows Media Player uses various code paths, including DShow, Media Foundation, and Windows Media Format SDK, depending on the source content.
I have found some information about this question and set up a MPEG1 source with the fake decoder. The failure I've been through is because bugs in SDK's code.
About the MPEG1 decoder, I guess I have to use DShow's decoder in MF.
Still have no idea about how MediaPlayer works.
In your Microsoft SDK installation directory, go to Microsoft SDKs -> Windows v7.0 -> Samples -> multimedia -> mediafoundation -> Decoder which contains an example MPEG-1 Decoder MFT. You might find it helpful.
There is new MPEG-2 Video Decoder MF filter at Windows 8.
http://msdn.microsoft.com/en-us/library/windows/desktop/hh162909(v=vs.85).aspx

Resources