質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

2450閲覧

QtのQMediaPlayerでMP4が再生できない

BeatStar

総合スコア4962

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/10/03 10:50

※ もしかすると言語やライブラリの問題ではなく、OSの設定によるのかもしれませんが…

趣味でC++をやっています。

現在、Qt( Qt 5.6 ) を使って組んでいます。

リリース時のファイル構成は

( "/.../" をディレクトリとみなして )

/プロジェクト/ + /mediaservice/ + dsengine.dll + dsengined.dll + qtmedia_audioengine.dll + qtmedia_audioengined.dll + /platforms/ + qwindows.dll + /imageformats/ + qdds.dll + qddsd.dll + qgif.dll + qgifd.dll + qicns.dll + qicnsd.dll + qico.dll + qicod.dll + qjpeg.dll + qjpegd.dll + qsvg.dll + qsvgd.dll + qtga.dll + qtgad.dll + qtiff.dll + qtiffd.dll + qwbmp.dll + qwbmpd.dll + qwebp.dll + qwebpd.dll + libgcc_s_dw2-1.dll + libstdc++-6.dll + libwinpthread-1.dll + Qt5Core.dll + Qt5Gui.dll + Qt5Multimedia.dll + Qt5MultimediaWidgets.dll + Qt5Network.dll + Qt5OpenGL.dll + Qt5Widgets.dll + Qt5WinExtras.dll + readme.txt

とします。

自分用のライブラリとして

C++

1// 必要なヘッダはインクルードされているとして 2namespace Video{ 3 class VideoPlayer : public QMediaPlayer, public QVideoWidget{ 4 public: 5 VideoPlayer( QWidget* parent ); 6 ~VideoPlayer(); 7 8 void show( void ); 9 void move( int x, int y ); 10 int x( void ) const; 11 int y( void ) const; 12 void resize( int height, int width ); 13 int height( void ) const; 14 int width( void ) const; 15 void setMedia( const QString &filepath ); 16 void setVolume( int vol = 100 ); 17 int volume( void ) const; 18 void setMuted( bool muted = true ); 19 bool isMuted( void ) const; 20 void play( void ); 21 void pause( void ); 22 void stop( void ); 23 private: 24 QMediaPlayer* media; 25 QVideoWidget* videoWidget; 26 }; 27} 28 29namespace Video{ 30 VideoPlayer::VideoPlayer( QWidget* parent ){ 31 media = new QMediaPlayer( parent ); 32 videoWidget = new QVideoWidget( parent ); 33 media->setVideoOutput( videoWidget ); 34 } 35 36 VideoPlayer::~VideoPlayer(){ 37 delete media; 38 delete videoWidget; 39 } 40 41 void VideoPlayer::show( void ){ 42 videoWidget->show(); 43 return; 44 } 45 46 void VideoPlayer::move( int x, int y ){ 47 videoWidget->move( x, y ); 48 return; 49 } 50 51 int VideoPlayer::x( void ) const{ 52 return videoWidget->x(); 53 } 54 55 int VideoPlayer::y( void ) const{ 56 return videoWidget->y(); 57 } 58 59 void VideoPlayer::resize( int height, int width ){ 60 videoWidget->resize( width, height ); 61 return; 62 } 63 64 int VideoPlayer::height( void ) const{ 65 return videoWidget->height(); 66 } 67 68 int VideoPlayer::width( void ) const{ 69 return videoWidget->width(); 70 } 71 72 void VideoPlayer::setMedia( const QString &filepath ){ 73 media->setMedia( QUrl::fromLocalFile( filepath ) ); 74 return; 75 } 76 77 void VideoPlayer::setVolume( int vol ){ 78 media->setVolume( vol ); 79 return; 80 } 81 82 int VideoPlayer::volume( void ) const{ 83 return media->volume(); 84 } 85 86 void VideoPlayer::setMuted( bool muted ){ 87 media->setMuted( muted ); 88 return; 89 } 90 91 bool VideoPlayer::isMuted( void ) const{ 92 return media->isMuted(); 93 } 94 95 void VideoPlayer::play( void ){ 96 media->play(); 97 return; 98 } 99 100 void VideoPlayer::pause( void ){ 101 media->pause(); 102 return; 103 } 104 105 void VideoPlayer::stop( void ){ 106 media->stop(); 107 return; 108 } 109}

として、

呼び出し側で

C++

1 // 呼び出し側の外で 2 struct WindowInstances{ 3 Video::VideoPlayer* videoPlayer; 4 } windows_; 5 6 7 // 呼び出し側で 8 windows_.videoPlayer = new Video::VideoPlayer(windows_.window); 9 windows_.videoPlayer->move( 10, 10 ); 10 windows_.videoPlayer->resize( 300, 300 ); 11 windows_.videoPlayer->show(); 12 windows_.videoPlayer->setToolTip( "videoPlayer" ); 13 14 //windows_.videoPlayer->setMedia( "sample2.wmv" ); 15 windows_.videoPlayer->setMedia( "sample4.mp4" ); 16 windows_.videoPlayer->play();

としました。

これを起動すると、(起動時にコンソール上で)エラーメッセージとして

DirectShowPlayerService::doRender: Unresolved error code 8007007

と出たのでキーワードとして検索したところ、

『Windows10 では(デフォルトでは)コーディック不足によりQtのQMediaPlayerを使った場合、MP4を再生するときにエラーになる』とあったので、

『K-Lite Codec Basic』をインストールしてみました。

『K-Lite Codec Pack 15.7.5 Basic』を起動  → "Update/Modify"  → "Profile 1: Standard playback" (全部をチェック)  → "Reset all settings ..." 以外をチェック  → "LAV Video - DXVA2 copy-back" を選択し、"MPEG-2"もチェック  → "Primary language"等を選択  → "Windows Media Player (x86)" を選択  → 全てのビデオやオーディオを選択  → "5.1 surroud" と "Disabled(= computer decodes audio)" を選択  → 全てのビデオやオーディオを選択  → "Install"

するとメッセージは消えましたが、
MP4ファイルが再生されません。

試しにwmvファイルを再生してみると普通に再生されました。(もちろん自分が組んだソフト上で)

MP4ファイルが壊れている可能性も考慮して、別のファイル(MP4ファイル)に切り替えてみましたが、それでも再生されません。
VLCというソフトや『映画&テレビ』では再生されるので壊れている可能性はないと思います。

[情報]
言語: C++
ライブラリ: Qt 5.6 (Windows APIも使っています)
OS: Windows 10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問