QMediaPlayer - modify audio on the fly - c++

I'm researching options for creating a simple video player. What I'd like to do, is to apply some audio processing (e.g. low pass filter for simplicity) while playing back the video. I've looked at Qt multimedia API, so here's my main question:
How could I edit the audio output of a QMediaPlayer? Do I need some lower level APIs?
Additionally, if some other technologies would suit this purpose better or provide better open source libraries, feel free to suggest. I have experience with C# as well.

QMediaPlayer doesn't allow low-level access to the audio data.
I'd suggest to you to use the QAudioOutput and QAudioDecoder classes for your purpose.
The QAudioDecoder produces QAudioBuffer objects. You can access the data() of these objects, process it (modify it) and feed it to the QIODevice that is returned by the start() method of the QAudioOutput object.
This will be the audio playback path of your player.
For the video you'll still use a muted QMediaPlayer to decode the video frames from the same file and output them to a QAbstractVideoSurface. You'll then need an algorithm to sync the video and audio frames produced by the above two methods.

Related

Qt5 extracting audio from video

I have a task: user chooses a video file, I need to get an audio track from it and give an opportunity to play it with equalizer and then save this audio in mp3.
I found an example of media player in Qt. Playing video with Qt is very easy as the example has shown so I'd like to realize this task only with Qt API. The only way I know to get audio track from video is to use libAV or similar libraries. Is there an opportunity to get audio from video with Qt API? Also I haven't found the way to save an audio in a specific format with Qt. Is it possible?
Thanks a lot.

Is it feasible to use video render with source reader technique?

I am writing a live streaming application using media foundation. I am using source reader technique. Is it possible to use video renderer with source reader technique?
If yes, please share your ideas.
Thanks in advance.
Yes, but you have to put some effort.
Video renderer can be used within Media Session pipeline, in which case it is managed by the pipeline and you don't need to bother with small details like sample delivery, seeking, flushing etc. As you preferred to use alternative higher level API Source Reader, you no longer have video rendering as a part of it - you are supposed to manage video renderer, if you need it, yourself.
See also:
How to send IMFSample to EVR Media Sink
Painting frames while media session is paused

Modify audio output stream of QMediaPlayer

I'm trying to port an audio player from Qt4 to Qt5, and from Phonon to QtMultimedia.
Everything works fine with a QMediaPlayer, except that I can't find any way to modify the audio stream between the output of QMediaPlayer and the system sound.
I would like to apply a post-processing effect to the audio.
Any way to do this? Maybe by sub-classing QMediaPlayer? I've checked the QAudioOutput and QAudioDecoder classes but I would have to implement a lot of things to get the same behaviour as QMediaPlayer.
Thanks!

Qt 5, QCamera, video streaming by network

Can you guys help me, what the best way for streaming video and sound from webcam over network? I have a problem, because i'm need to use Qt for that. Now i'm using QCamera and QVideoWidget just for show videostream to screen, but i need to send this stream to server, which will show this stream to QVideoWidget too. May be need to use QMediaRecorder for that, but i'm not see some methods, where i can get audio/video raw-data frame, or may be other, anyway, how do you see for this, what the best way for streaming. Thanks a lot!

Windows media foundation use raw image to encode video

I'm working on a project that requires me to record webcam, microphone, and the screen. I have webcam recording, audio is a work in progress, and I stumbled across CMonitor wrapper (which I did some minor modifications to) to grab RGB images of the desktop on a specified monitor (if there are multiple monitors).
How do I go about pushing my raw RGB frames into windows media foundation to encode into a video file? My current video encoding is using a slightly modified version of this msdn sample, if that's easier to modify than it is to write a new class handler.
Or, perhaps there is some sort of media foundation route to recording the screen that I don't know of (which is possible, I'm not that great of a win32 programmer)?
Found PushSource in the Windows SDK samples, which does this.
Check Desktop Duplication API for capture desktop. Media Foundation provides two solution for encoding, MF Sink Writer for simple encoding, Media Session for a more flexible control of the media pipeline. Read this overview page first.