※ もしかすると言語やライブラリの問題ではなく、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
あなたの回答
tips
プレビュー