Showing a mp4 in my app
-
Hahaha, of course though I take a .mp4 into my video editing software and export it is a .mov and it won't play either. So is there a way to tell what I need to do to a video to get it to play or how I install the codec's I need in QT? I don't want to have to use only non-edited iPhone vids, lol...
(Seriously, so glad to just see a video play... thank you all for the help so far.)
-
@MichRX7 Most safe method is to install all GStreamer plug-ins your distribution is providing.
@jsulm And I'm stuck again (of course), so I did the following on my Rpi4:
sudo apt-get install gstreamer1.0-tools
Reading package lists... Done
Building dependency tree
Reading state information... Done
gstreamer1.0-tools is already the newest version (1.14.4-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.So, I already had the newest version of gstreamer installed. Is there something else I need to do to download specific codec's or all codec's? I tried going to the gstreamer website, but not seeing anything on codecs.
-
The codec are provided in the gstreamer plugins packages. See the
gstreamer1.0-plugins-XXX
packages. -
The codec are provided in the gstreamer plugins packages. See the
gstreamer1.0-plugins-XXX
packages.@SGaist said in Showing a mp4 in my app:
The codec are provided in the gstreamer plugins packages. See the
gstreamer1.0-plugins-XXX
packages.Thanks, will look into that on my lunch break.
Or, if even easier, figure out why a .mov would play when it comes direct from an iPhone, but not if I take a mp4 and convert it into a mov in my video editing software. I mean, if I can convert to .mov and get it to work I'll just do that for now. :)
-
@SGaist said in Showing a mp4 in my app:
gstreamer1.0-plugins
Ok, well tried to install codecs, not sure if I'm doing it right. Did the following three entries, and now going to reboot because my videos didn't play:
apt-get install gstreamer1.0-plugins-*
apt-get install gstreamer1.0-plugins-*
apt-get install libavcodec-extraIf this is not correct, I can't figure out how to get them properly.
-
Can you play your video directly with GStreamer from the command line ?
-
@SGaist said in Showing a mp4 in my app:
Can you play your video directly with GStreamer from the command line ?
Yes, using:
gst-launch-1.0 playbin uri=file:///home/pi/Videos/tomtiph.mp4or
gst-play-1.0 /home/pi/Videos/tomtiph.mp4
both those commands play the video
-
Good.
Then as next step, I would build and run the Media Player Example.
-
Good.
Then as next step, I would build and run the Media Player Example.
@SGaist said in Showing a mp4 in my app:
Good.
Then as next step, I would build and run the Media Player Example.
I have, it won't play the mp4 videos, but it will play the mov video saved direct from an iPhone just like my other videowidget.
-
What are the specifications of that video ?
-
@SGaist said in Showing a mp4 in my app:
Good.
Then as next step, I would build and run the Media Player Example.
I have, it won't play the mp4 videos, but it will play the mov video saved direct from an iPhone just like my other videowidget.
@MichRX7 said in Showing a mp4 in my app:
@SGaist said in Showing a mp4 in my app:
Good.
Then as next step, I would build and run the Media Player Example.
I have, it won't play the mp4 videos, but it will play the mov video saved direct from an iPhone just like my other videowidget.
File Type MPEG-4 Video
Total Size 5.8 MiB -
@SGaist recommended this earlier; it's still worth doing: Check the error signal. It could provide some clues as to why your video isn't playing.
Also, try connecting the status/state change signals and see what you get:
connect(player, QOverload<QMediaPlayer::Error>::of(&QMediaPlayer::error), [=](QMediaPlayer::Error error) { qDebug() << "Error:" << error << player->errorString(); }); connect(player, &QMediaPlayer::mediaStatusChanged, [=](QMediaPlayer::MediaStatus status) { qDebug() << "Media Status:" << status; } connect(player,, &QMediaPlayer::stateChanged, [=](QMediaPlayer::State state) { qDebug() << "State:" << state; }
-
@SGaist recommended this earlier; it's still worth doing: Check the error signal. It could provide some clues as to why your video isn't playing.
Also, try connecting the status/state change signals and see what you get:
connect(player, QOverload<QMediaPlayer::Error>::of(&QMediaPlayer::error), [=](QMediaPlayer::Error error) { qDebug() << "Error:" << error << player->errorString(); }); connect(player, &QMediaPlayer::mediaStatusChanged, [=](QMediaPlayer::MediaStatus status) { qDebug() << "Media Status:" << status; } connect(player,, &QMediaPlayer::stateChanged, [=](QMediaPlayer::State state) { qDebug() << "State:" << state; }
Thank you for the reply. I placed these in the file. When I do the first connect throws this issue:
/tmp/VisualGDB/c/projects/LinuxProject1/MainWindow.cpp:35: error: reference to non-static member function must be called; did you mean to call it with no arguments?The 2nd and 3rd connect's throw an error unless I put ); after the closing } for each connect.
I can't build the file until I figure out the issue with the first connect is. If I comment it out and place the ); after the 2nd and 3rd connects I can build the file, but I don't see any errors in the debug window in QT Creator if that is where I should be seeing issues.
-
When I run the build after commenting out the first connect that is giving me an issue I do see this in the debugger:
GStreamer; Unable to pause - "file:///home/pi/Videos/tomtiff.mp4"
Media Status: QMediaPlayer::LoadingMedia
GStreamer; Unable to pause - "file:///home/pi/Videos/tomtiff.mp4"
mediaStatus: QMediaPlayer::LoadingMedia error: QMediaPlayer::NoErrorMedia Status: QMediaPlayer::InvalidMedia
Error: "Resource not found."If I switch the file name to the known working MOV file and run the build I do not see this information or anything like it in the debugger.
-
Thank you for the reply. I placed these in the file. When I do the first connect throws this issue:
/tmp/VisualGDB/c/projects/LinuxProject1/MainWindow.cpp:35: error: reference to non-static member function must be called; did you mean to call it with no arguments?The 2nd and 3rd connect's throw an error unless I put ); after the closing } for each connect.
I can't build the file until I figure out the issue with the first connect is. If I comment it out and place the ); after the 2nd and 3rd connects I can build the file, but I don't see any errors in the debug window in QT Creator if that is where I should be seeing issues.
@MichRX7 said in Showing a mp4 in my app:
error: reference to non-static member function must be called; did you mean to call it with no arguments?
Remember to include the
&
insideof()
The 2nd and 3rd connect's throw an error unless I put ); after the closing } for each connect.
Oops! I've edited the post to fix the syntax
-
@MichRX7 said in Showing a mp4 in my app:
error: reference to non-static member function must be called; did you mean to call it with no arguments?
Remember to include the
&
insideof()
The 2nd and 3rd connect's throw an error unless I put ); after the closing } for each connect.
Oops! I've edited the post to fix the syntax
@JKSH said in Showing a mp4 in my app:
@MichRX7 said in Showing a mp4 in my app:
error: reference to non-static member function must be called; did you mean to call it with no arguments?
Remember to include the
&
insideof()
I copied it right from the page, this is what I have in my code that is throwing that error:
connect(player, QOverloadQMediaPlayer::Error::of(&QMediaPlayer::error), [=](QMediaPlayer::Error error)
{
qDebug() << "Error:" << error << player->errorString;
}); -
@JKSH said in Showing a mp4 in my app:
@MichRX7 said in Showing a mp4 in my app:
error: reference to non-static member function must be called; did you mean to call it with no arguments?
Remember to include the
&
insideof()
I copied it right from the page, this is what I have in my code that is throwing that error:
connect(player, QOverloadQMediaPlayer::Error::of(&QMediaPlayer::error), [=](QMediaPlayer::Error error)
{
qDebug() << "Error:" << error << player->errorString;
});@MichRX7 said in Showing a mp4 in my app:
qDebug() << "Error:" << error << player->errorString;
Found it:
errorString()
needs parentheses -
Well, there is a lot of output, not sure if you want to see all of it.
But, on the MOV file that plays correctly I see this near the end (after pressing the button to create the videowidget and play):
Thread 18 created.~"[New Thread 0x8d0fc390 (LWP 17529)]\n"
[New Thread 0x8d0fc390 (LWP 17529)]
*running,thread-id="18"
dNOTE: INFERIOR STILL RUNNING IN STATE InferiorRunOk.Media Status: QMediaPlayer::BufferedMedia
=thread-created,id="19",group-id="i1"
Thread 19 created.
~"[New Thread 0x8bbff390 (LWP 17530)]\n"
[New Thread 0x8bbff390 (LWP 17530)]
*running,thread-id="19"
dNOTE: INFERIOR STILL RUNNING IN STATE InferiorRunOk.~"[Thread 0x8bbff390 (LWP 17530) exited]\n"
[Thread 0x8bbff390 (LWP 17530) exited]
=thread-exited,id="19",group-id="i1"
Thread 19 in group i1 exited.In the MOV that won't play I see:
Thread 21 created.~"[New Thread 0x8ddf2390 (LWP 17432)]\n"
[New Thread 0x8ddf2390 (LWP 17432)]
*running,thread-id="21"
dNOTE: INFERIOR STILL RUNNING IN STATE InferiorRunOk.Media Status: QMediaPlayer::BufferedMedia
QWidget::paintEngine: Should no longer be called
QWidget::paintEngine: Should no longer be calledQWidget::paintEngine: Should no longer be called
QWidget::paintEngine: Should no longer be calledIn the MP4 that doesn't play:
Thread 21 created.~"[New Thread 0x8dbff390 (LWP 17705)]\n"
[New Thread 0x8dbff390 (LWP 17705)]
*running,thread-id="21"
dNOTE: INFERIOR STILL RUNNING IN STATE InferiorRunOk.Media Status: QMediaPlayer::BufferedMedia
QWidget::paintEngine: Should no longer be called
QWidget::paintEngine: Should no longer be calledIf you want to see the full debug section from when I hit the button to here I can paste it, but it is VERY long.
-
Well, there is a lot of output, not sure if you want to see all of it.
But, on the MOV file that plays correctly I see this near the end (after pressing the button to create the videowidget and play):
Thread 18 created.~"[New Thread 0x8d0fc390 (LWP 17529)]\n"
[New Thread 0x8d0fc390 (LWP 17529)]
*running,thread-id="18"
dNOTE: INFERIOR STILL RUNNING IN STATE InferiorRunOk.Media Status: QMediaPlayer::BufferedMedia
=thread-created,id="19",group-id="i1"
Thread 19 created.
~"[New Thread 0x8bbff390 (LWP 17530)]\n"
[New Thread 0x8bbff390 (LWP 17530)]
*running,thread-id="19"
dNOTE: INFERIOR STILL RUNNING IN STATE InferiorRunOk.~"[Thread 0x8bbff390 (LWP 17530) exited]\n"
[Thread 0x8bbff390 (LWP 17530) exited]
=thread-exited,id="19",group-id="i1"
Thread 19 in group i1 exited.In the MOV that won't play I see:
Thread 21 created.~"[New Thread 0x8ddf2390 (LWP 17432)]\n"
[New Thread 0x8ddf2390 (LWP 17432)]
*running,thread-id="21"
dNOTE: INFERIOR STILL RUNNING IN STATE InferiorRunOk.Media Status: QMediaPlayer::BufferedMedia
QWidget::paintEngine: Should no longer be called
QWidget::paintEngine: Should no longer be calledQWidget::paintEngine: Should no longer be called
QWidget::paintEngine: Should no longer be calledIn the MP4 that doesn't play:
Thread 21 created.~"[New Thread 0x8dbff390 (LWP 17705)]\n"
[New Thread 0x8dbff390 (LWP 17705)]
*running,thread-id="21"
dNOTE: INFERIOR STILL RUNNING IN STATE InferiorRunOk.Media Status: QMediaPlayer::BufferedMedia
QWidget::paintEngine: Should no longer be called
QWidget::paintEngine: Should no longer be calledIf you want to see the full debug section from when I hit the button to here I can paste it, but it is VERY long.
@MichRX7 said in Showing a mp4 in my app:
Well, there is a lot of output, not sure if you want to see all of it.
...
Thread 18 created. >~"[New Thread 0x8d0fc390 (LWP 17529)]\n" [New Thread 0x8d0fc390 (LWP 17529)] >*running,thread-id="18" dNOTE: INFERIOR STILL RUNNING IN STATE InferiorRunOk.
Looks like you ran it in the Debugger.
Run it normally (click "Run" instead of "Start Debugging" and you should see a lot less output.
-
Ok, here is the MP4 when I just run:
01:16:58: Starting /tmp/VisualGDB/c/projects/LinuxProject1/Debug/LinuxProject1...
qt5ct: using qt5ct plugin
qt5ct: D-Bus global menu: no
Media Status: QMediaPlayer::LoadingMedia
State: QMediaPlayer::PlayingState
mediaStatus: QMediaPlayer::LoadingMedia error: QMediaPlayer::NoError
Media Status: QMediaPlayer::BufferedMedia
01:17:08: /tmp/VisualGDB/c/projects/LinuxProject1/Debug/LinuxProject1 exited with code 0MOV file that plays as I expect:
01:18:52: Starting /tmp/VisualGDB/c/projects/LinuxProject1/Debug/LinuxProject1...
qt5ct: using qt5ct plugin
qt5ct: D-Bus global menu: no
Media Status: QMediaPlayer::LoadingMedia
State: QMediaPlayer::PlayingState
mediaStatus: QMediaPlayer::LoadingMedia error: QMediaPlayer::NoError
Media Status: QMediaPlayer::BufferedMedia
01:19:07: /tmp/VisualGDB/c/projects/LinuxProject1/Debug/LinuxProject1 exited with code 0MOV file that doesn't play (just get black window like MP4 file)
01:20:36: Starting /tmp/VisualGDB/c/projects/LinuxProject1/Debug/LinuxProject1...
qt5ct: using qt5ct plugin
qt5ct: D-Bus global menu: no
Media Status: QMediaPlayer::LoadingMedia
State: QMediaPlayer::PlayingState
mediaStatus: QMediaPlayer::LoadingMedia error: QMediaPlayer::NoError
Media Status: QMediaPlayer::BufferedMedia
QWidget::paintEngine: Should no longer be called
QWidget::paintEngine: Should no longer be called
QWidget::paintEngine: Should no longer be called
QWidget::paintEngine: Should no longer be called
01:20:49: /tmp/VisualGDB/c/projects/LinuxProject1/Debug/LinuxProject1 exited with code 0